rfc8955.original | rfc8955.txt | |||
---|---|---|---|---|
IDR Working Group C. Loibl | Internet Engineering Task Force (IETF) C. Loibl | |||
Internet-Draft next layer Telekom GmbH | Request for Comments: 8955 next layer Telekom GmbH | |||
Obsoletes: 5575,7674 (if approved) S. Hares | Obsoletes: 5575, 7674 S. Hares | |||
Intended status: Standards Track Huawei | Category: Standards Track Huawei | |||
Expires: April 18, 2021 R. Raszuk | ISSN: 2070-1721 R. Raszuk | |||
Bloomberg LP | Bloomberg LP | |||
D. McPherson | D. McPherson | |||
Verisign | Verisign | |||
M. Bacher | M. Bacher | |||
T-Mobile Austria | T-Mobile Austria | |||
October 15, 2020 | November 2020 | |||
Dissemination of Flow Specification Rules | Dissemination of Flow Specification Rules | |||
draft-ietf-idr-rfc5575bis-27 | ||||
Abstract | Abstract | |||
This document defines a Border Gateway Protocol Network Layer | This document defines a Border Gateway Protocol Network Layer | |||
Reachability Information (BGP NLRI) encoding format that can be used | Reachability Information (BGP NLRI) encoding format that can be used | |||
to distribute traffic Flow Specifications. This allows the routing | to distribute (intra-domain and inter-domain) traffic Flow | |||
system to propagate information regarding more specific components of | Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This | |||
the traffic aggregate defined by an IP destination prefix. | allows the routing system to propagate information regarding more | |||
specific components of the traffic aggregate defined by an IP | ||||
destination prefix. | ||||
It also specifies BGP Extended Community encoding formats, that can | It also specifies BGP Extended Community encoding formats, which can | |||
be used to propagate Traffic Filtering Actions along with the Flow | be used to propagate Traffic Filtering Actions along with the Flow | |||
Specification NLRI. Those Traffic Filtering Actions encode actions a | Specification NLRI. Those Traffic Filtering Actions encode actions a | |||
routing system can take if the packet matches the Flow Specification. | routing system can take if the packet matches the Flow Specification. | |||
Additionally, it defines two applications of that encoding format: | This document obsoletes both RFC 5575 and RFC 7674. | |||
one that can be used to automate inter-domain coordination of traffic | ||||
filtering, such as what is required in order to mitigate | ||||
(distributed) denial-of-service attacks, and a second application to | ||||
provide traffic filtering in the context of a BGP/MPLS VPN service. | ||||
Other applications (e.g. centralized control of traffic in a SDN or | ||||
NFV context) are also possible. Other documents may specify Flow | ||||
Specification extensions. | ||||
The information is carried via BGP, thereby reusing protocol | ||||
algorithms, operational experience, and administrative processes such | ||||
as inter-provider peering agreements. | ||||
This document obsoletes both RFC5575 and RFC7674. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on April 18, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc8955. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Definitions of Terms Used in This Memo . . . . . . . . . . . 5 | 2. Definitions of Terms Used in This Memo | |||
3. Flow Specifications . . . . . . . . . . . . . . . . . . . . . 5 | 3. Flow Specifications | |||
4. Dissemination of IPv4 Flow Specification Information . . . . 6 | 4. Dissemination of IPv4 Flow Specification Information | |||
4.1. Length Encoding . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Length Encoding | |||
4.2. NLRI Value Encoding . . . . . . . . . . . . . . . . . . . 7 | 4.2. NLRI Value Encoding | |||
4.2.1. Operators . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2.1. Operators | |||
4.2.2. Components . . . . . . . . . . . . . . . . . . . . . 9 | 4.2.2. Components | |||
4.3. Examples of Encodings . . . . . . . . . . . . . . . . . . 14 | 4.2.2.1. Type 1 - Destination Prefix | |||
5. Traffic Filtering . . . . . . . . . . . . . . . . . . . . . . 16 | 4.2.2.2. Type 2 - Source Prefix | |||
5.1. Ordering of Flow Specifications . . . . . . . . . . . . . 17 | 4.2.2.3. Type 3 - IP Protocol | |||
6. Validation Procedure . . . . . . . . . . . . . . . . . . . . 18 | 4.2.2.4. Type 4 - Port | |||
7. Traffic Filtering Actions . . . . . . . . . . . . . . . . . . 19 | 4.2.2.5. Type 5 - Destination Port | |||
7.1. Traffic Rate in Bytes (traffic-rate-bytes) sub-type 0x06 21 | 4.2.2.6. Type 6 - Source Port | |||
7.2. Traffic Rate in Packets (traffic-rate-packets) sub-type | 4.2.2.7. Type 7 - ICMP Type | |||
TBD . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 4.2.2.8. Type 8 - ICMP Code | |||
7.3. Traffic-action (traffic-action) sub-type 0x07 . . . . . . 21 | 4.2.2.9. Type 9 - TCP Flags | |||
7.4. RT Redirect (rt-redirect) sub-type 0x08 . . . . . . . . . 22 | 4.2.2.10. Type 10 - Packet Length | |||
7.5. Traffic Marking (traffic-marking) sub-type 0x09 . . . . . 23 | 4.2.2.11. Type 11 - DSCP (Diffserv Code Point) | |||
7.6. Interaction with other Filtering Mechanisms in Routers . 23 | 4.2.2.12. Type 12 - Fragment | |||
7.7. Considerations on Traffic Filtering Action Interference . 24 | 4.3. Examples of Encodings | |||
8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks . 24 | 5. Traffic Filtering | |||
9. Traffic Monitoring . . . . . . . . . . . . . . . . . . . . . 25 | 5.1. Ordering of Flow Specifications | |||
10. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 25 | 6. Validation Procedure | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 7. Traffic Filtering Actions | |||
11.1. AFI/SAFI Definitions . . . . . . . . . . . . . . . . . . 25 | 7.1. Traffic Rate in Bytes (traffic-rate-bytes) Sub-Type 0x06 | |||
11.2. Flow Component Definitions . . . . . . . . . . . . . . . 27 | 7.2. Traffic Rate in Packets (traffic-rate-packets) Sub-Type | |||
11.3. Extended Community Flow Specification Actions . . . . . 28 | 0x0c | |||
12. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | 7.3. Traffic-Action (traffic-action) Sub-Type 0x07 | |||
13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 32 | 7.4. RT Redirect (rt-redirect) Sub-Type 0x08 | |||
14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 7.5. Traffic Marking (traffic-marking) Sub-Type 0x09 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 7.6. Interaction with Other Filtering Mechanisms in Routers | |||
15.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 7.7. Considerations on Traffic Filtering Action Interference | |||
15.2. Informative References . . . . . . . . . . . . . . . . . 34 | 8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks | |||
15.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 35 | 9. Traffic Monitoring | |||
Appendix A. Example Python code: flow_rule_cmp . . . . . . . . . 35 | 10. Error Handling | |||
Appendix B. Comparison with RFC 5575 . . . . . . . . . . . . . . 38 | 11. IANA Considerations | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 39 | 11.1. AFI/SAFI Definitions | |||
11.2. Flow Component Definitions | ||||
11.3. Extended Community Flow Specification Actions | ||||
12. Security Considerations | ||||
13. References | ||||
13.1. Normative References | ||||
13.2. Informative References | ||||
Appendix A. Example Python code: flow_rule_cmp | ||||
Appendix B. Comparison with RFC 5575 | ||||
Acknowledgments | ||||
Contributors | ||||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
This document obsoletes "Dissemination of Flow Specification Rules" | This document obsoletes "Dissemination of Flow Specification Rules" | |||
[RFC5575] (see Appendix B for the differences). This document also | [RFC5575] (see Appendix B for the differences). This document also | |||
obsoletes "Clarification of the Flowspec Redirect Extended Community" | obsoletes "Clarification of the Flowspec Redirect Extended Community" | |||
[RFC7674] since it incorporates the encoding of the BGP Flow | [RFC7674], since it incorporates the encoding of the BGP Flow | |||
Specification Redirect Extended Community in Section 7.4. | Specification Redirect Extended Community in Section 7.4. | |||
Modern IP routers have the capability to forward traffic and to | Modern IP routers have the capability to forward traffic and to | |||
classify, shape, rate limit, filter, or redirect packets based on | classify, shape, rate limit, filter, or redirect packets based on | |||
administratively defined policies. These traffic policy mechanisms | administratively defined policies. These traffic policy mechanisms | |||
allow the operator to define match rules that operate on multiple | allow the operator to define match rules that operate on multiple | |||
fields of the packet header. Actions such as the ones described | fields of the packet header. Actions, such as the ones described | |||
above can be associated with each rule. | above, can be associated with each rule. | |||
The n-tuple consisting of the matching criteria defines an aggregate | The n-tuple consisting of the matching criteria defines an aggregate | |||
traffic Flow Specification. The matching criteria can include | traffic Flow Specification. The matching criteria can include | |||
elements such as source and destination address prefixes, IP | elements such as source and destination address prefixes, IP | |||
protocol, and transport protocol port numbers. | protocol, and transport protocol port numbers. | |||
Section 4 of this document defines a general procedure to encode Flow | Section 4 of this document defines a general procedure to encode Flow | |||
Specifications for aggregated traffic flows so that they can be | Specifications for aggregated traffic flows so that they can be | |||
distributed as a BGP [RFC4271] NLRI. Additionally, Section 7 of this | distributed as a BGP [RFC4271] NLRI. Additionally, Section 7 of this | |||
document defines the required Traffic Filtering Actions BGP Extended | document defines the required Traffic Filtering Actions BGP Extended | |||
Communities and mechanisms to use BGP for intra- and inter-provider | Communities and mechanisms to use BGP for intra- and inter-provider | |||
distribution of traffic filtering rules to filter (distributed) | distribution of traffic filtering rules in order to mitigate DoS and | |||
denial-of-service (DoS) attacks. | DDoS attacks. | |||
By expanding routing information with Flow Specifications, the | By expanding routing information with Flow Specifications, the | |||
routing system can take advantage of the ACL (Access Control List) or | routing system can take advantage of the ACL (Access Control List) or | |||
firewall capabilities in the router's forwarding path. Flow | firewall capabilities in the router's forwarding path. Flow | |||
Specifications can be seen as more specific routing entries to a | Specifications can be seen as more specific routing entries to a | |||
unicast prefix and are expected to depend upon the existing unicast | unicast prefix and are expected to depend upon the existing unicast | |||
data information. | data information. | |||
A Flow Specification received from an external autonomous system will | A Flow Specification received from an external autonomous system will | |||
need to be validated against unicast routing before being accepted | need to be validated against unicast routing before being accepted | |||
skipping to change at page 4, line 39 ¶ | skipping to change at line 172 ¶ | |||
reuse both internal route distribution infrastructure (e.g., route | reuse both internal route distribution infrastructure (e.g., route | |||
reflector or confederation design) and existing external | reflector or confederation design) and existing external | |||
relationships (e.g., inter-domain BGP sessions to a customer | relationships (e.g., inter-domain BGP sessions to a customer | |||
network). | network). | |||
While it is certainly possible to address this problem using other | While it is certainly possible to address this problem using other | |||
mechanisms, this solution has been utilized in deployments because of | mechanisms, this solution has been utilized in deployments because of | |||
the substantial advantage of being an incremental addition to already | the substantial advantage of being an incremental addition to already | |||
deployed mechanisms. | deployed mechanisms. | |||
Possible applications of that extension are: Automated inter-domain | ||||
coordination of traffic filtering, such as what is required in order | ||||
to mitigate (distributed) denial-of-service attacks or traffic | ||||
filtering in the context of a BGP/MPLS VPN service. Other | ||||
applications (e.g., centralized control of traffic in a Software- | ||||
Defined Networking (SDN) or Network Function Virtualization (NFV) | ||||
context) are also possible. | ||||
In current deployments, the information distributed by this extension | In current deployments, the information distributed by this extension | |||
is originated both manually as well as automatically, the latter by | is originated both manually as well as automatically, the latter by | |||
systems that are able to detect malicious traffic flows. When | systems that are able to detect malicious traffic flows. When | |||
automated systems are used, care should be taken to ensure the | automated systems are used, care should be taken to ensure the | |||
correctness of the automated system. The the limitations of the | correctness of the automated system. The limitations of the | |||
receiving systems that need to process these automated Flow | receiving systems that need to process these automated Flow | |||
Specifications need to be taken in consideration as well (see also | Specifications need to be taken in consideration as well (see also | |||
Section 12). | Section 12). | |||
This specification defines required protocol extensions to address | This specification defines required protocol extensions to address | |||
most common applications of IPv4 unicast and VPNv4 unicast filtering. | most common applications of IPv4 unicast and VPNv4 unicast filtering. | |||
The same mechanism can be reused and new match criteria added to | The same mechanism can be reused and new match criteria added to | |||
address similar filtering needs for other BGP address families such | address similar filtering needs for other BGP address families, such | |||
as IPv6 families [I-D.ietf-idr-flow-spec-v6]. | as IPv6 families [IDR-FLOW-SPEC]. | |||
2. Definitions of Terms Used in This Memo | 2. Definitions of Terms Used in This Memo | |||
AFI - Address Family Identifier. | AFI: Address Family Identifier | |||
AS - Autonomous System. | AS: Autonomous System | |||
Loc-RIB - The Loc-RIB contains the routes that have been selected | Loc-RIB: The Loc-RIB contains the routes that have been selected by | |||
by the local BGP speaker's Decision Process [RFC4271]. | the local BGP speaker's Decision Process [RFC4271]. | |||
NLRI - Network Layer Reachability Information. | NLRI: Network Layer Reachability Information | |||
PE - Provider Edge router. | PE: Provider Edge router | |||
RIB - Routing Information Base. | RIB: Routing Information Base | |||
SAFI - Subsequent Address Family Identifier. | SAFI: Subsequent Address Family Identifier | |||
VRF - Virtual Routing and Forwarding instance. | VRF: Virtual Routing and Forwarding instance | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Flow Specifications | 3. Flow Specifications | |||
A Flow Specification is an n-tuple consisting of several matching | A Flow Specification is an n-tuple consisting of several matching | |||
criteria that can be applied to IP traffic. A given IP packet is | criteria that can be applied to IP traffic. A given IP packet is | |||
said to match the defined Flow Specification if it matches all the | said to match the defined Flow Specification if it matches all the | |||
specified criteria. This n-tuple is encoded into a BGP NLRI defined | specified criteria. This n-tuple is encoded into a BGP NLRI defined | |||
below. | below. | |||
A given Flow Specification may be associated with a set of | A given Flow Specification may be associated with a set of | |||
attributes, depending on the particular application; such attributes | attributes, depending on the particular application; such attributes | |||
may or may not include reachability information (i.e., NEXT_HOP). | may or may not include reachability information (i.e., NEXT_HOP). | |||
Well-known or AS-specific community attributes can be used to encode | Well-known or AS-specific community attributes can be used to encode | |||
a set of predetermined actions. | a set of predetermined actions. | |||
A particular application is identified by a specific (Address Family | A particular application is identified by a specific (Address Family | |||
Identifier, Subsequent Address Family Identifier (AFI, SAFI)) pair | Identifier, Subsequent Address Family Identifier (AFI, SAFI)) pair | |||
[RFC4760] and corresponds to a distinct set of RIBs. Those RIBs | [RFC4760] and corresponds to a distinct set of RIBs. Those RIBs | |||
should be treated independently from each other in order to assure | should be treated independently from each other in order to assure | |||
non-interference between distinct applications. | noninterference between distinct applications. | |||
BGP itself treats the NLRI as a key to an entry in its databases. | BGP itself treats the NLRI as a key to an entry in its databases. | |||
Entries that are placed in the Loc-RIB are then associated with a | Entries that are placed in the Loc-RIB are then associated with a | |||
given set of semantics, which is application dependent. This is | given set of semantics, which is application dependent. This is | |||
consistent with existing BGP applications. For instance, IP unicast | consistent with existing BGP applications. For instance, IP unicast | |||
routing (AFI=1, SAFI=1) and IP multicast reverse-path information | routing (AFI=1, SAFI=1) and IP multicast reverse-path information | |||
(AFI=1, SAFI=2) are handled by BGP without any particular semantics | (AFI=1, SAFI=2) are handled by BGP without any particular semantics | |||
being associated with them until installed in the Loc-RIB. | being associated with them until installed in the Loc-RIB. | |||
Standard BGP policy mechanisms, such as UPDATE filtering by NLRI | Standard BGP policy mechanisms, such as UPDATE filtering by NLRI | |||
prefix as well as community matching and must apply to the Flow | prefix as well as community matching, must apply to the Flow | |||
specification defined NLRI-type. Network operators can also control | specification defined NLRI-type. Network operators can also control | |||
propagation of such routing updates by enabling or disabling the | propagation of such routing updates by enabling or disabling the | |||
exchange of a particular (AFI, SAFI) pair on a given BGP peering | exchange of a particular (AFI, SAFI) pair on a given BGP peering | |||
session. | session. | |||
4. Dissemination of IPv4 Flow Specification Information | 4. Dissemination of IPv4 Flow Specification Information | |||
This document defines a Flow Specification NLRI type (Figure 1) that | This document defines a Flow Specification NLRI type (Figure 1) that | |||
may include several components such as destination prefix, source | may include several components, such as destination prefix, source | |||
prefix, protocol, ports, and others (see Section 4.2 below). | prefix, protocol, ports, and others (see Section 4.2 below). | |||
This NLRI information is encoded using MP_REACH_NLRI and | This NLRI information is encoded using MP_REACH_NLRI and | |||
MP_UNREACH_NLRI attributes as defined in [RFC4760]. When advertising | MP_UNREACH_NLRI attributes, as defined in [RFC4760]. When | |||
Flow Specifications, the Length of Next Hop Network Address MUST be | advertising Flow Specifications, the Length of the Next-Hop Network | |||
set to 0. The Network Address of Next Hop field MUST be ignored. | Address MUST be set to 0. The Network Address of the Next-Hop field | |||
MUST be ignored. | ||||
The NLRI field of the MP_REACH_NLRI and MP_UNREACH_NLRI is encoded as | The NLRI field of the MP_REACH_NLRI and MP_UNREACH_NLRI is encoded as | |||
one or more 2-tuples of the form <length, NLRI value>. It consists | one or more 2-tuples of the form <length, NLRI value>. It consists | |||
of a 1- or 2-octet length field followed by a variable-length NLRI | of a 1- or 2-octet length field followed by a variable-length NLRI | |||
value. The length is expressed in octets. | value. The length is expressed in octets. | |||
+-------------------------------+ | +-------------------------------+ | |||
| length (0xnn or 0xfnnn) | | | length (0xnn or 0xfnnn) | | |||
+-------------------------------+ | +-------------------------------+ | |||
| NLRI value (variable) | | | NLRI value (variable) | | |||
+-------------------------------+ | +-------------------------------+ | |||
Figure 1: Flow Specification NLRI for IPv4 | Figure 1: Flow Specification NLRI for IPv4 | |||
Implementations wishing to exchange Flow Specification MUST use BGP's | Implementations wishing to exchange Flow Specification MUST use BGP's | |||
Capability Advertisement facility to exchange the Multiprotocol | Capability Advertisement facility to exchange the Multiprotocol | |||
Extension Capability Code (Code 1) as defined in [RFC4760]. The | Extension Capability Code (Code 1), as defined in [RFC4760]. The | |||
(AFI, SAFI) pair carried in the Multiprotocol Extension Capability | (AFI, SAFI) pair carried in the Multiprotocol Extension Capability | |||
MUST be (AFI=1, SAFI=133) for IPv4 Flow Specification, and (AFI=1, | MUST be (AFI=1, SAFI=133) for IPv4 Flow Specification and (AFI=1, | |||
SAFI=134) for VPNv4 Flow Specification. | SAFI=134) for VPNv4 Flow Specification. | |||
4.1. Length Encoding | 4.1. Length Encoding | |||
o If the NLRI length is smaller than 240 (0xf0 hex) octets, the | The length field indicates the length in octets of the variable NLRI | |||
value: | ||||
* If the NLRI length is smaller than 240 (0xf0 hex) octets, the | ||||
length field can be encoded as a single octet. | length field can be encoded as a single octet. | |||
o Otherwise, it is encoded as an extended-length 2-octet value in | * Otherwise, it is encoded as an extended-length 2-octet value in | |||
which the most significant nibble has the hex value 0xf. | which the most significant nibble has the hex value 0xf. | |||
In Figure 1 above, values less-than 240 are encoded using two hex | In Figure 1 above, values less than 240 are encoded using two hex | |||
digits (0xnn). Values above 239 are encoded using 3 hex digits | digits (0xnn). Values above 239 are encoded using 3 hex digits | |||
(0xfnnn). The highest value that can be represented with this | (0xfnnn). The highest value that can be represented with this | |||
encoding is 4095. For example the length value of 239 is encoded as | encoding is 4095. For example, the length value of 239 is encoded as | |||
0xef (single octet) while 240 is encoded as 0xf0f0 (2-octet). | 0xef (single octet), while 240 is encoded as 0xf0f0 (2 octets). | |||
4.2. NLRI Value Encoding | 4.2. NLRI Value Encoding | |||
The Flow Specification NLRI value consists of a list of optional | The Flow Specification NLRI value consists of a list of optional | |||
components and is encoded as follows: | components and is encoded as follows: | |||
Encoding: <[component]+> | Encoding: <[component]+> | |||
A specific packet is considered to match the Flow Specification when | A specific packet is considered to match the Flow Specification when | |||
it matches the intersection (AND) of all the components present in | it matches the intersection (AND) of all the components present in | |||
the Flow Specification. | the Flow Specification. | |||
Components MUST follow strict type ordering by increasing numerical | Components MUST follow strict type ordering by increasing numerical | |||
order. A given component type MAY (exactly once) be present in the | order. A given component type MAY (exactly once) be present in the | |||
Flow Specification. If present, it MUST precede any component of | Flow Specification. If present, it MUST precede any component of | |||
higher numeric type value. | higher numeric type value. | |||
All combinations of components within a single Flow Specification are | All combinations of components within a single Flow Specification are | |||
allowed. However, some combinations cannot match any packets (e.g. | allowed. However, some combinations cannot match any packets (e.g., | |||
"ICMP Type AND Port" will never match any packets), and thus SHOULD | "ICMP Type AND Port" will never match any packets) and thus SHOULD | |||
NOT be propagated by BGP. | NOT be propagated by BGP. | |||
A NLRI value not encoded as specified here, including a NLRI that | An NLRI value not encoded as specified here, including an NLRI that | |||
contains an unknown component type, is considered malformed and error | contains an unknown component type, is considered malformed and error | |||
handling according to Section 10 is performed. | handling according to Section 10 is performed. | |||
4.2.1. Operators | 4.2.1. Operators | |||
Most of the components described below make use of comparison | Most of the components described below make use of comparison | |||
operators. Which of the two operators is used is defined by the | operators. Which of the two operators is used is defined by the | |||
components in Section 4.2.2. The operators are encoded as a single | components in Section 4.2.2. The operators are encoded as a single | |||
octet. | octet. | |||
skipping to change at page 8, line 16 ¶ | skipping to change at line 347 ¶ | |||
This operator is encoded as shown in Figure 2. | This operator is encoded as shown in Figure 2. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| e | a | len | 0 |lt |gt |eq | | | e | a | len | 0 |lt |gt |eq | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
Figure 2: Numeric Operator (numeric_op) | Figure 2: Numeric Operator (numeric_op) | |||
e - end-of-list bit: Set in the last {op, value} pair in the list. | e (end-of-list bit): Set in the last {op, value} pair in the list | |||
a - AND bit: If unset, the result of the previous {op, value} pair | a (AND bit): If unset, the result of the previous {op, value} pair | |||
is logically ORed with the current one. If set, the operation is | is logically ORed with the current one. If set, the operation | |||
a logical AND. In the first operator octet of a sequence it MUST | is a logical AND. In the first operator octet of a sequence, | |||
be encoded as unset and MUST be treated as always unset on | it MUST be encoded as unset and MUST be treated as always unset | |||
decoding. The AND operator has higher priority than OR for the | on decoding. The AND operator has higher priority than OR for | |||
purposes of evaluating logical expressions. | the purposes of evaluating logical expressions. | |||
len - length: The length of the value field for this operator given | len (length): The length of the value field for this operator given | |||
as (1 << len). This encodes 1 (len=00), 2 (len=01), 4 (len=10), 8 | as (1 << len). This encodes 1 (len=00), 2 (len=01), 4 | |||
(len=11) octets. | (len=10), and 8 (len=11) octets. | |||
0 - MUST be set to 0 on NLRI encoding, and MUST be ignored during | 0: MUST be set to 0 on NLRI encoding and MUST be ignored during | |||
decoding | decoding | |||
lt - less than comparison between data and value. | lt: less-than comparison between data and value | |||
gt - greater than comparison between data and value. | gt: greater-than comparison between data and value | |||
eq - equality between data and value. | eq: equality between data and value | |||
The bits lt, gt, and eq can be combined to produce common relational | The bits lt, gt, and eq can be combined to produce common relational | |||
operators such as "less or equal", "greater or equal", and "not equal | operators, such as "less or equal", "greater or equal", and "not | |||
to" as shown in Table 1. | equal to", as shown in Table 1. | |||
+----+----+----+-----------------------------------+ | +====+====+====+==================================+ | |||
| lt | gt | eq | Resulting operation | | | lt | gt | eq | Resulting operation | | |||
+----+----+----+-----------------------------------+ | +====+====+====+==================================+ | |||
| 0 | 0 | 0 | false (independent of the value) | | | 0 | 0 | 0 | false (independent of the value) | | |||
| 0 | 0 | 1 | == (equal) | | +----+----+----+----------------------------------+ | |||
| 0 | 1 | 0 | > (greater than) | | | 0 | 0 | 1 | == (equal) | | |||
| 0 | 1 | 1 | >= (greater than or equal) | | +----+----+----+----------------------------------+ | |||
| 1 | 0 | 0 | < (less than) | | | 0 | 1 | 0 | > (greater than) | | |||
| 1 | 0 | 1 | <= (less than or equal) | | +----+----+----+----------------------------------+ | |||
| 1 | 1 | 0 | != (not equal value) | | | 0 | 1 | 1 | >= (greater than or equal) | | |||
| 1 | 1 | 1 | true (independent of the value) | | +----+----+----+----------------------------------+ | |||
+----+----+----+-----------------------------------+ | | 1 | 0 | 0 | < (less than) | | |||
+----+----+----+----------------------------------+ | ||||
| 1 | 0 | 1 | <= (less than or equal) | | ||||
+----+----+----+----------------------------------+ | ||||
| 1 | 1 | 0 | != (not equal value) | | ||||
+----+----+----+----------------------------------+ | ||||
| 1 | 1 | 1 | true (independent of the value) | | ||||
+----+----+----+----------------------------------+ | ||||
Table 1: Comparison operation combinations | Table 1: Comparison Operation Combinations | |||
4.2.1.2. Bitmask Operator (bitmask_op) | 4.2.1.2. Bitmask Operator (bitmask_op) | |||
This operator is encoded as shown in Figure 3. | This operator is encoded as shown in Figure 3. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| e | a | len | 0 | 0 |not| m | | | e | a | len | 0 | 0 |not| m | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
Figure 3: Bitmask Operator (bitmask_op) | Figure 3: Bitmask Operator (bitmask_op) | |||
e, a, len - Most significant nibble: (end-of-list bit, AND bit, and | e, a, len (end-of-list bit, AND bit, and length field): Most | |||
length field), as defined in the Numeric Operator format in | significant nibble; defined in the Numeric Operator format in | |||
Section 4.2.1.1. | Section 4.2.1.1. | |||
not - NOT bit: If set, logical negation of operation. | not (NOT bit): If set, logical negation of operation. | |||
m - Match bit: If set, this is a bitwise match operation defined as | m (Match bit): If set, this is a bitwise match operation defined as | |||
"(data AND value) == value"; if unset, (data AND value) evaluates | "(data AND value) == value"; if unset, (data AND value) | |||
to TRUE if any of the bits in the value mask are set in the data | evaluates to TRUE if any of the bits in the value mask are set | |||
in the data. | ||||
0 - all 0 bits: MUST be set to 0 on NLRI encoding, and MUST be | 0 (all 0 bits): MUST be set to 0 on NLRI encoding and MUST be | |||
ignored during decoding | ignored during decoding | |||
4.2.2. Components | 4.2.2. Components | |||
The encoding of each of the components begins with a type field (1 | The encoding of each of the components begins with a type field (1 | |||
octet) followed by a variable length parameter. The following | octet) followed by a variable length parameter. The following | |||
sections define component types and parameter encodings for the IPv4 | sections define component types and parameter encodings for the IPv4 | |||
IP layer and transport layer headers. IPv6 NLRI component types are | IP layer and transport layer headers. IPv6 NLRI component types are | |||
described in [I-D.ietf-idr-flow-spec-v6]. | described in [IDR-FLOW-SPEC]. | |||
4.2.2.1. Type 1 - Destination Prefix | 4.2.2.1. Type 1 - Destination Prefix | |||
Encoding: <type (1 octet), length (1 octet), prefix (variable)> | Encoding: <type (1 octet), length (1 octet), prefix (variable)> | |||
Defines the destination prefix to match. The length and prefix | Defines the destination prefix to match. The length and prefix | |||
fields are encoded as in BGP UPDATE messages [RFC4271] | fields are encoded as in BGP UPDATE messages [RFC4271]. | |||
4.2.2.2. Type 2 - Source Prefix | 4.2.2.2. Type 2 - Source Prefix | |||
Encoding: <type (1 octet), length (1 octet), prefix (variable)> | Encoding: <type (1 octet), length (1 octet), prefix (variable)> | |||
Defines the source prefix to match. The length and prefix fields are | Defines the source prefix to match. The length and prefix fields are | |||
encoded as in BGP UPDATE messages [RFC4271] | encoded as in BGP UPDATE messages [RFC4271]. | |||
4.2.2.3. Type 3 - IP Protocol | 4.2.2.3. Type 3 - IP Protocol | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Contains a list of {numeric_op, value} pairs that are used to match | Contains a list of {numeric_op, value} pairs that are used to match | |||
the IP protocol value octet in IP packet header (see [RFC0791] | the IP protocol value octet in IP packet header (see Section 3.1 of | |||
Section 3.1). | [RFC0791]). | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 3 component values SHOULD be encoded as single | Section 4.2.1.1. Type 3 component values SHOULD be encoded as single | |||
octet (numeric_op len=00). | octet (numeric_op len=00). | |||
4.2.2.4. Type 4 - Port | 4.2.2.4. Type 4 - Port | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs that matches source OR | Defines a list of {numeric_op, value} pairs that match source OR | |||
destination TCP/UDP ports (see [RFC0793] Section 3.1 and [RFC0768] | destination TCP/UDP ports (see Section 3.1 of [RFC0793] and the | |||
Section "Format"). This component matches if either the destination | "Format" section of [RFC0768]). This component matches if either the | |||
port OR the source port of a IP packet matches the value. | destination port OR the source port of an IP packet matches the | |||
value. | ||||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 4 component values SHOULD be encoded as 1- or | Section 4.2.1.1. Type 4 component values SHOULD be encoded as 1- or | |||
2-octet quantities (numeric_op len=00 or len=01). | 2-octet quantities (numeric_op len=00 or len=01). | |||
In case of the presence of the port (destination-port | In case of the presence of the port (destination-port | |||
Section 4.2.2.5, source-port Section 4.2.2.6) component only TCP or | (Section 4.2.2.5), source-port (Section 4.2.2.6)) component, only TCP | |||
UDP packets can match the entire Flow Specification. The port | or UDP packets can match the entire Flow Specification. The port | |||
component, if present, never matches when the packet's IP protocol | component, if present, never matches when the packet's IP protocol | |||
value is not 6 (TCP) or 17 (UDP), if the packet is fragmented and | value is not 6 (TCP) or 17 (UDP), if the packet is fragmented and | |||
this is not the first fragment, or if the system is unable to locate | this is not the first fragment, or if the system is unable to locate | |||
the transport header. Different implementations may or may not be | the transport header. Different implementations may or may not be | |||
able to decode the transport header in the presence of IP options or | able to decode the transport header in the presence of IP options or | |||
Encapsulating Security Payload (ESP) NULL [RFC4303] encryption. | Encapsulating Security Payload (ESP) NULL [RFC4303] encryption. | |||
4.2.2.5. Type 5 - Destination Port | 4.2.2.5. Type 5 - Destination Port | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs used to match the | Defines a list of {numeric_op, value} pairs used to match the | |||
destination port of a TCP or UDP packet (see also [RFC0793] | destination port of a TCP or UDP packet (see also Section 3.1 of | |||
Section 3.1 and [RFC0768] Section "Format"). | [RFC0793] and the "Format" section of [RFC0768]. | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 5 component values SHOULD be encoded as 1- or | Section 4.2.1.1. Type 5 component values SHOULD be encoded as 1- or | |||
2-octet quantities (numeric_op len=00 or len=01). | 2-octet quantities (numeric_op len=00 or len=01). | |||
The last paragraph of Section 4.2.2.4 also applies to this component. | The last paragraph of Section 4.2.2.4 also applies to this component. | |||
4.2.2.6. Type 6 - Source Port | 4.2.2.6. Type 6 - Source Port | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs used to match the source | Defines a list of {numeric_op, value} pairs used to match the source | |||
port of a TCP or UDP packet (see also [RFC0793] Section 3.1 and | port of a TCP or UDP packet (see also Section 3.1 of [RFC0793] and | |||
[RFC0768] Section "Format"). | the "Format" section of [RFC0768]. | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 6 component values SHOULD be encoded as 1- or | Section 4.2.1.1. Type 6 component values SHOULD be encoded as 1- or | |||
2-octet quantities (numeric_op len=00 or len=01). | 2-octet quantities (numeric_op len=00 or len=01). | |||
The last paragraph of Section 4.2.2.4 also applies to this component. | The last paragraph of Section 4.2.2.4 also applies to this component. | |||
4.2.2.7. Type 7 - ICMP type | 4.2.2.7. Type 7 - ICMP Type | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs used to match the type | Defines a list of {numeric_op, value} pairs used to match the type | |||
field of an ICMP packet (see also [RFC0792] Section "Message | field of an ICMP packet (see also the "Message Formats" section of | |||
Formats"). | [RFC0792]). | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 7 component values SHOULD be encoded as single | Section 4.2.1.1. Type 7 component values SHOULD be encoded as single | |||
octet (numeric_op len=00). | octet (numeric_op len=00). | |||
In case of the presence of the ICMP type component only ICMP packets | In case of the presence of the ICMP type component, only ICMP packets | |||
can match the entire Flow Specification. The ICMP type component, if | can match the entire Flow Specification. The ICMP type component, if | |||
present, never matches when the packet's IP protocol value is not 1 | present, never matches when the packet's IP protocol value is not 1 | |||
(ICMP), if the packet is fragmented and this is not the first | (ICMP), if the packet is fragmented and this is not the first | |||
fragment, or if the system is unable to locate the transport header. | fragment, or if the system is unable to locate the transport header. | |||
Different implementations may or may not be able to decode the | Different implementations may or may not be able to decode the | |||
transport header in the presence of IP options or Encapsulating | transport header in the presence of IP options or Encapsulating | |||
Security Payload (ESP) NULL [RFC4303] encryption. | Security Payload (ESP) NULL [RFC4303] encryption. | |||
4.2.2.8. Type 8 - ICMP code | 4.2.2.8. Type 8 - ICMP Code | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs used to match the code | Defines a list of {numeric_op, value} pairs used to match the code | |||
field of an ICMP packet (see also [RFC0792] Section "Message | field of an ICMP packet (see also the "Message Formats" section of | |||
Formats"). | [RFC0792]). | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 8 component values SHOULD be encoded as single | Section 4.2.1.1. Type 8 component values SHOULD be encoded as single | |||
octet (numeric_op len=00). | octet (numeric_op len=00). | |||
In case of the presence of the ICMP code component only ICMP packets | In case of the presence of the ICMP code component, only ICMP packets | |||
can match the entire Flow Specification. The ICMP code component, if | can match the entire Flow Specification. The ICMP code component, if | |||
present, never matches when the packet's IP protocol value is not 1 | present, never matches when the packet's IP protocol value is not 1 | |||
(ICMP), if the packet is fragmented and this is not the first | (ICMP), if the packet is fragmented and this is not the first | |||
fragment, or if the system is unable to locate the transport header. | fragment, or if the system is unable to locate the transport header. | |||
Different implementations may or may not be able to decode the | Different implementations may or may not be able to decode the | |||
transport header in the presence of IP options or Encapsulating | transport header in the presence of IP options or Encapsulating | |||
Security Payload (ESP) NULL [RFC4303] encryption. | Security Payload (ESP) NULL [RFC4303] encryption. | |||
4.2.2.9. Type 9 - TCP flags | 4.2.2.9. Type 9 - TCP Flags | |||
Encoding: <type (1 octet), [bitmask_op, bitmask]+> | Encoding: <type (1 octet), [bitmask_op, bitmask]+> | |||
Defines a list of {bitmask_op, bitmask} pairs used to match TCP | Defines a list of {bitmask_op, bitmask} pairs used to match TCP | |||
Control Bits (see also [RFC0793] Section 3.1). | control bits (see also Section 3.1 of [RFC0793]). | |||
This component uses the Bitmask Operator (bitmask_op) described in | This component uses the Bitmask Operator (bitmask_op) described in | |||
Section 4.2.1.2. Type 9 component bitmasks MUST be encoded as 1- or | Section 4.2.1.2. Type 9 component bitmasks MUST be encoded as 1- or | |||
2-octet bitmask (bitmask_op len=00 or len=01). | 2-octet bitmask (bitmask_op len=00 or len=01). | |||
When a single octet (bitmask_op len=00) is specified, it matches | When a single octet (bitmask_op len=00) is specified, it matches | |||
octet 14 of the TCP header (see also [RFC0793] Section 3.1), which | octet 14 of the TCP header (see also Section 3.1 of [RFC0793]), which | |||
contains the TCP Control Bits. When a 2-octet (bitmask_op len=01) | contains the TCP control bits. When a 2-octet (bitmask_op len=01) | |||
encoding is used, it matches octets 13 and 14 of the TCP header with | encoding is used, it matches octets 13 and 14 of the TCP header with | |||
the data offset (leftmost 4 bits) always treated as 0. | the data offset (leftmost 4 bits) always treated as 0. | |||
In case of the presence of the TCP flags component only TCP packets | In case of the presence of the TCP flags component, only TCP packets | |||
can match the entire Flow Specification. The TCP flags component, if | can match the entire Flow Specification. The TCP flags component, if | |||
present, never matches when the packet's IP protocol value is not 6 | present, never matches when the packet's IP protocol value is not 6 | |||
(TCP), if the packet is fragmented and this is not the first | (TCP), if the packet is fragmented and this is not the first | |||
fragment, or if the system is unable to locate the transport header. | fragment, or if the system is unable to locate the transport header. | |||
Different implementations may or may not be able to decode the | Different implementations may or may not be able to decode the | |||
transport header in the presence of IP options or Encapsulating | transport header in the presence of IP options or Encapsulating | |||
Security Payload (ESP) NULL [RFC4303] encryption. | Security Payload (ESP) NULL [RFC4303] encryption. | |||
4.2.2.10. Type 10 - Packet length | 4.2.2.10. Type 10 - Packet Length | |||
Encoding: <type (1 octet), [numeric_op, value]+> | Encoding: <type (1 octet), [numeric_op, value]+> | |||
Defines a list of {numeric_op, value} pairs used to match on the | Defines a list of {numeric_op, value} pairs used to match on the | |||
total IP packet length (excluding Layer 2 but including IP header). | total IP packet length (excluding Layer 2 but including IP header). | |||
This component uses the Numeric Operator (numeric_op) described in | This component uses the Numeric Operator (numeric_op) described in | |||
Section 4.2.1.1. Type 10 component values SHOULD be encoded as 1- or | Section 4.2.1.1. Type 10 component values SHOULD be encoded as 1- or | |||
2-octet quantities (numeric_op len=00 or len=01). | 2-octet quantities (numeric_op len=00 or len=01). | |||
skipping to change at page 13, line 46 ¶ | skipping to change at line 615 ¶ | |||
This component uses the Bitmask Operator (bitmask_op) described in | This component uses the Bitmask Operator (bitmask_op) described in | |||
Section 4.2.1.2. The Type 12 component bitmask MUST be encoded as | Section 4.2.1.2. The Type 12 component bitmask MUST be encoded as | |||
single octet bitmask (bitmask_op len=00). | single octet bitmask (bitmask_op len=00). | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 0 | 0 | 0 |LF |FF |IsF|DF | | | 0 | 0 | 0 | 0 |LF |FF |IsF|DF | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
Figure 4: Fragment Bitmask Operand | Figure 4: Fragment Bitmask Operand | |||
Bitmask values: | Bitmask values: | |||
DF - Don't fragment - match if [RFC0791] IP Header Flags Bit-1 (DF) | DF (Don't Fragment): match if IP Header Flags Bit-1 (DF) [RFC0791] | |||
is 1 | is 1 | |||
IsF - Is a fragment other than the first - match if [RFC0791] IP | IsF (Is a fragment other than the first): match if the [RFC0791] IP | |||
Header Fragment Offset is not 0 | Header Fragment Offset is not 0 | |||
FF - First fragment - match if [RFC0791] IP Header Fragment Offset | FF (First Fragment): match if the [RFC0791] IP Header Fragment | |||
is 0 AND Flags Bit-2 (MF) is 1 | Offset is 0 AND Flags Bit-2 (MF) is 1 | |||
LF - Last fragment - match if [RFC0791] IP Header Fragment Offset is | LF (Last Fragment): match if the [RFC0791] IP Header Fragment Offset | |||
not 0 AND Flags Bit-2 (MF) is 0 | is not 0 AND Flags Bit-2 (MF) is 0 | |||
0 - MUST be set to 0 on NLRI encoding, and MUST be ignored during | 0: MUST be set to 0 on NLRI encoding and MUST be ignored during | |||
decoding | decoding | |||
4.3. Examples of Encodings | 4.3. Examples of Encodings | |||
4.3.1. Example 1 | 4.3.1. Example 1 | |||
An example of a Flow Specification NLRI encoding for: "all packets to | An example of a Flow Specification NLRI encoding for: "all packets to | |||
192.0.2.0/24 and TCP port 25". | 192.0.2.0/24 and TCP port 25". | |||
+--------+----------------+----------+----------+ | +========+================+==========+==========+ | |||
| length | destination | protocol | port | | | length | destination | protocol | port | | |||
+--------+----------------+----------+----------+ | +========+================+==========+==========+ | |||
| 0x0b | 01 18 c0 00 02 | 03 81 06 | 04 81 19 | | | 0x0b | 01 18 c0 00 02 | 03 81 06 | 04 81 19 | | |||
+--------+----------------+----------+----------+ | +--------+----------------+----------+----------+ | |||
Table 2 | ||||
Decoded: | Decoded: | |||
+=======+============================================+ | ||||
| Value | | | ||||
+=======+============+===============================+ | ||||
| 0x0b | length | 11 octets (len<240 1-octet) | | ||||
+-------+------------+-------------------------------+ | +-------+------------+-------------------------------+ | |||
| Value | | | | | 0x01 | type | Type 1 - Destination Prefix | | |||
+-------+------------+-------------------------------+ | +-------+------------+-------------------------------+ | |||
| 0x0b | length | 11 octets (len<240 1-octet) | | | 0x18 | length | 24 bit | | |||
| 0x01 | type | Type 1 - Destination Prefix | | +-------+------------+-------------------------------+ | |||
| 0x18 | length | 24 bit | | | 0xc0 | prefix | 192 | | |||
| 0xc0 | prefix | 192 | | +-------+------------+-------------------------------+ | |||
| 0x00 | prefix | 0 | | | 0x00 | prefix | 0 | | |||
| 0x02 | prefix | 2 | | +-------+------------+-------------------------------+ | |||
| 0x03 | type | Type 3 - IP Protocol | | | 0x02 | prefix | 2 | | |||
| 0x81 | numeric_op | end-of-list, value size=1, == | | +-------+------------+-------------------------------+ | |||
| 0x06 | value | 6 (TCP) | | | 0x03 | type | Type 3 - IP Protocol | | |||
| 0x04 | type | Type 4 - Port | | +-------+------------+-------------------------------+ | |||
| 0x81 | numeric_op | end-of-list, value size=1, == | | | 0x81 | numeric_op | end-of-list, value size=1, == | | |||
| 0x19 | value | 25 | | +-------+------------+-------------------------------+ | |||
| 0x06 | value | 6 (TCP) | | ||||
+-------+------------+-------------------------------+ | ||||
| 0x04 | type | Type 4 - Port | | ||||
+-------+------------+-------------------------------+ | ||||
| 0x81 | numeric_op | end-of-list, value size=1, == | | ||||
+-------+------------+-------------------------------+ | ||||
| 0x19 | value | 25 | | ||||
+-------+------------+-------------------------------+ | +-------+------------+-------------------------------+ | |||
This constitutes a NLRI with a NLRI length of 11 octets. | Table 3 | |||
This constitutes an NLRI with an NLRI length of 11 octets. | ||||
4.3.2. Example 2 | 4.3.2. Example 2 | |||
An example of a Flow Specification NLRI encoding for: "all packets to | An example of a Flow Specification NLRI encoding for: "all packets to | |||
192.0.2.0/24 from 203.0.113.0/24 and port {range [137, 139] or | 192.0.2.0/24 from 203.0.113.0/24 and port {range [137, 139] or | |||
8080}". | 8080}". | |||
+--------+----------------+----------------+-------------------------+ | +========+================+================+=============+ | |||
| length | destination | source | port | | | length | destination | source | port | | |||
+--------+----------------+----------------+-------------------------+ | +========+================+================+=============+ | |||
| 0x12 | 01 18 c0 00 02 | 02 18 cb 00 71 | 04 03 89 45 8b 91 1f 90 | | | 0x12 | 01 18 c0 00 02 | 02 18 cb 00 71 | 04 03 89 45 | | |||
+--------+----------------+----------------+-------------------------+ | | | | | 8b 91 1f 90 | | |||
+--------+----------------+----------------+-------------+ | ||||
Table 4 | ||||
Decoded: | Decoded: | |||
+========+============================================+ | ||||
| Value | | | ||||
+========+============+===============================+ | ||||
| 0x12 | length | 18 octets (len<240 1-octet) | | ||||
+--------+------------+-------------------------------+ | +--------+------------+-------------------------------+ | |||
| Value | | | | | 0x01 | type | Type 1 - Destination Prefix | | |||
+--------+------------+-------------------------------+ | ||||
| 0x18 | length | 24 bit | | ||||
+--------+------------+-------------------------------+ | ||||
| 0xc0 | prefix | 192 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x00 | prefix | 0 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x02 | prefix | 2 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x02 | type | Type 2 - Source Prefix | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x18 | length | 24 bit | | ||||
+--------+------------+-------------------------------+ | ||||
| 0xcb | prefix | 203 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x00 | prefix | 0 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x71 | prefix | 113 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x04 | type | Type 4 - Port | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x03 | numeric_op | value size=1, >= | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x89 | value | 137 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x45 | numeric_op | "AND", value size=1, <= | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x8b | value | 139 | | ||||
+--------+------------+-------------------------------+ | ||||
| 0x91 | numeric_op | end-of-list, value size=2, == | | ||||
+--------+------------+-------------------------------+ | +--------+------------+-------------------------------+ | |||
| 0x12 | length | 18 octets (len<240 1-octet) | | ||||
| 0x01 | type | Type 1 - Destination Prefix | | ||||
| 0x18 | length | 24 bit | | ||||
| 0xc0 | prefix | 192 | | ||||
| 0x00 | prefix | 0 | | ||||
| 0x02 | prefix | 2 | | ||||
| 0x02 | type | Type 2 - Source Prefix | | ||||
| 0x18 | length | 24 bit | | ||||
| 0xcb | prefix | 203 | | ||||
| 0x00 | prefix | 0 | | ||||
| 0x71 | prefix | 113 | | ||||
| 0x04 | type | Type 4 - Port | | ||||
| 0x03 | numeric_op | value size=1, >= | | ||||
| 0x89 | value | 137 | | ||||
| 0x45 | numeric_op | "AND", value size=1, <= | | ||||
| 0x8b | value | 139 | | ||||
| 0x91 | numeric_op | end-of-list, value size=2, == | | ||||
| 0x1f90 | value | 8080 | | | 0x1f90 | value | 8080 | | |||
+--------+------------+-------------------------------+ | +--------+------------+-------------------------------+ | |||
This constitutes a NLRI with a NLRI length of 18 octets. | Table 5 | |||
This constitutes an NLRI with an NLRI length of 18 octets. | ||||
4.3.3. Example 3 | 4.3.3. Example 3 | |||
An example of a Flow Specification NLRI encoding for: "all packets to | An example of a Flow Specification NLRI encoding for: "all packets to | |||
192.0.2.1/32 and fragment { DF or FF } (matching packet with DF bit | 192.0.2.1/32 and fragment { DF or FF } (matching packet with DF bit | |||
set or First Fragments) | set or First Fragments) | |||
+--------+-------------------+----------+ | ||||
| length | destination | fragment | | +========+===================+==========+ | |||
+--------+-------------------+----------+ | | length | destination | fragment | | |||
| 0x09 | 01 20 c0 00 02 01 | 0c 80 05 | | +========+===================+==========+ | |||
+--------+-------------------+----------+ | | 0x09 | 01 20 c0 00 02 01 | 0c 80 05 | | |||
+--------+-------------------+----------+ | ||||
Table 6 | ||||
Decoded: | Decoded: | |||
+-------+------------+------------------------------+ | +=======+==========================================+ | |||
| Value | | | | | Value | | | |||
+-------+------------+------------------------------+ | +=======+============+=============================+ | |||
| 0x09 | length | 9 octets (len<240 1-octet) | | | 0x09 | length | 9 octets (len<240 1-octet) | | |||
| 0x01 | type | Type 1 - Destination Prefix | | +-------+------------+-----------------------------+ | |||
| 0x20 | length | 32 bit | | | 0x01 | type | Type 1 - Destination Prefix | | |||
| 0xc0 | prefix | 192 | | +-------+------------+-----------------------------+ | |||
| 0x00 | prefix | 0 | | | 0x20 | length | 32 bit | | |||
| 0x02 | prefix | 2 | | +-------+------------+-----------------------------+ | |||
| 0x01 | prefix | 1 | | | 0xc0 | prefix | 192 | | |||
| 0x0c | type | Type 12 - Fragment | | +-------+------------+-----------------------------+ | |||
| 0x80 | bitmask_op | end-of-list, value size=1 | | | 0x00 | prefix | 0 | | |||
| 0x05 | bitmask | DF=1, FF=1 | | +-------+------------+-----------------------------+ | |||
+-------+------------+------------------------------+ | | 0x02 | prefix | 2 | | |||
+-------+------------+-----------------------------+ | ||||
| 0x01 | prefix | 1 | | ||||
+-------+------------+-----------------------------+ | ||||
| 0x0c | type | Type 12 - Fragment | | ||||
+-------+------------+-----------------------------+ | ||||
| 0x80 | bitmask_op | end-of-list, value size=1 | | ||||
+-------+------------+-----------------------------+ | ||||
| 0x05 | bitmask | DF=1, FF=1 | | ||||
+-------+------------+-----------------------------+ | ||||
This constitutes a NLRI with a NLRI length of 9 octets. | Table 7 | |||
This constitutes an NLRI with an NLRI length of 9 octets. | ||||
5. Traffic Filtering | 5. Traffic Filtering | |||
Traffic filtering policies have been traditionally considered to be | Traffic filtering policies have been traditionally considered to be | |||
relatively static. Limitations of these static mechanisms caused | relatively static. Limitations of these static mechanisms caused | |||
this new dynamic mechanism to be designed for the three new | this new dynamic mechanism to be designed for the three new | |||
applications of traffic filtering: | applications of traffic filtering: | |||
o Prevention of traffic-based, denial-of-service (DOS) attacks. | * Prevention of traffic-based, denial-of-service (DoS) attacks | |||
o Traffic filtering in the context of BGP/MPLS VPN service. | * Traffic filtering in the context of BGP/MPLS VPN service | |||
o Centralized traffic control for SDN/NFV networks. | * Centralized traffic control for SDN/NFV networks | |||
These applications require coordination among service providers and/ | These applications require coordination among service providers and/ | |||
or coordination among the AS within a service provider. | or coordination among the AS within a service provider. | |||
The Flow Specification NLRI defined in Section 4 conveys information | The Flow Specification NLRI defined in Section 4 conveys information | |||
about traffic filtering rules for traffic that should be discarded or | about traffic filtering rules for traffic that should be discarded or | |||
handled in a manner specified by a set of pre-defined actions (which | handled in a manner specified by a set of predefined actions (which | |||
are defined in BGP Extended Communities). This mechanism is | are defined in BGP Extended Communities). This mechanism is | |||
primarily designed to allow an upstream autonomous system to perform | primarily designed to allow an upstream autonomous system to perform | |||
inbound filtering in their ingress routers of traffic that a given | inbound filtering in their ingress routers of traffic that a given | |||
downstream AS wishes to drop. | downstream AS wishes to drop. | |||
In order to achieve this goal, this document specifies two | In order to achieve this goal, this document specifies two | |||
application-specific NLRI identifiers that provide traffic filters, | application-specific NLRI identifiers that provide traffic filters | |||
and a set of actions encoding in BGP Extended Communities. The two | and a set of actions encoding in BGP Extended Communities. The two | |||
application-specific NLRI identifiers are: | application-specific NLRI identifiers are: | |||
o IPv4 Flow Specification identifier (AFI=1, SAFI=133) along with | * IPv4 Flow Specification identifier (AFI=1, SAFI=133) along with | |||
specific semantic rules for IPv4 routes, and | specific semantic rules for IPv4 routes and | |||
o VPNv4 Flow Specification identifier (AFI=1, SAFI=134) value, which | * VPNv4 Flow Specification identifier (AFI=1, SAFI=134) value, which | |||
can be used to propagate traffic filtering information in a BGP/ | can be used to propagate traffic filtering information in a BGP/ | |||
MPLS VPN environment. | MPLS VPN environment. | |||
Encoding of the NLRI is described in Section 4 for IPv4 Flow | Encoding of the NLRI is described in Section 4 for IPv4 Flow | |||
Specification and in Section 8 for VPNv4 Flow Specification. The | Specification and in Section 8 for VPNv4 Flow Specification. The | |||
filtering actions are described in Section 7. | filtering actions are described in Section 7. | |||
5.1. Ordering of Flow Specifications | 5.1. Ordering of Flow Specifications | |||
More than one Flow Specification may match a particular traffic flow. | More than one Flow Specification may match a particular traffic flow. | |||
skipping to change at page 17, line 37 ¶ | skipping to change at line 844 ¶ | |||
on the arrival order of the Flow Specification via BGP and thus is | on the arrival order of the Flow Specification via BGP and thus is | |||
consistent in the network. | consistent in the network. | |||
The relative order of two Flow Specifications is determined by | The relative order of two Flow Specifications is determined by | |||
comparing their respective components. The algorithm starts by | comparing their respective components. The algorithm starts by | |||
comparing the left-most components (lowest component type value) of | comparing the left-most components (lowest component type value) of | |||
the Flow Specifications. If the types differ, the Flow Specification | the Flow Specifications. If the types differ, the Flow Specification | |||
with lowest numeric type value has higher precedence (and thus will | with lowest numeric type value has higher precedence (and thus will | |||
match before) than the Flow Specification that doesn't contain that | match before) than the Flow Specification that doesn't contain that | |||
component type. If the component types are the same, then a type- | component type. If the component types are the same, then a type- | |||
specific comparison is performed (see below). If the types are equal | specific comparison is performed (see below). If the types are | |||
the algorithm continues with the next component. | equal, the algorithm continues with the next component. | |||
For IP prefix values (IP destination or source prefix): If one of the | For IP prefix values (IP destination or source prefix), if one of the | |||
two prefixes to compare is a more specific prefix of the other, the | two prefixes to compare is a more specific prefix of the other, the | |||
more specific prefix has higher precedence. Otherwise the one with | more specific prefix has higher precedence. Otherwise, the one with | |||
the lowest IP value has higher precedence. | the lowest IP value has higher precedence. | |||
For all other component types, unless otherwise specified, the | For all other component types, unless otherwise specified, the | |||
comparison is performed by comparing the component data as a binary | comparison is performed by comparing the component data as a binary | |||
string using the memcmp() function as defined by [ISO_IEC_9899]. For | string using the memcmp() function as defined by [ISO_IEC_9899]. For | |||
strings with equal lengths the lowest string (memcmp) has higher | strings with equal lengths, the lowest string (memcmp) has higher | |||
precedence. For strings of different lengths, the common prefix is | precedence. For strings of different lengths, the common prefix is | |||
compared. If the common prefix is not equal the string with the | compared. If the common prefix is not equal, the string with the | |||
lowest prefix has higher precedence. If the common prefix is equal, | lowest prefix has higher precedence. If the common prefix is equal, | |||
the longest string is considered to have higher precedence than the | the longest string is considered to have higher precedence than the | |||
shorter one. | shorter one. | |||
The code in Appendix A shows a Python3 implementation of the | The code in Appendix A shows a Python3 implementation of the | |||
comparison algorithm. The full code was tested with Python 3.6.3 and | comparison algorithm. The full code was tested with Python 3.6.3 and | |||
can be obtained at | can be obtained at | |||
https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp [1]. | <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp>. | |||
6. Validation Procedure | 6. Validation Procedure | |||
Flow Specifications received from a BGP peer that are accepted in the | Flow Specifications received from a BGP peer that are accepted in the | |||
respective Adj-RIB-In are used as input to the route selection | respective Adj-RIB-In are used as input to the route selection | |||
process. Although the forwarding attributes of two routes for the | process. Although the forwarding attributes of two routes for the | |||
same Flow Specification prefix may be the same, BGP is still required | same Flow Specification prefix may be the same, BGP is still required | |||
to perform its path selection algorithm in order to select the | to perform its path selection algorithm in order to select the | |||
correct set of attributes to advertise. | correct set of attributes to advertise. | |||
The first step of the BGP Route Selection procedure (Section 9.1.2 of | The first step of the BGP Route Selection procedure (Section 9.1.2 of | |||
[RFC4271] is to exclude from the selection procedure routes that are | [RFC4271]) is to exclude from the selection procedure routes that are | |||
considered non-feasible. In the context of IP routing information, | considered unfeasible. In the context of IP routing information, | |||
this step is used to validate that the NEXT_HOP attribute of a given | this step is used to validate that the NEXT_HOP attribute of a given | |||
route is resolvable. | route is resolvable. | |||
The concept can be extended, in the case of the Flow Specification | The concept can be extended, in the case of the Flow Specification | |||
NLRI, to allow other validation procedures. | NLRI, to allow other validation procedures. | |||
The validation process described below validates Flow Specifications | The validation process described below validates Flow Specifications | |||
against unicast routes received over the same AFI but the associated | against unicast routes received over the same AFI but the associated | |||
unicast routing information SAFI: | unicast routing information SAFI: | |||
Flow Specification received over SAFI=133 will be validated | * Flow Specification received over SAFI=133 will be validated | |||
against routes received over SAFI=1 | against routes received over SAFI=1. | |||
Flow Specification received over SAFI=134 will be validated | * Flow Specification received over SAFI=134 will be validated | |||
against routes received over SAFI=128 | against routes received over SAFI=128. | |||
In the absence of explicit configuration a Flow Specification NLRI | In the absence of explicit configuration, a Flow Specification NLRI | |||
MUST be validated such that it is considered feasible if and only if | MUST be validated such that it is considered feasible if and only if | |||
all of the conditions below are true: | all of the conditions below are true: | |||
a) A destination prefix component is embedded in the Flow | a) A destination prefix component is embedded in the Flow | |||
Specification. | Specification. | |||
b) The originator of the Flow Specification matches the originator | b) The originator of the Flow Specification matches the originator | |||
of the best-match unicast route for the destination prefix | of the best-match unicast route for the destination prefix | |||
embedded in the Flow Specification (this is the unicast route with | embedded in the Flow Specification (this is the unicast route | |||
the longest possible prefix length covering the destination prefix | with the longest possible prefix length covering the destination | |||
embedded in the Flow Specification). | prefix embedded in the Flow Specification). | |||
c) There are no "more-specific" unicast routes, when compared with | c) There are no "more-specific" unicast routes, when compared with | |||
the flow destination prefix, that have been received from a | the flow destination prefix, that have been received from a | |||
different neighboring AS than the best-match unicast route, which | different neighboring AS than the best-match unicast route, which | |||
has been determined in rule b). | has been determined in rule b. | |||
However, rule a) MAY be relaxed by explicit configuration, permitting | However, rule a MAY be relaxed by explicit configuration, permitting | |||
Flow Specifications that include no destination prefix component. If | Flow Specifications that include no destination prefix component. If | |||
such is the case, rules b) and c) are moot and MUST be disregarded. | such is the case, rules b and c are moot and MUST be disregarded. | |||
By "originator" of a BGP route, we mean either the address of the | By "originator" of a BGP route, we mean either the address of the | |||
originator in the ORIGINATOR_ID Attribute [RFC4456], or the source IP | originator in the ORIGINATOR_ID Attribute [RFC4456] or the source IP | |||
address of the BGP peer, if this path attribute is not present. | address of the BGP peer, if this path attribute is not present. | |||
BGP implementations MUST also enforce that the AS_PATH attribute of a | BGP implementations MUST also enforce that the AS_PATH attribute of a | |||
route received via the External Border Gateway Protocol (eBGP) | route received via the External Border Gateway Protocol (eBGP) | |||
contains the neighboring AS in the left-most position of the AS_PATH | contains the neighboring AS in the left-most position of the AS_PATH | |||
attribute. While this rule is optional in the BGP specification, it | attribute. While this rule is optional in the BGP specification, it | |||
becomes necessary to enforce it here for security reasons. | becomes necessary to enforce it here for security reasons. | |||
The best-match unicast route may change over the time independently | The best-match unicast route may change over the time independently | |||
of the Flow Specification NLRI. Therefore, a revalidation of the | of the Flow Specification NLRI. Therefore, a revalidation of the | |||
Flow Specification NLRI MUST be performed whenever unicast routes | Flow Specification NLRI MUST be performed whenever unicast routes | |||
change. Revalidation is defined as retesting rules a) to c) as | change. Revalidation is defined as retesting rules a to c as | |||
described above. | described above. | |||
Explanation: | Explanation: | |||
The underlying concept is that the neighboring AS that advertises the | The underlying concept is that the neighboring AS that advertises the | |||
best unicast route for a destination is allowed to advertise Flow | best unicast route for a destination is allowed to advertise Flow | |||
Specification information that conveys a destination prefix that is | Specification information that conveys a destination prefix that is | |||
more or equally specific. Thus, as long as there are no "more- | more or equally specific. Thus, as long as there are no "more- | |||
specific" unicast routes, received from a different neighboring AS, | specific" unicast routes received from a different neighboring AS, | |||
which would be affected by that Flow Specification, the Flow | which would be affected by that Flow Specification, the Flow | |||
Specification is validated successfully. | Specification is validated successfully. | |||
The neighboring AS is the immediate destination of the traffic | The neighboring AS is the immediate destination of the traffic | |||
described by the Flow Specification. If it requests these flows to | described by the Flow Specification. If it requests these flows to | |||
be dropped, that request can be honored without concern that it | be dropped, that request can be honored without concern that it | |||
represents a denial of service in itself. The reasoning is that this | represents a denial of service in itself. The reasoning is that this | |||
is as if the traffic is being dropped by the downstream autonomous | is as if the traffic is being dropped by the downstream autonomous | |||
system, and there is no added value in carrying the traffic to it. | system, and there is no added value in carrying the traffic to it. | |||
7. Traffic Filtering Actions | 7. Traffic Filtering Actions | |||
This document defines a minimum set of Traffic Filtering Actions that | This document defines a minimum set of Traffic Filtering Actions that | |||
it standardizes as BGP extended communities [RFC4360]. This is not | it standardizes as BGP Extended Communities [RFC4360]. This is not | |||
meant to be an inclusive list of all the possible actions, but only a | meant to be an inclusive list of all the possible actions but only a | |||
subset that can be interpreted consistently across the network. | subset that can be interpreted consistently across the network. | |||
Additional actions can be defined as either requiring standards or as | Additional actions can be defined as either requiring standards or as | |||
vendor specific. | vendor specific. | |||
The default action for a matching Flow Specification is to accept the | The default action for a matching Flow Specification is to accept the | |||
packet (treat the packet according to the normal forwarding behaviour | packet (treat the packet according to the normal forwarding behavior | |||
of the system). | of the system). | |||
This document defines the following extended communities values shown | This document defines the following Extended Communities values shown | |||
in Table 2 in the form 0xttss where tt indicates the type and ss | in Table 8 in the form 0xttss, where tt indicates the type and ss | |||
indicates the sub-type of the extended community. Encodings for | indicates the sub-type of the Extended Community. Encodings for | |||
these extended communities are described below. | these Extended Communities are described below. | |||
+-------------+---------------------------+-------------------------+ | +==================+======================+=======================+ | |||
| community | action | encoding | | | community 0xttss | action | encoding | | |||
| 0xttss | | | | +==================+======================+=======================+ | |||
+-------------+---------------------------+-------------------------+ | | 0x8006 | traffic-rate-bytes | 2-octet AS, 4-octet | | |||
| 0x8006 | traffic-rate-bytes | 2-octet AS, 4-octet | | | | (Section 7.1) | float | | |||
| | (Section 7.1) | float | | +------------------+----------------------+-----------------------+ | |||
| TBD | traffic-rate-packets | 2-octet AS, 4-octet | | | 0x800c | traffic-rate-packets | 2-octet AS, 4-octet | | |||
| | (Section 7.1) | float | | | | (Section 7.2) | float | | |||
| 0x8007 | traffic-action | bitmask | | +------------------+----------------------+-----------------------+ | |||
| | (Section 7.3) | | | | 0x8007 | traffic-action | bitmask | | |||
| 0x8008 | rt-redirect AS-2octet | 2-octet AS, 4-octet | | | | (Section 7.3) | | | |||
| | (Section 7.4) | value | | +------------------+----------------------+-----------------------+ | |||
| 0x8108 | rt-redirect IPv4 | 4-octet IPv4 address, | | | 0x8008 | rt-redirect AS- | 2-octet AS, 4-octet | | |||
| | (Section 7.4) | 2-octet value | | | | 2octet (Section 7.4) | value | | |||
| 0x8208 | rt-redirect AS-4octet | 4-octet AS, 2-octet | | +------------------+----------------------+-----------------------+ | |||
| | (Section 7.4) | value | | | 0x8108 | rt-redirect IPv4 | 4-octet IPv4 address, | | |||
| 0x8009 | traffic-marking | DSCP value | | | | (Section 7.4) | 2-octet value | | |||
| | (Section 7.5) | | | +------------------+----------------------+-----------------------+ | |||
+-------------+---------------------------+-------------------------+ | | 0x8208 | rt-redirect AS- | 4-octet AS, 2-octet | | |||
| | 4octet (Section 7.4) | value | | ||||
+------------------+----------------------+-----------------------+ | ||||
| 0x8009 | traffic-marking | DSCP value | | ||||
| | (Section 7.5) | | | ||||
+------------------+----------------------+-----------------------+ | ||||
Table 2: Traffic Filtering Action Extended Communities | Table 8: Traffic Filtering Action Extended Communities | |||
Multiple Traffic Filtering Actions defined in this document may be | Multiple Traffic Filtering Actions defined in this document may be | |||
present for a single Flow Specification and SHOULD be applied to the | present for a single Flow Specification and SHOULD be applied to the | |||
traffic flow (for example traffic-rate-bytes and rt-redirect can be | traffic flow (for example, traffic-rate-bytes and rt-redirect can be | |||
applied to packets at the same time). If not all of the Traffic | applied to packets at the same time). If not all of the Traffic | |||
Filtering Actions can be applied to a traffic flow they should be | Filtering Actions can be applied to a traffic flow, they should be | |||
treated as interfering Traffic Filtering Actions (see below). | treated as interfering Traffic Filtering Actions (see below). | |||
Some Traffic Filtering Actions may interfere with each other or even | Some Traffic Filtering Actions may interfere with each other or even | |||
contradict. Section 7.7 of this document provides general | contradict. Section 7.7 of this document provides general | |||
considerations on such Traffic Filtering Action interference. Any | considerations on such Traffic Filtering Action interference. Any | |||
additional definition of Traffic Filtering Actions SHOULD specify the | additional definition of Traffic Filtering Actions SHOULD specify the | |||
action to take if those Traffic Filtering Actions interfere (also | action to take if those Traffic Filtering Actions interfere (also | |||
with existing Traffic Filtering Actions). | with existing Traffic Filtering Actions). | |||
All Traffic Filtering Actions are specified as transitive BGP | All Traffic Filtering Actions are specified as transitive BGP | |||
Extended Communities. | Extended Communities. | |||
7.1. Traffic Rate in Bytes (traffic-rate-bytes) sub-type 0x06 | 7.1. Traffic Rate in Bytes (traffic-rate-bytes) Sub-Type 0x06 | |||
The traffic-rate-bytes extended community uses the following extended | The traffic-rate-bytes Extended Community uses the following Extended | |||
community encoding: | Community encoding: | |||
The first two octets carry the 2-octet id, which can be assigned from | The first two octets carry the 2-octet id, which can be assigned from | |||
a 2-octet AS number. When a 4-octet AS number is locally present, | a 2-octet AS number. When a 4-octet AS number is locally present, | |||
the 2 least significant octets of such an AS number can be used. | the 2 least significant octets of such an AS number can be used. | |||
This value is purely informational and SHOULD NOT be interpreted by | This value is purely informational and SHOULD NOT be interpreted by | |||
the implementation. | the implementation. | |||
The remaining 4 octets carry the maximum rate information in IEEE | The remaining 4 octets carry the maximum rate information in IEEE | |||
floating point [IEEE.754.1985] format, units being bytes per second. | floating point [IEEE.754.1985] format, units being bytes per second. | |||
A traffic-rate of 0 should result on all traffic for the particular | A traffic-rate of 0 should result on all traffic for the particular | |||
flow to be discarded. On encoding the traffic-rate MUST NOT be | flow to be discarded. On encoding, the traffic-rate MUST NOT be | |||
negative. On decoding negative values MUST be treated as zero | negative. On decoding, negative values MUST be treated as zero | |||
(discard all traffic). | (discard all traffic). | |||
Interferes with: May interfere with the traffic-rate-packets (see | Interferes with: May interfere with the traffic-rate-packets (see | |||
Section 7.2). A policy may allow both filtering by traffic-rate- | Section 7.2). A policy may allow both filtering by traffic-rate- | |||
packets and traffic-rate-bytes. If the policy does not allow this, | packets and traffic-rate-bytes. If the policy does not allow this, | |||
these two actions will conflict. | these two actions will conflict. | |||
7.2. Traffic Rate in Packets (traffic-rate-packets) sub-type TBD | 7.2. Traffic Rate in Packets (traffic-rate-packets) Sub-Type 0x0c | |||
The traffic-rate-packets extended community uses the same encoding as | The traffic-rate-packets Extended Community uses the same encoding as | |||
the traffic-rate-bytes extended community. The floating point value | the traffic-rate-bytes Extended Community. The floating point value | |||
carries the maximum packet rate in packets per second. A traffic- | carries the maximum packet rate in packets per second. A traffic- | |||
rate-packets of 0 should result in all traffic for the particular | rate-packets of 0 should result in all traffic for the particular | |||
flow to be discarded. On encoding the traffic-rate-packets MUST NOT | flow to be discarded. On encoding, the traffic-rate-packets MUST NOT | |||
be negative. On decoding negative values MUST be treated as zero | be negative. On decoding, negative values MUST be treated as zero | |||
(discard all traffic). | (discard all traffic). | |||
Interferes with: May interfere with the traffic-rate-bytes (see | Interferes with: May interfere with the traffic-rate-bytes (see | |||
Section 7.1). A policy may allow both filtering by traffic-rate- | Section 7.1). A policy may allow both filtering by traffic-rate- | |||
packets and traffic-rate-bytes. If the policy does not allow this, | packets and traffic-rate-bytes. If the policy does not allow this, | |||
these two actions will conflict. | these two actions will conflict. | |||
7.3. Traffic-action (traffic-action) sub-type 0x07 | 7.3. Traffic-Action (traffic-action) Sub-Type 0x07 | |||
The traffic-action extended community consists of 6 octets of which | The traffic-action Extended Community consists of 6 octets of which | |||
only the 2 least significant bits of the 6th octet (from left to | only the 2 least significant bits of the 6th octet (from left to | |||
right) are defined by this document as shown in Figure 5. | right) are defined by this document, as shown in Figure 5. | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Traffic Action Field | | | Traffic Action Field | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Tr. Action Field (cont.) |S|T| | | Tr. Action Field (cont.) |S|T| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 5: Traffic-action Extended Community Encoding | Figure 5: Traffic-Action Extended Community Encoding | |||
where S and T are defined as: | S and T are defined as: | |||
o T: Terminal Action (bit 47): When this bit is set, the traffic | T Terminal Action (bit 47): When this bit is set, the traffic | |||
filtering engine will evaluate any subsequent Flow Specifications | filtering engine will evaluate any subsequent Flow | |||
(as defined by the ordering procedure Section 5.1). If not set, | Specifications (as defined by the ordering procedure | |||
the evaluation of the traffic filters stops when this Flow | Section 5.1). If not set, the evaluation of the traffic | |||
Specification is evaluated. | filters stops when this Flow Specification is evaluated. | |||
o S: Sample (bit 46): Enables traffic sampling and logging for this | S Sample (bit 46): Enables traffic sampling and logging for this | |||
Flow Specification (only effective when set). | Flow Specification (only effective when set). | |||
o Traffic Action Field: Other Traffic Action Field (see Section 11) | Traffic Action Field: Other Traffic Action Field (see Section 11) | |||
bits unused in this specification. These bits MUST be set to 0 on | bits unused in this specification. These bits MUST be set to 0 | |||
encoding, and MUST be ignored during decoding. | on encoding and MUST be ignored during decoding. | |||
The use of the Terminal Action (bit 47) may result in more than one | The use of the Terminal Action (bit 47) may result in more than one | |||
Flow Specification matching a particular traffic flow. All the | Flow Specification matching a particular traffic flow. All the | |||
Traffic Filtering Actions from these Flow Specifications shall be | Traffic Filtering Actions from these Flow Specifications shall be | |||
collected and applied. In case of interfering Traffic Filtering | collected and applied. In case of interfering Traffic Filtering | |||
Actions it is an implementation decision which Traffic Filtering | Actions, it is an implementation decision which Traffic Filtering | |||
Actions are selected. See also Section 7.7. | Actions are selected. See also Section 7.7. | |||
Interferes with: No other BGP Flow Specification Traffic Filtering | Interferes with: No other BGP Flow Specification Traffic Filtering | |||
Action in this document. | Action in this document. | |||
7.4. RT Redirect (rt-redirect) sub-type 0x08 | 7.4. RT Redirect (rt-redirect) Sub-Type 0x08 | |||
The redirect extended community allows the traffic to be redirected | The redirect Extended Community allows the traffic to be redirected | |||
to a VRF routing instance that lists the specified route-target in | to a VRF routing instance that lists the specified route-target in | |||
its import policy. If several local instances match this criteria, | its import policy. If several local instances match this criteria, | |||
the choice between them is a local matter (for example, the instance | the choice between them is a local matter (for example, the instance | |||
with the lowest Route Distinguisher value can be elected). | with the lowest Route Distinguisher value can be elected). | |||
This Extended Community allows 3 different encodings formats for the | This Extended Community allows 3 different encodings formats for the | |||
route-target (type 0x80, 0x81, 0x82). It uses the same encoding as | route-target (type 0x80, 0x81, 0x82). It uses the same encoding as | |||
the Route Target Extended Community in Sections 3.1 (type 0x80: | the Route Target Extended Community in Sections 3.1 (type 0x80: | |||
2-octet AS, 4-octet value), 3.2 (type 0x81: 4-octet IPv4 address, | 2-octet AS, 4-octet value), 3.2 (type 0x81: 4-octet IPv4 address, | |||
2-octet value) and 4 of [RFC4360] and Section 2 (type 0x82: 4-octet | 2-octet value), and 4 of [RFC4360] and Section 2 of [RFC5668] (type | |||
AS, 2-octet value) of [RFC5668] with the high-order octet of the Type | 0x82: 4-octet AS, 2-octet value) with the high-order octet of the | |||
field 0x80, 0x81, 0x82 respectively and the low-order of the Type | Type field 0x80, 0x81, 0x82 respectively and the low-order octet of | |||
field (Sub-Type) always 0x08. | the Type field (Sub-Type) always 0x08. | |||
Interferes with: No other BGP Flow Specification Traffic Filtering | Interferes with: No other BGP Flow Specification Traffic Filtering | |||
Action in this document. | Action in this document. | |||
7.5. Traffic Marking (traffic-marking) sub-type 0x09 | 7.5. Traffic Marking (traffic-marking) Sub-Type 0x09 | |||
The traffic marking extended community instructs a system to modify | The traffic marking Extended Community instructs a system to modify | |||
the DSCP bits in the IP header ([RFC2474] Section 3) of a transiting | the DSCP bits in the IP header (Section 3 of [RFC2474]) of a | |||
IP packet to the corresponding value encoded in the 6 least | transiting IP packet to the corresponding value encoded in the 6 | |||
significant bits of the extended community value as shown in | least significant bits of the Extended Community value, as shown in | |||
Figure 6. | Figure 6. | |||
The extended is encoded as follows: | The extended is encoded as follows: | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| reserved | reserved | reserved | reserved | | | reserved | reserved | reserved | reserved | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| reserved | r.| DSCP | | | reserved | r.| DSCP | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 6: Traffic Marking Extended Community Encoding | Figure 6: Traffic Marking Extended Community Encoding | |||
o DSCP: new DSCP value for the transiting IP packet. | DSCP: new DSCP value for the transiting IP packet | |||
o reserved, r.: MUST be set to 0 on encoding, and MUST be ignored | reserved (r): MUST be set to 0 on encoding and MUST be ignored | |||
during decoding. | during decoding | |||
Interferes with: No other BGP Flow Specification Traffic Filtering | Interferes with: No other BGP Flow Specification Traffic Filtering | |||
Action in this document. | Action in this document. | |||
7.6. Interaction with other Filtering Mechanisms in Routers | 7.6. Interaction with Other Filtering Mechanisms in Routers | |||
Implementations should provide mechanisms that map an arbitrary BGP | Implementations should provide mechanisms that map an arbitrary BGP | |||
community value (normal or extended) to Traffic Filtering Actions | community value (normal or extended) to Traffic Filtering Actions | |||
that require different mappings on different systems in the network. | that require different mappings on different systems in the network. | |||
For instance, providing packets with a worse-than-best-effort per-hop | For instance, providing packets with a worse-than-best-effort per-hop | |||
behavior is a functionality that is likely to be implemented | behavior is a functionality that is likely to be implemented | |||
differently in different systems and for which no standard behavior | differently in different systems and for which no standard behavior | |||
is currently known. Rather than attempting to define it here, this | is currently known. Rather than attempting to define it here, this | |||
can be accomplished by mapping a user-defined community value to | can be accomplished by mapping a user-defined community value to | |||
platform-/network-specific behavior via user configuration. | platform-/network-specific behavior via user configuration. | |||
7.7. Considerations on Traffic Filtering Action Interference | 7.7. Considerations on Traffic Filtering Action Interference | |||
Since Traffic Filtering Actions are represented as BGP extended | Since Traffic Filtering Actions are represented as BGP extended | |||
community values, Traffic Filtering Actions may interfere with each | community values, Traffic Filtering Actions may interfere with each | |||
other (e.g. there may be more than one conflicting traffic-rate-bytes | other (e.g., there may be more than one conflicting traffic-rate- | |||
Traffic Filtering Action associated with a single Flow | bytes Traffic Filtering Action associated with a single Flow | |||
Specification). Traffic Filtering Action interference has no impact | Specification). Traffic Filtering Action interference has no impact | |||
on BGP propagation of Flow Specifications (all communities are | on BGP propagation of Flow Specifications (all communities are | |||
propagated according to policies). | propagated according to policies). | |||
If a Flow Specification associated with interfering Traffic Filtering | If a Flow Specification associated with interfering Traffic Filtering | |||
Actions is selected for packet forwarding, it is an implementation | Actions is selected for packet forwarding, it is an implementation | |||
decision which of the interfering Traffic Filtering Actions are | decision which of the interfering Traffic Filtering Actions are | |||
selected. Implementors of this specification SHOULD document the | selected. Implementors of this specification SHOULD document the | |||
behaviour of their implementation in such cases. | behavior of their implementation in such cases. | |||
Operators are encouraged to make use of the BGP policy framework | Operators are encouraged to make use of the BGP policy framework | |||
supported by their implementation in order to achieve a predictable | supported by their implementation in order to achieve a predictable | |||
behaviour. See also Section 12. | behavior. See also Section 12. | |||
8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks | 8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks | |||
Provider-based Layer 3 VPN networks, such as the ones using a BGP/ | Provider-based Layer 3 VPN networks, such as the ones using a BGP/ | |||
MPLS IP VPN [RFC4364] control plane, may have different traffic | MPLS IP VPN [RFC4364] control plane, may have different traffic | |||
filtering requirements than Internet service providers. But also | filtering requirements than Internet service providers. But also | |||
Internet service providers may use those VPNs for scenarios like | Internet service providers may use those VPNs for scenarios like | |||
having the Internet routing table in a VRF, resulting in the same | having the Internet routing table in a VRF, resulting in the same | |||
traffic filtering requirements as defined for the global routing | traffic filtering requirements as defined for the global routing | |||
table environment within this document. This document defines an | table environment within this document. This document defines an | |||
skipping to change at page 24, line 52 ¶ | skipping to change at line 1198 ¶ | |||
shown in Figure 7. | shown in Figure 7. | |||
+--------------------------------+ | +--------------------------------+ | |||
| length (0xnn or 0xfn nn) | | | length (0xnn or 0xfn nn) | | |||
+--------------------------------+ | +--------------------------------+ | |||
| Route Distinguisher (8 octets) | | | Route Distinguisher (8 octets) | | |||
+--------------------------------+ | +--------------------------------+ | |||
| NLRI value (variable) | | | NLRI value (variable) | | |||
+--------------------------------+ | +--------------------------------+ | |||
Figure 7: Flow Specification NLRI for MPLS | Figure 7: Flow Specification NLRI for MPLS | |||
Propagation of this NLRI is controlled by matching Route Target | Propagation of this NLRI is controlled by matching Route Target | |||
extended communities associated with the BGP path advertisement with | extended communities associated with the BGP path advertisement with | |||
the VRF import policy, using the same mechanism as described in BGP/ | the VRF import policy, using the same mechanism as described in BGP/ | |||
MPLS IP VPNs [RFC4364]. | MPLS IP VPNs [RFC4364]. | |||
Flow Specifications received via this NLRI apply only to traffic that | Flow Specifications received via this NLRI apply only to traffic that | |||
belongs to the VRF(s) in which it is imported. By default, traffic | belongs to the VRF(s) in which it is imported. By default, traffic | |||
received from a remote PE is switched via an MPLS forwarding decision | received from a remote PE is switched via an MPLS forwarding decision | |||
and is not subject to filtering. | and is not subject to filtering. | |||
skipping to change at page 25, line 28 ¶ | skipping to change at line 1223 ¶ | |||
The validation procedure (Section 6) and Traffic Filtering Actions | The validation procedure (Section 6) and Traffic Filtering Actions | |||
(Section 7) are the same as for IPv4. | (Section 7) are the same as for IPv4. | |||
9. Traffic Monitoring | 9. Traffic Monitoring | |||
Traffic filtering applications require monitoring and traffic | Traffic filtering applications require monitoring and traffic | |||
statistics facilities. While this is an implementation specific | statistics facilities. While this is an implementation specific | |||
choice, implementations SHOULD provide: | choice, implementations SHOULD provide: | |||
o A mechanism to log the packet header of filtered traffic. | * A mechanism to log the packet header of filtered traffic. | |||
o A mechanism to count the number of matches for a given Flow | * A mechanism to count the number of matches for a given Flow | |||
Specification. | Specification rule. | |||
10. Error Handling | 10. Error Handling | |||
Error handling according to [RFC7606] and [RFC4760] applies to this | Error handling according to [RFC7606] and [RFC4760] applies to this | |||
specification. | specification. | |||
This document introduces Traffic Filtering Action Extended | This document introduces Traffic Filtering Action Extended | |||
Communities. Malformed Traffic Filtering Action Extended Communities | Communities. Malformed Traffic Filtering Action Extended Communities | |||
in the sense of [RFC7606] Section 7.14. are Extended Community values | in the sense of Section 7.14 of [RFC7606] are Extended Community | |||
that cannot be decoded according to Section 7 of this document. | values that cannot be decoded according to Section 7 of this | |||
document. | ||||
11. IANA Considerations | 11. IANA Considerations | |||
This section complies with [RFC7153]. | This section complies with [RFC7153]. | |||
11.1. AFI/SAFI Definitions | 11.1. AFI/SAFI Definitions | |||
IANA maintains a registry entitled "SAFI Values". For the purpose of | IANA maintains a registry entitled "SAFI Values". For the purpose of | |||
this work, IANA is requested to update the following SAFIs to read | this work, IANA has updated the following SAFIs as shown in the table | |||
according to the table below (Note: This document obsoletes both | below. (Note: This document obsoletes both [RFC7674] and [RFC5575], | |||
RFC7674 and RFC5575 and all references to those documents should be | and all references to those documents have been deleted from the | |||
deleted from the registry below): | registry.) | |||
+-------+------------------------------------------+----------------+ | +=======+===========================================+===========+ | |||
| Value | Name | Reference | | | Value | Name | Reference | | |||
+-------+------------------------------------------+----------------+ | +=======+===========================================+===========+ | |||
| 133 | Dissemination of Flow Specification | [this | | | 133 | Dissemination of Flow Specification rules | RFC 8955 | | |||
| | rules | document] | | +-------+-------------------------------------------+-----------+ | |||
| 134 | L3VPN Dissemination of Flow | [this | | | 134 | L3VPN Dissemination of Flow Specification | RFC 8955 | | |||
| | Specification rules | document] | | | | rules | | | |||
+-------+------------------------------------------+----------------+ | +-------+-------------------------------------------+-----------+ | |||
Table 3: Registry: SAFI Values | Table 9: Registry: SAFI Values | |||
The above textual changes generalise the definition of the SAFIs | The above textual changes generalize the definition of the SAFIs | |||
rather than change its underlying meaning. Therefore, based on | rather than change its underlying meaning. Therefore, based on "The | |||
"The YANG 1.1 Data Modeling Language" [RFC7950], the above text | YANG 1.1 Data Modeling Language" [RFC7950], the above text means that | |||
implies that the following YANG enums from | the following YANG enums from "Common YANG Data Types for the Routing | |||
"Common YANG Data Types for the Routing Area" [RFC8294] need to have | Area" [RFC8294] have had their names and descriptions at | |||
their names and descriptions at https://www.iana.org/assignments/ | <https://www.iana.org/assignments/iana-routing-types> changed to: | |||
iana-routing-types [2] changed to: | ||||
<CODE BEGINS> | <CODE BEGINS> | |||
enum flow-spec-safi { | enum flow-spec-safi { | |||
value 133; | value 133; | |||
description | description | |||
"Dissemination of Flow Specification rules SAFI."; | "Dissemination of Flow Specification rules SAFI."; | |||
} | } | |||
enum l3vpn-flow-spec-safi { | enum l3vpn-flow-spec-safi { | |||
value 134; | value 134; | |||
description | description | |||
"L3VPN Dissemination of Flow Specification rules SAFI."; | "L3VPN Dissemination of Flow Specification rules SAFI."; | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
A new revision statement should be added to the module as follows: | A new revision statement has been added to the module as follows: | |||
<CODE BEGINS> | <CODE BEGINS> | |||
revision [revision date] { | revision [revision date] { | |||
description "Non-backwards-compatible change of SAFI names | description "Non-backwards-compatible change of SAFI names | |||
(SAFI values 133, 134)."; | (SAFI values 133, 134)."; | |||
reference | reference | |||
"[this document]: Dissemination of Flow Specification Rules."; | "RFC 8955: Dissemination of Flow Specification Rules."; | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
11.2. Flow Component Definitions | 11.2. Flow Component Definitions | |||
A Flow Specification consists of a sequence of flow components, which | A Flow Specification consists of a sequence of flow components, which | |||
are identified by an 8-bit component type. IANA has created and | are identified by an 8-bit component type. IANA has created and | |||
maintains a registry entitled "Flow Spec Component Types". IANA is | maintains a registry entitled "Flow Spec Component Types". IANA has | |||
requested to update the reference for this registry to [this | updated the reference for this registry to RFC 8955. Furthermore, | |||
document]. Furthermore the references to the values should be | the references to the values have been updated according to the table | |||
updated according to the table below (Note: This document obsoletes | below (Note: This document obsoletes both [RFC7674] and [RFC5575], | |||
both RFC7674 and RFC5575 and all references to those documents should | and all references to those documents have been deleted from the | |||
be deleted from the registry below). | registry.) | |||
+-------+--------------------+-----------------+ | +=======+====================+===========+ | |||
| Value | Name | Reference | | | Value | Name | Reference | | |||
+-------+--------------------+-----------------+ | +=======+====================+===========+ | |||
| 1 | Destination Prefix | [this document] | | | 1 | Destination Prefix | RFC 8955 | | |||
| 2 | Source Prefix | [this document] | | +-------+--------------------+-----------+ | |||
| 3 | IP Protocol | [this document] | | | 2 | Source Prefix | RFC 8955 | | |||
| 4 | Port | [this document] | | +-------+--------------------+-----------+ | |||
| 5 | Destination port | [this document] | | | 3 | IP Protocol | RFC 8955 | | |||
| 6 | Source port | [this document] | | +-------+--------------------+-----------+ | |||
| 7 | ICMP type | [this document] | | | 4 | Port | RFC 8955 | | |||
| 8 | ICMP code | [this document] | | +-------+--------------------+-----------+ | |||
| 9 | TCP flags | [this document] | | | 5 | Destination port | RFC 8955 | | |||
| 10 | Packet length | [this document] | | +-------+--------------------+-----------+ | |||
| 11 | DSCP | [this document] | | | 6 | Source port | RFC 8955 | | |||
| 12 | Fragment | [this document] | | +-------+--------------------+-----------+ | |||
+-------+--------------------+-----------------+ | | 7 | ICMP type | RFC 8955 | | |||
+-------+--------------------+-----------+ | ||||
| 8 | ICMP code | RFC 8955 | | ||||
+-------+--------------------+-----------+ | ||||
| 9 | TCP flags | RFC 8955 | | ||||
+-------+--------------------+-----------+ | ||||
| 10 | Packet length | RFC 8955 | | ||||
+-------+--------------------+-----------+ | ||||
| 11 | DSCP | RFC 8955 | | ||||
+-------+--------------------+-----------+ | ||||
| 12 | Fragment | RFC 8955 | | ||||
+-------+--------------------+-----------+ | ||||
Table 4: Registry: Flow Spec Component Types | Table 10: Registry: Flow Spec | |||
Component Types | ||||
In order to manage the limited number space and accommodate several | In order to manage the limited number space and accommodate several | |||
usages, the following policies defined by [RFC8126] are used: | usages, the following policies defined by [RFC8126] are used: | |||
+--------------+------------------------+ | +==============+========================+ | |||
| Type Values | Policy | | | Type Values | Policy | | |||
+--------------+------------------------+ | +==============+========================+ | |||
| 0 | Reserved | | | 0 | Reserved | | |||
+--------------+------------------------+ | ||||
| [1 .. 127] | Specification Required | | | [1 .. 127] | Specification Required | | |||
+--------------+------------------------+ | ||||
| [128 .. 254] | Expert Review | | | [128 .. 254] | Expert Review | | |||
+--------------+------------------------+ | ||||
| 255 | Reserved | | | 255 | Reserved | | |||
+--------------+------------------------+ | +--------------+------------------------+ | |||
Table 5: Flow Spec Component Types Policies | Table 11: Flow Spec Component Types | |||
Policies | ||||
Guidance for Experts: | Guidance for Experts: | |||
128-254 requires Expert Review as the registration policy. The | The registration policy for the range 128-254 is Expert Review. | |||
Experts are expected to check the clarity of purpose and use of | The experts are expected to check the clarity of purpose and use | |||
the requested code points. The Experts must also verify that | of the requested code points. The experts must also verify that | |||
any specification produced in the IETF that requests one of | any specification produced in the IETF that requests one of these | |||
these code points has been made available for review by the IDR | code points has been made available for review by the IDR Working | |||
working group and that any specification produced outside the | Group and that any specification produced outside the IETF does | |||
IETF does not conflict with work that is active or already | not conflict with work that is active or already published within | |||
published within the IETF. It must be pointed out that | the IETF. It must be pointed out that introducing new component | |||
introducing new component types may break interoperability with | types may break interoperability with existing implementations of | |||
existing implementations of this protocol. | this protocol. | |||
11.3. Extended Community Flow Specification Actions | 11.3. Extended Community Flow Specification Actions | |||
The Extended Community Flow Specification Action types defined in | The Extended Community Flow Specification Action types defined in | |||
this document consist of two parts: | this document consist of two parts: | |||
Type (BGP Transitive Extended Community Type) | * Type (BGP Transitive Extended Community Type) | |||
Sub-Type | * Sub-Type | |||
For the type-part, IANA maintains a registry entitled "BGP Transitive | For the type part, IANA maintains a registry entitled "BGP Transitive | |||
Extended Community Types". For the purpose of this work (Section 7), | Extended Community Types". For the purpose of this work (Section 7), | |||
IANA is requested to update the references to the following entries | IANA has updated the references as shown in the table below. (Note: | |||
according to the table below (Note: This document obsoletes both | This document obsoletes both [RFC7674] and [RFC5575], and all | |||
RFC7674 and RFC5575 and all references to those documents should be | references to those documents have been deleted in the registry.) | |||
deleted in the registry below): | ||||
+-------+-----------------------------------------------+-----------+ | +=======+=======================================+===========+ | |||
| Type | Name | Reference | | | Type | Name | Reference | | |||
| Value | | | | | Value | | | | |||
+-------+-----------------------------------------------+-----------+ | +=======+=======================================+===========+ | |||
| 0x81 | Generic Transitive Experimental | [this | | | 0x81 | Generic Transitive Experimental Use | RFC 8955 | | |||
| | Use Extended Community Part 2 (Sub-Types are | document] | | | | Extended Community Part 2 (Sub-Types | | | |||
| | defined in the "Generic Transitive | | | | | are defined in the "Generic | | | |||
| | Experimental Use Extended Community Part 2 | | | | | Transitive Experimental Use Extended | | | |||
| | Sub-Types" Registry) | | | | | Community Part 2 Sub-Types" Registry) | | | |||
| 0x82 | Generic Transitive Experimental | [this | | +-------+---------------------------------------+-----------+ | |||
| | Use Extended Community Part 3 | document] | | | 0x82 | Generic Transitive Experimental Use | RFC 8955 | | |||
| | (Sub-Types are defined in the "Generic | | | | | Extended Community Part 3 (Sub-Types | | | |||
| | Transitive Experimental Use | | | | | are defined in the "Generic | | | |||
| | Extended Community Part 3 Sub-Types" | | | | | Transitive Experimental Use Extended | | | |||
| | Registry) | | | | | Community Part 3 Sub-Types" Registry) | | | |||
+-------+-----------------------------------------------+-----------+ | +-------+---------------------------------------+-----------+ | |||
Table 6: Registry: BGP Transitive Extended Community Types | Table 12: Registry: BGP Transitive Extended Community Types | |||
For the sub-type part of the extended community Traffic Filtering | For the sub-type part of the Extended Community Traffic Filtering | |||
Actions IANA maintains the following registries. IANA is requested | Actions, IANA maintains the following registries. IANA has updated | |||
to update all names and references according to the tables below and | all names and references according to the tables below and assign a | |||
assign a new value for the "Flow spec traffic-rate-packets" Sub-Type | new value for the "Flow spec traffic-rate-packets" Sub-Type. (Note: | |||
(Note: This document obsoletes both RFC7674 and RFC5575 and all | This document obsoletes both [RFC7674] and [RFC5575], and all | |||
references to those documents should be deleted from the registries | references to those documents have been deleted from the registries | |||
below). | below.) | |||
+----------+--------------------------------------------+-----------+ | +==========+=====================================+===========+ | |||
| Sub-Type | Name | Reference | | | Sub-Type | Name | Reference | | |||
| Value | | | | | Value | | | | |||
+----------+--------------------------------------------+-----------+ | +==========+=====================================+===========+ | |||
| 0x06 | Flow spec traffic-rate-bytes | [this | | | 0x06 | Flow spec traffic-rate-bytes | RFC 8955 | | |||
| | | document] | | +----------+-------------------------------------+-----------+ | |||
| TBD | Flow spec traffic-rate-packets | [this | | | 0x0c | Flow spec traffic-rate-packets | RFC 8955 | | |||
| | | document] | | +----------+-------------------------------------+-----------+ | |||
| 0x07 | Flow spec traffic-action (Use | [this | | | 0x07 | Flow spec traffic-action (Use of | RFC 8955 | | |||
| | of the "Value" field is defined in the | document] | | | | the "Value" field is defined in the | | | |||
| | "Traffic Action Fields" registry) | | | | | "Traffic Action Fields" registry) | | | |||
| 0x08 | Flow spec rt-redirect | [this | | +----------+-------------------------------------+-----------+ | |||
| | AS-2octet format | document] | | | 0x08 | Flow spec rt-redirect AS-2octet | RFC 8955 | | |||
| 0x09 | Flow spec traffic-remarking | [this | | | | format | | | |||
| | | document] | | +----------+-------------------------------------+-----------+ | |||
+----------+--------------------------------------------+-----------+ | | 0x09 | Flow spec traffic-remarking | RFC 8955 | | |||
+----------+-------------------------------------+-----------+ | ||||
Table 7: Registry: Generic Transitive Experimental Use Extended | Table 13: Registry: Generic Transitive Experimental Use | |||
Community Sub-Types | Extended Community Sub- Types | |||
+------------+----------------------------------------+-------------+ | +================+===================================+===========+ | |||
| Sub-Type | Name | Reference | | | Sub-Type Value | Name | Reference | | |||
| Value | | | | +================+===================================+===========+ | |||
+------------+----------------------------------------+-------------+ | | 0x08 | Flow spec rt-redirect IPv4 format | RFC 8955 | | |||
| 0x08 | Flow spec rt-redirect IPv4 | [this | | +----------------+-----------------------------------+-----------+ | |||
| | format | document] | | ||||
+------------+----------------------------------------+-------------+ | ||||
Table 8: Registry: Generic Transitive Experimental Use Extended | Table 14: Registry: Generic Transitive Experimental Use | |||
Community Part 2 Sub-Types | Extended Community Part 2 Sub-Types | |||
+------------+-----------------------------------------+------------+ | +================+=======================+===========+ | |||
| Sub-Type | Name | Reference | | | Sub-Type Value | Name | Reference | | |||
| Value | | | | +================+=======================+===========+ | |||
+------------+-----------------------------------------+------------+ | | 0x08 | Flow spec rt-redirect | RFC 8955 | | |||
| 0x08 | Flow spec rt-redirect | [this | | | | AS-4octet format | | | |||
| | AS-4octet format | document] | | +----------------+-----------------------+-----------+ | |||
+------------+-----------------------------------------+------------+ | ||||
Table 9: Registry: Generic Transitive Experimental Use Extended | Table 15: Registry: Generic Transitive | |||
Community Part 3 Sub-Types | Experimental Use Extended Community Part 3 Sub- | |||
Types | ||||
Furthermore IANA is requested to update the reference for the | Furthermore, IANA has updated the reference for the registries | |||
registries "Generic Transitive Experimental Use Extended Community | "Generic Transitive Experimental Use Extended Community Part 2 Sub- | |||
Part 2 Sub-Types" and "Generic Transitive Experimental Use Extended | Types" and "Generic Transitive Experimental Use Extended Community | |||
Community Part 3 Sub-Types" to [this document]. | Part 3 Sub-Types" to RFC 8955. | |||
The "traffic-action" extended community (Section 7.3) defined in this | The "traffic-action" Extended Community (Section 7.3) defined in this | |||
document has 46 unused bits, which can be used to convey additional | document has 46 unused bits, which can be used to convey additional | |||
meaning. IANA created and maintains a registry entitled: "Traffic | meaning. IANA created and maintains a registry entitled "Traffic | |||
Action Fields". IANA is requested to update the reference for this | Action Fields". IANA has updated the reference for this registry to | |||
registry to [this document]. Furthermore IANA is requested to update | RFC 8955. Furthermore, IANA has updated the references according to | |||
the references according to the table below. These values should be | the table below. These values should be assigned via IETF Review | |||
assigned via IETF Review rules only (Note: This document obsoletes | rules only. (Note: This document obsoletes both [RFC7674] and | |||
both RFC7674 and RFC5575 and all references to those documents should | [RFC5575], and all references to those documents have been deleted | |||
be deleted from the registry below). | from the registry.) | |||
+-----+-----------------+-----------------+ | +=====+=================+===========+ | |||
| Bit | Name | Reference | | | Bit | Name | Reference | | |||
+-----+-----------------+-----------------+ | +=====+=================+===========+ | |||
| 47 | Terminal Action | [this document] | | | 47 | Terminal Action | RFC 8955 | | |||
| 46 | Sample | [this document] | | +-----+-----------------+-----------+ | |||
+-----+-----------------+-----------------+ | | 46 | Sample | RFC 8955 | | |||
+-----+-----------------+-----------+ | ||||
Table 10: Registry: Traffic Action Fields | Table 16: Registry: Traffic | |||
Action Fields | ||||
12. Security Considerations | 12. Security Considerations | |||
As long as Flow Specifications are restricted to match the | As long as Flow Specifications are restricted to match the | |||
corresponding unicast routing paths for the relevant prefixes | corresponding unicast routing paths for the relevant prefixes | |||
(Section 6), the security characteristics of this proposal are | (Section 6), the security characteristics of this proposal are | |||
equivalent to the existing security properties of BGP unicast | equivalent to the existing security properties of BGP unicast | |||
routing. Any relaxation of the validation procedure described in | routing. Any relaxation of the validation procedure described in | |||
Section 6 may allow unwanted Flow Specifications to be propagated and | Section 6 may allow unwanted Flow Specifications to be propagated, | |||
thus unwanted Traffic Filtering Actions may be applied to flows. | and thus unwanted Traffic Filtering Actions may be applied to flows. | |||
Systems may not be able to locate all header values required to | ||||
identify a packet. This can be especially problematic in the case of | ||||
fragmented packets that are not the first fragment and thus lack | ||||
upper-layer protocol headers or Encapsulating Security Payload (ESP) | ||||
NULL [RFC4303] encryption. | ||||
Where the above mechanisms are not in place, this could open the door | Where the above mechanisms are not in place, this could open the door | |||
to further denial-of-service attacks such as unwanted traffic | to further denial-of-service attacks, such as unwanted traffic | |||
filtering, remarking or redirection. | filtering, remarking, or redirection. | |||
Deployment of specific relaxations of the validation within an | Deployment of specific relaxations of the validation within an | |||
administrative boundary of a network are useful in some networks for | administrative boundary of a network are useful in some networks for | |||
quickly distributing filters to prevent denial-of-service attacks. | quickly distributing filters to prevent denial-of-service attacks. | |||
For a network to utilize this relaxation, the BGP policies must | For a network to utilize this relaxation, the BGP policies must | |||
support additional filtering since the origin AS field is empty. | support additional filtering since the origin AS field is empty. | |||
Specifications relaxing the validation restrictions MUST contain | Specifications relaxing the validation restrictions MUST contain | |||
security considerations that provide details on the required | security considerations that provide details on the required | |||
additional filtering. For example, the use of Origin validation can | additional filtering. For example, the use of origin validation can | |||
provide enhanced filtering within an AS confederation. | provide enhanced filtering within an AS confederation. | |||
Inter-provider routing is based on a web of trust. Neighboring | Inter-provider routing is based on a web of trust. Neighboring | |||
autonomous systems are trusted to advertise valid reachability | autonomous systems are trusted to advertise valid reachability | |||
information. If this trust model is violated, a neighboring | information. If this trust model is violated, a neighboring | |||
autonomous system may cause a denial-of-service attack by advertising | autonomous system may cause a denial-of-service attack by advertising | |||
reachability information for a given prefix for which it does not | reachability information for a given prefix for which it does not | |||
provide service (unfiltered address space hijack). Since validation | provide service (unfiltered address space hijack). Since validation | |||
of the Flow Specification is tied to the announcement of the best | of the Flow Specification is tied to the announcement of the best | |||
unicast route, the failure in the validation of best path route may | unicast route, the failure in the validation of best path route may | |||
prevent the Flow Specificaiton from being used by a local router. | prevent the Flow Specification from being used by a local router. | |||
Possible mitigations are [RFC6811] and [RFC8205]. | Possible mitigations are [RFC6811] and [RFC8205]. | |||
On IXPs routes are often exchanged via route servers which do not | On Internet Exchange Points (IXPs), routes are often exchanged via | |||
extend the AS_PATH. In such cases it is not possible to enforce the | route servers that do not extend the AS_PATH. In such cases, it is | |||
left-most AS in the AS_PATH to be the neighbor AS (the AS of the | not possible to enforce the left-most AS in the AS_PATH to be the | |||
route server). Since the validation of Flow Specification | neighbor AS (the AS of the route server). Since the validation of | |||
(Section 6) depends on this, additional care must be taken. It is | Flow Specification (Section 6) depends on this, additional care must | |||
advised to use a strict inbound route policy in such scenarios. | be taken. It is advised to use a strict inbound route policy in such | |||
scenarios. | ||||
Enabling firewall-like capabilities in routers without centralized | Enabling firewall-like capabilities in routers without centralized | |||
management could make certain failures harder to diagnose. For | management could make certain failures harder to diagnose. For | |||
example, it is possible to allow TCP packets to pass between a pair | example, it is possible to allow TCP packets to pass between a pair | |||
of addresses but not ICMP packets. It is also possible to permit | of addresses but not ICMP packets. It is also possible to permit | |||
packets smaller than 900 or greater than 1000 octets to pass between | packets smaller than 900 or greater than 1000 octets to pass between | |||
a pair of addresses, but not packets whose length is in the range | a pair of addresses but not packets whose length is in the range | |||
900- 1000. Such behavior may be confusing and these capabilities | 900-1000. Such behavior may be confusing, and these capabilities | |||
should be used with care whether manually configured or coordinated | should be used with care whether manually configured or coordinated | |||
through the protocol extensions described in this document. | through the protocol extensions described in this document. | |||
Flow Specification BGP speakers (e.g. automated DDoS controllers) not | Flow Specification BGP speakers (e.g., automated DDoS controllers) | |||
properly programmed, algorithms that are not performing as expected, | not properly programmed, algorithms that are not performing as | |||
or simply rogue systems may announce unintended Flow Specifications, | expected, or simply rogue systems may announce unintended Flow | |||
send updates at a high rate or generate a high number of Flow | Specifications, send updates at a high rate, or generate a high | |||
Specifications. This may stress the receiving systems, exceed their | number of Flow Specifications. This may stress the receiving | |||
capacity, or lead to unwanted Traffic Filtering Actions being applied | systems, exceed their capacity, or lead to unwanted Traffic Filtering | |||
to flows. | Actions being applied to flows. | |||
While the general verification of the Flow Specification NLRI is | While the general verification of the Flow Specification NLRI is | |||
specified in this document (Section 6) the Traffic Filtering Actions | specified in this document (Section 6), the Traffic Filtering Actions | |||
received by a third party may need custom verification or filtering. | received by a third party may need custom verification or filtering. | |||
In particular all non traffic-rate actions may allow a third party to | In particular, all non-traffic-rate actions may allow a third party | |||
modify packet forwarding properties and potentially gain access to | to modify packet forwarding properties and potentially gain access to | |||
other routing-tables/VPNs or undesired queues. This can be avoided | other routing-tables/VPNs or undesired queues. This can be avoided | |||
by proper filtering/screening of the Traffic Filtering Action | by proper filtering/screening of the Traffic Filtering Action | |||
communities at network borders and only exposing a predefined subset | communities at network borders and only exposing a predefined subset | |||
of Traffic Filtering Actions (see Section 7) to third parties. One | of Traffic Filtering Actions (see Section 7) to third parties. One | |||
way to achieve this is by mapping user-defined communities, that can | way to achieve this is by mapping user-defined communities, which can | |||
be set by the third party, to Traffic Filtering Actions and not | be set by the third party, to Traffic Filtering Actions and not | |||
accepting Traffic Filtering Action extended communities from third | accepting Traffic Filtering Action extended communities from third | |||
parties. | parties. | |||
This extension adds additional information to Internet routers. | This extension adds additional information to Internet routers. | |||
These are limited in terms of the maximum number of data elements | These are limited in terms of the maximum number of data elements | |||
they can hold as well as the number of events they are able to | they can hold as well as the number of events they are able to | |||
process in a given unit of time. Service providers need to consider | process in a given unit of time. Service providers need to consider | |||
the maximum capacity of their devices and may need to limit the | the maximum capacity of their devices and may need to limit the | |||
number of Flow Specifications accepted and processed. | number of Flow Specifications accepted and processed. | |||
13. Contributors | 13. References | |||
Barry Greene, Pedro Marques, Jared Mauch and Nischal Sheth were | ||||
authors on [RFC5575], and therefore are contributing authors on this | ||||
document. | ||||
14. Acknowledgements | ||||
The authors would like to thank Yakov Rekhter, Dennis Ferguson, Chris | ||||
Morrow, Charlie Kaufman, and David Smith for their comments for the | ||||
comments on the original [RFC5575]. Chaitanya Kodeboyina helped | ||||
design the flow validation procedure; and Steven Lin and Jim Washburn | ||||
ironed out all the details necessary to produce a working | ||||
implementation in the original [RFC5575]. | ||||
A packet rate Traffic Filtering Action was also described in a Flow | ||||
Specification extension draft and the authors like to thank Wesley | ||||
Eddy, Justin Dailey and Gilbert Clark for their work. | ||||
Additionally, the authors would like to thank Alexander Mayrhofer, | ||||
Nicolas Fevrier, Job Snijders, Jeffrey Haas and Adam Chappell for | ||||
their comments and review. | ||||
15. References | ||||
15.1. Normative References | 13.1. Normative References | |||
[IEEE.754.1985] | [IEEE.754.1985] | |||
IEEE, "Standard for Binary Floating-Point Arithmetic", | IEEE, "Standard for Binary Floating-Point Arithmetic", | |||
IEEE 754-1985, August 1985. | IEEE 754-1985, DOI 10.1109/IEEESTD.2019.8766229, August | |||
1985, <https://doi.org/10.1109/IEEESTD.2019.8766229>. | ||||
[ISO_IEC_9899] | [ISO_IEC_9899] | |||
ISO, "Information technology -- Programming languages -- | ISO, "Information technology -- Programming languages -- | |||
C", ISO/IEC 9899:2018, June 2018. | C", ISO/IEC 9899:2018, June 2018. | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/info/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
skipping to change at page 34, line 28 ¶ | skipping to change at line 1648 ¶ | |||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
15.2. Informative References | 13.2. Informative References | |||
[I-D.ietf-idr-flow-spec-v6] | [IDR-FLOW-SPEC] | |||
Loibl, C., Raszuk, R., and S. Hares, "Dissemination of | Loibl, C., Raszuk, R., and S. Hares, "Dissemination of | |||
Flow Specification Rules for IPv6", draft-ietf-idr-flow- | Flow Specification Rules for IPv6", Work in Progress, | |||
spec-v6-15 (work in progress), September 2020. | Internet-Draft, draft-ietf-idr-flow-spec-v6-11, 20 April | |||
2020, <https://tools.ietf.org/html/draft-ietf-idr-flow- | ||||
spec-v6-11>. | ||||
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | |||
RFC 4303, DOI 10.17487/RFC4303, December 2005, | RFC 4303, DOI 10.17487/RFC4303, December 2005, | |||
<https://www.rfc-editor.org/info/rfc4303>. | <https://www.rfc-editor.org/info/rfc4303>. | |||
[RFC5575] Marques, P., Sheth, N., Raszuk, R., Greene, B., Mauch, J., | [RFC5575] Marques, P., Sheth, N., Raszuk, R., Greene, B., Mauch, J., | |||
and D. McPherson, "Dissemination of Flow Specification | and D. McPherson, "Dissemination of Flow Specification | |||
Rules", RFC 5575, DOI 10.17487/RFC5575, August 2009, | Rules", RFC 5575, DOI 10.17487/RFC5575, August 2009, | |||
<https://www.rfc-editor.org/info/rfc5575>. | <https://www.rfc-editor.org/info/rfc5575>. | |||
skipping to change at page 35, line 18 ¶ | skipping to change at line 1688 ¶ | |||
[RFC8205] Lepinski, M., Ed. and K. Sriram, Ed., "BGPsec Protocol | [RFC8205] Lepinski, M., Ed. and K. Sriram, Ed., "BGPsec Protocol | |||
Specification", RFC 8205, DOI 10.17487/RFC8205, September | Specification", RFC 8205, DOI 10.17487/RFC8205, September | |||
2017, <https://www.rfc-editor.org/info/rfc8205>. | 2017, <https://www.rfc-editor.org/info/rfc8205>. | |||
[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, | [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, | |||
"Common YANG Data Types for the Routing Area", RFC 8294, | "Common YANG Data Types for the Routing Area", RFC 8294, | |||
DOI 10.17487/RFC8294, December 2017, | DOI 10.17487/RFC8294, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8294>. | <https://www.rfc-editor.org/info/rfc8294>. | |||
15.3. URIs | ||||
[1] https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp | ||||
[2] https://www.iana.org/assignments/iana-routing-types | ||||
Appendix A. Example Python code: flow_rule_cmp | Appendix A. Example Python code: flow_rule_cmp | |||
<CODE BEGINS> | <CODE BEGINS> | |||
""" | """ | |||
Copyright (c) 2020 IETF Trust and the persons identified as authors | Copyright (c) 2020 IETF Trust and the persons identified as | |||
of draft-ietf-idr-rfc5575bis. All rights reserved. | authors 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 | |||
(http://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 | |||
IP_DESTINATION = 1 | IP_DESTINATION = 1 | |||
IP_SOURCE = 2 | IP_SOURCE = 2 | |||
FS_component = collections.namedtuple('FS_component', | FS_component = collections.namedtuple('FS_component', | |||
'component_type op_value') | 'component_type op_value') | |||
class FS_nlri(object): | class FS_nlri(object): | |||
""" | """ | |||
FS_nlri class implementation that allows sorting. | FS_nlri class implementation that allows sorting. | |||
By calling .sort() on a array of FS_nlri objects these will be | By calling .sort() on an array of FS_nlri objects these will be | |||
sorted according to the flow_rule_cmp algorithm. | sorted according to the flow_rule_cmp algorithm. | |||
Example: | Example: | |||
nlri = [ FS_nlri(components=[ | nlri = [ FS_nlri(components=[ | |||
FS_component(component_type=IP_DESTINATION, | FS_component(component_type=IP_DESTINATION, | |||
op_value=ipaddress.ip_network('10.1.0.0/16') ), | op_value=ipaddress.ip_network('10.1.0.0/16') ), | |||
FS_component(component_type=4, | FS_component(component_type=4, | |||
op_value=bytearray([0,1,2,3,4,5,6])), | op_value=bytearray([0,1,2,3,4,5,6])), | |||
]), | ]), | |||
FS_nlri(components=[ | FS_nlri(components=[ | |||
FS_component(component_type=5, | FS_component(component_type=5, | |||
op_value=bytearray([0,1,2,3,4,5,6])), | op_value=bytearray([0,1,2,3,4,5,6])), | |||
FS_component(component_type=6, | FS_component(component_type=6, | |||
op_value=bytearray([0,1,2,3,4,5,6])), | op_value=bytearray([0,1,2,3,4,5,6])), | |||
]), | ]), | |||
] | ] | |||
nlri.sort() # sorts the array accorinding to the algorithm | nlri.sort() # sorts the array according to the algorithm | |||
""" | """ | |||
def __init__(self, components = None): | def __init__(self, components = None): | |||
""" | """ | |||
components: list of type FS_component | components: list of type FS_component | |||
""" | """ | |||
self.components = components | self.components = components | |||
def __lt__(self, other): | def __lt__(self, other): | |||
# use the below algorithm for sorting | # use the below algorithm for sorting | |||
result = flow_rule_cmp(self, other) | result = flow_rule_cmp(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(a, b): | def flow_rule_cmp(a, b): | |||
""" | """ | |||
Example of the flowspec comparison algorithm. | Example of the flowspec comparison algorithm. | |||
""" | """ | |||
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: | ||||
return A_HAS_PRECEDENCE | ||||
# Higher precedence for lower component type | ||||
if comp_a.component_type < comp_b.component_type: | ||||
return A_HAS_PRECEDENCE | ||||
if comp_a.component_type > comp_b.component_type: | ||||
return B_HAS_PRECEDENCE | ||||
# component types are equal -> type specific comparison | ||||
if comp_a.component_type in (IP_DESTINATION, IP_SOURCE): | ||||
# assuming comp_a.op_value, comp_b.op_value of | ||||
# type ipaddress.IPv4Network | ||||
if comp_a.op_value.overlaps(comp_b.op_value): | ||||
# longest prefixlen has precedence | ||||
if comp_a.op_value.prefixlen > \ | ||||
comp_b.op_value.prefixlen: | ||||
return A_HAS_PRECEDENCE | ||||
if comp_a.op_value.prefixlen < \ | ||||
comp_b.op_value.prefixlen: | ||||
return B_HAS_PRECEDENCE | ||||
# components equal -> continue with next component | ||||
elif comp_a.op_value > comp_b.op_value: | ||||
return B_HAS_PRECEDENCE | ||||
elif comp_a.op_value < comp_b.op_value: | ||||
return A_HAS_PRECEDENCE | ||||
else: | ||||
# assuming comp_a.op_value, comp_b.op_value of type | ||||
# bytearray | ||||
if len(comp_a.op_value) == len(comp_b.op_value): | ||||
if comp_a.op_value > comp_b.op_value: | ||||
return B_HAS_PRECEDENCE | ||||
if comp_a.op_value < comp_b.op_value: | ||||
return A_HAS_PRECEDENCE | ||||
# components equal -> continue with next component | ||||
else: | ||||
common = min(len(comp_a.op_value), | ||||
len(comp_b.op_value)) | ||||
if comp_a.op_value[:common] > \ | ||||
comp_b.op_value[:common]: | ||||
return B_HAS_PRECEDENCE | ||||
elif comp_a.op_value[:common] < \ | ||||
comp_b.op_value[:common]: | ||||
return A_HAS_PRECEDENCE | ||||
# the first common bytes match | ||||
elif len(comp_a.op_value) > len(comp_b.op_value): | ||||
return A_HAS_PRECEDENCE | ||||
else: | ||||
return B_HAS_PRECEDENCE | ||||
return EQUAL | ||||
<CODE ENDS> | ||||
if not comp_b: | ||||
return A_HAS_PRECEDENCE | ||||
# Higher precedence for lower component type | ||||
if comp_a.component_type < comp_b.component_type: | ||||
return A_HAS_PRECEDENCE | ||||
if comp_a.component_type > comp_b.component_type: | ||||
return B_HAS_PRECEDENCE | ||||
# component types are equal -> type specific comparison | ||||
if comp_a.component_type in (IP_DESTINATION, IP_SOURCE): | ||||
# assuming comp_a.op_value, comp_b.op_value of | ||||
# type ipaddress.IPv4Network | ||||
if comp_a.op_value.overlaps(comp_b.op_value): | ||||
# longest prefixlen has precedence | ||||
if comp_a.op_value.prefixlen > \ | ||||
comp_b.op_value.prefixlen: | ||||
return A_HAS_PRECEDENCE | ||||
if comp_a.op_value.prefixlen < \ | ||||
comp_b.op_value.prefixlen: | ||||
return B_HAS_PRECEDENCE | ||||
# components equal -> continue with next component | ||||
elif comp_a.op_value > comp_b.op_value: | ||||
return B_HAS_PRECEDENCE | ||||
elif comp_a.op_value < comp_b.op_value: | ||||
return A_HAS_PRECEDENCE | ||||
else: | ||||
# assuming comp_a.op_value, comp_b.op_value of type | ||||
# bytearray | ||||
if len(comp_a.op_value) == len(comp_b.op_value): | ||||
if comp_a.op_value > comp_b.op_value: | ||||
return B_HAS_PRECEDENCE | ||||
if comp_a.op_value < comp_b.op_value: | ||||
return A_HAS_PRECEDENCE | ||||
# components equal -> continue with next component | ||||
else: | ||||
common = min(len(comp_a.op_value), len(comp_b.op_value)) | ||||
if comp_a.op_value[:common] > comp_b.op_value[:common]: | ||||
return B_HAS_PRECEDENCE | ||||
elif comp_a.op_value[:common] < \ | ||||
comp_b.op_value[:common]: | ||||
return A_HAS_PRECEDENCE | ||||
# the first common bytes match | ||||
elif len(comp_a.op_value) > len(comp_b.op_value): | ||||
return A_HAS_PRECEDENCE | ||||
else: | ||||
return B_HAS_PRECEDENCE | ||||
return EQUAL | ||||
<CODE ENDS> | ||||
Appendix B. Comparison with RFC 5575 | Appendix B. Comparison with RFC 5575 | |||
This document includes numerous editorial changes to [RFC5575]. It | This document includes numerous editorial changes to [RFC5575]. It | |||
also completely incorporates the redirect action clarification | also completely incorporates the redirect action clarification | |||
document [RFC7674]. It is recommended to read the entire document. | document [RFC7674]. It is recommended to read the entire document. | |||
The authors, however want to point out the following technical | The authors, however, want to point out the following technical | |||
changes to [RFC5575]: | changes to [RFC5575]: | |||
Section 1 introduces the Flow Specification NLRI. In [RFC5575] | * Section 1 introduces the Flow Specification NLRI. In [RFC5575], | |||
this NLRI was defined as an opaque-key in BGPs database. This | this NLRI was defined as an opaque key in BGPs database. This | |||
specification has removed all references to an opaque-key | specification has removed all references to an opaque key | |||
property. BGP implementations are able to understand the NLRI | property. BGP implementations are able to understand the NLRI | |||
encoding. | encoding. | |||
Section 4.2.1.1 defines a numeric operator and comparison bit | * Section 4.2.1.1 defines a numeric operator and comparison bit | |||
combinations. In [RFC5575] the meaning of those bit combination | combinations. In [RFC5575], the meaning of those bit combination | |||
was not explicitly defined and left open to the reader. | was not explicitly defined and left open to the reader. | |||
Section 4.2.2.3 - Section 4.2.2.8, Section 4.2.2.10, | * Sections 4.2.2.3-4.2.2.8, 4.2.2.10, and 4.2.2.11 make use of the | |||
Section 4.2.2.11 make use of the above numeric operator. The | above numeric operator. The allowed length of the comparison | |||
allowed length of the comparison value was not consistently | value was not consistently defined in [RFC5575]. | |||
defined in [RFC5575]. | ||||
Section 7 defines all Traffic Filtering Action Extended | * Section 7 defines all Traffic Filtering Action Extended | |||
communities as transitive extended communities. [RFC5575] defined | Communities as transitive Extended Communities. [RFC5575] defined | |||
the traffic-rate action to be non-transitive and did not define | the traffic-rate action to be non-transitive and did not define | |||
the transitivity of the other Traffic Filtering Action communities | the transitivity of the other Traffic Filtering Action communities | |||
at all. | at all. | |||
Section 7.2 introduces a new Traffic Filtering Action (traffic- | * Section 7.2 introduces a new Traffic Filtering Action (traffic- | |||
rate-packets). This action did not exist in [RFC5575]. | rate-packets). This action did not exist in [RFC5575]. | |||
Section 7.4 contains the same redirect actions already defined in | * Section 7.4 contains the same redirect actions already defined in | |||
[RFC5575] however, these actions have been renamed to "rt- | [RFC5575], however, these actions have been renamed to "rt- | |||
redirect" to make it clearer that the redirection is based on | redirect" to make it clearer that the redirection is based on | |||
route-target. This section also completely incorporates the | route-target. This section also completely incorporates the | |||
[RFC7674] clarifications of the Flowspec Redirect Extended | [RFC7674] clarifications of the Flowspec Redirect Extended | |||
Community. | Community. | |||
Section 7.7 contains general considerations on interfering traffic | * Section 7.7 contains general considerations on interfering traffic | |||
actions. Section 7.3 also cross-references Section 7.7. | actions. Section 7.3 also cross-references Section 7.7. | |||
[RFC5575] did not mention this. | [RFC5575] did not mention this. | |||
Section 10 contains new error handling. | * Section 10 contains new error handling. | |||
Acknowledgments | ||||
The authors would like to thank Yakov Rekhter, Dennis Ferguson, Chris | ||||
Morrow, Charlie Kaufman, and David Smith for their comments on the | ||||
original [RFC5575]. Chaitanya Kodeboyina helped design the flow | ||||
validation procedure, and Steven Lin and Jim Washburn ironed out all | ||||
the details necessary to produce a working implementation in the | ||||
original [RFC5575]. | ||||
A packet rate Traffic Filtering Action was also described in a Flow | ||||
Specification extension draft and the authors would like to thank | ||||
Wesley Eddy, Justin Dailey, and Gilbert Clark for their work. | ||||
Additionally, the authors would like to thank Alexander Mayrhofer, | ||||
Nicolas Fevrier, Job Snijders, Jeffrey Haas, and Adam Chappell for | ||||
their comments and review. | ||||
Contributors | ||||
Barry Greene, Pedro Marques, Jared Mauch, and Nischal Sheth were | ||||
authors on [RFC5575] and, therefore, are contributing authors on this | ||||
document. | ||||
Authors' Addresses | Authors' Addresses | |||
Christoph Loibl | Christoph Loibl | |||
next layer Telekom GmbH | next layer Telekom GmbH | |||
Mariahilfer Guertel 37/7 | Mariahilfer Guertel 37/7 | |||
Vienna 1150 | 1150 Vienna | |||
AT | Austria | |||
Phone: +43 664 1176414 | Phone: +43 664 1176414 | |||
Email: cl@tix.at | Email: cl@tix.at | |||
Susan Hares | Susan Hares | |||
Huawei | Huawei | |||
7453 Hickory Hill | 7453 Hickory Hill | |||
Saline, MI 48176 | Saline, MI 48176 | |||
USA | United States of America | |||
Email: shares@ndzh.com | Email: shares@ndzh.com | |||
Robert Raszuk | Robert Raszuk | |||
Bloomberg LP | Bloomberg LP | |||
731 Lexington Ave | 731 Lexington Ave | |||
New York City, NY 10022 | New York City, NY 10022 | |||
USA | United States of America | |||
Email: robert@raszuk.net | Email: robert@raszuk.net | |||
Danny McPherson | Danny McPherson | |||
Verisign | Verisign | |||
USA | United States of America | |||
Email: dmcpherson@verisign.com | Email: dmcpherson@verisign.com | |||
Martin Bacher | Martin Bacher | |||
T-Mobile Austria | T-Mobile Austria | |||
Rennweg 97-99 | Rennweg 97-99 | |||
Vienna 1030 | 1030 Vienna | |||
AT | Austria | |||
Email: mb.ietf@gmail.com | Email: mb.ietf@gmail.com | |||
End of changes. 229 change blocks. | ||||
713 lines changed or deleted | 806 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/ |