Internet-Draft | L2 Flow Spec | October 2023 |
Hao, et al. | Expires 18 April 2024 | [Page] |
This document defines a Border Gateway Protocol (BGP) Flow Specification (flowspec) extension to disseminate Ethernet Layer 2 (L2) and Layer 2 Virtual Private Network (L2VPN) traffic filtering rules either by themselves or in conjunction with L3 flowspecs. AFI/SAFI 6/133 and 25/134 are used for these purposes. New component types and two extended communities are also defined.¶
This Internet-Draft is submitted in full conformance with the 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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 18 April 2024.¶
Copyright (c) 2023 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Border Gateway Protocol (BGP) Flow Specification [RFC8955] (flowspec) is an extension to BGP that supports the dissemination of traffic flow specifications and resulting actions to be taken on packets in a specified flow. It leverages the BGP Control Plane to simplify the distribution of ACLs (Access Control Lists). Using the Flow Specification extension new filter rules can be injected to all BGP peers simultaneously without changing router configuration. A typical application is to automate the distribution of traffic filter lists to routers for DDoS (Distributed Denial of Service) mitigation, access control, and similar applications.¶
BGP Flow Specification [RFC8955] defines a BGP Network Layer Reachability Information (NLRI) format used to distribute traffic flow specification rules. The NLRI for (AFI=1, SAFI=133) specifies IPv4 unicast filtering. The NLRI for (AFI=1, SAFI=134) specifies IPv4 BGP/MPLS VPN filtering [RFC7432]. The Flow Specification match part defined in [RFC8955] only includes L3/L4 information like IPv4 source/destination prefix, protocol, ports, and the like, so traffic flows can only be filtered based on L3/L4 information. This has been extended by [RFC8956] to cover IPv6 (AFI=2) L3/L4.¶
Layer 2 Virtual Private Networks (L2VPNs) have been deployed in an increasing number of networks. Such networks also have requirements to deploy BGP Flow Specification to mitigate DDoS attack traffic. Within an L2VPN network, both IP and non-IP Ethernet traffic may exist. For IP traffic filtering, the VPN Flow Specification rules defined in [RFC8955] and/or [RFC8956], which include match criteria and actions, can still be used. For non-IP Ethernet traffic filtering, Layer 2 related information like source/destination MAC and VLAN must be considered.¶
There are different kinds of L2VPN networks like EVPN [RFC7432], BGP VPLS [RFC4761], LDP VPLS [RFC4762] and border gateway protocol (BGP) auto discovery [RFC6074]. Because the Flow Specification feature relies on the BGP protocol to distribute traffic filtering rules, it can only be incrementally deployed in those L2VPN networks where BGP has already been used for auto discovery and/or signaling purposes such as BGP-based VPLS [RFC4761], EVPN, and LDP-based VPLS [RFC4762] with BGP auto-discovery [RFC6074].¶
This document defines new flowspec component types and two new extended communities to support L2 and L2VPN flowspec applications. The flowspec rules can be enforced on all border routers or on some interface sets of the border routers. SAFI=133 in [RFC8955] and [RFC8956] is extended for AFI=6 as specified in Section 2 to cover L2 traffic filtering information and in Section 3 SAFI=134 is extended for AFI=25 to cover the L2VPN environment.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The following acronyms and terms are used in this document:¶
[RFC8955] defines SAFI 133 and SAFI 134, with AFI=1, for "dissemination of IPv4 flow specification rules" and "dissemination of VPNv4 flow specification rules", respectively. [RFC8956] extends [RFC8955] to also allow AFI=2 thus making it applicable to both IPv4 and IPv6 applications. This document further extends SAFI=133 for AFI=6 and SAFI=134 for AFI=25 to make them applicable to L2 and L2VPN applications. This document also provides for the optional combination of L3 flow specifications with these L2 flow specifications.¶
This section specifies the L2 flowspec for AFI=6/SAFI=133. To simplify assignments, a new registry is used for L2 flowspec. Since it is frequently desirable to also filter on L3/L4 fields, provision is made for their inclusion along with an indication of the L3 protocol involved (IPv4 or IPv6).¶
The NLRI part of the MP_REACH_NLRI and MP_UNREACH_NLRI is encoded as a 1- or 2-octet total NLRI length field followed by several fields as described below.¶
The fields show in Figure 1 are further specified below:¶
The L2 flowspec portion of the NLRI-value consists of flowspec components as in [RFC8955] but using L2 components and types as specified below. All components start with a type octet followed by a length octet followed by any additional information needed. The length octet gives the length, in octets, of the information after the length octet. This structure applies to all new components to be defined in the L2 Flow-spec Component Registry (see Section 6) and to all existing components except Types 2 and 3 where the length is in bits.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match the two-octet EtherType field. op is encoded as specified in Section 4.2.1.1 of [RFC8955]. Values are encoded as 2-octet quantities. Ethernet II framing defines the two-octet Ethernet Type (EtherType) field in an Ethernet frame, preceded by destination and source MAC addresses, that identifies an upper layer protocol encapsulating the frame data. The match fails if LLC encoding is being used rather than EtherType encoding.¶
Encoding: <type (1 octet), MAC Prefix length (1 octet), MAC Prefix>¶
Defines the source MAC Address prefix to match encoded as in BGP UPDATE messages [RFC4271]. Prefix length is in bits and the MAC Prefix is fill out with from 1 to 7 padding bits so that it is an integer number of octets. These padding bits are ignored for matching purposes.¶
Encoding: <type (1 octet), MAC Prefix length (1 octet), MAC Prefix>¶
Defines the destination MAC Address to match encoded as in BGP UPDATE messages [RFC4271]. Prefix length is in bits and the MAC Prefix is fill out with from 1 to 7 padding bits so that it is an integer number of octets. These padding bits are ignored for matching purposes.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match the 1-octet DSAP in the IEEE 802.2 LLC (Logical Link Control Header). Values are encoded as 1-octet quantities. op is encoded as specified in Section 4.2.1.1 of [RFC8955]. The match fails if EtherType L2 header encoding is being used rather than LLC encoding.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match the 1-octet SSAP in the IEEE 802.2 LLC. Values are encoded as 1-octet quantities. op is encoded as specified in Section 4.2.1.1 of [RFC8955]. The match fails if EtherType L2 header encoding is being used rather than LLC encoding.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match the 1-octet control field in the IEEE 802.2 LLC. Values are encoded as 1-octet quantities. op is encoded as specified in Section 4.2.1.1 of [RFC8955]. The match fails if EtherType L2 header encoding is being used rather than LLC encoding.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match 5-octet SNAP (Sub-Network Access Protocol) field. Values are encoded as 8-octet quantities with the zero padded SNAP left justified. op is encoded as specified in Section 4.2.1.1 of [RFC8955]. The match fails if EtherType L2 header encoding is being used rather than LLC encoding.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match VLAN ID. Values are encoded as 2-octet quantities, where the four most significant bits are set to zero and ignored for matching and the 12 least significant bits contain the VLAN value. op is encoded as specified in Section 4.2.1.1 of [RFC8955].¶
In the virtual local-area network (VLAN) stacking case, the VLAN ID is the outer VLAN ID.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match 3-bit VLAN PCP (priority code point) fields [IEEE802.1Q]. Values are encoded using a single octet, where the five most significant bits are set to zero and ignored for matching and the three least significant bits contain the VLAN PCP value. op is encoded as specified in Section 4.2.1.1 of [RFC8955].¶
In the virtual local-area network (VLAN) stacking case, the VLAN PCP is part of the outer VLAN tag.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match the inner VLAN ID for virtual local-area network (VLAN) stacking or Q-in-Q use. Values are encoded as 2-octet quantities, where the four most significant bits are set to zero and ignored for matching and the 12 least significant bits contain the VLAN value. op is encoded as specified in Section 4.2.1.1 of [RFC8955].¶
In the single VLAN case, this component type MUST NOT be used. If it appears the match will fail.¶
Encoding: <type (1 octet), length (1 octet), [op, value]+>¶
Defines a list of {operation, value} pairs used to match 3-bit inner VLAN PCP fields [IEEE802.1Q] for virtual local-area network (VLAN) stacking or Q-in-Q use. Values are encoded using a single octet, where the five most significant bits are set to zero and ignored for matching and the three least significant bits contain the VLAN PCP value. op is encoded as specified in Section 4.2.1.1 of [RFC8955].¶
In the single VLAN case, this component type MUST NOT be used. If it appears the match will fail.¶
Encoding: <type (1 octet), length (1 octet), op (1 octet)>¶
This type tests the DEI (Drop Eligible Indicator) bit in the VLAN tag. If op is zero, it matches if and only if the DEI bit is zero. If op is non-zero, it matches if and only if the DEI bit is one.¶
In the virtual local-area network (VLAN) stacking case, the VLAN DEI is part of the outer VLAN tag.¶
Encoding: <type (1 octet), length (1 octet), op (1 octet)>¶
This type tests the DEI bit in the inner VLAN tag. If op is zero, it matches if and only if the DEI bit is zero. If op is non-zero, it matches if and only if the DEI bit is one.¶
In the single VLAN case, this component type MUST NOT be used. If it appears the match will fail.¶
Encoding: <type (1 octet), length (1 octet), op (1 octet)>¶
This type tests the bottom nibble of the top octet of the Source MAC address. The two low order bits of that nibble have long been the local bit (0x2) and the group addressed bit (0x1). However, recent changes in IEEE 802 have divided the local address space into 4 quadrants specified by the next two bits (0x4 and 0x8) [RFC7042bis]. This flowspec component permits testing, for example, that a MAC is group addressed or is a local address in a particular quadrant. The encoding is as given in Section 4.2.1.2 of [RFC8955].¶
Encoding: <type (1 octet), length (1 octet), op (1 octet)>¶
As discussed in Section 2.1.14 but for the Destination MAC Address special bits.¶
The existing rules in Section 5.1 of [RFC8955] and in [RFC8956] for the ordering of traffic filtering are extended as follows:¶
L2 flowspecs (AFI = 6, 25) take precedence over L3 flowspecs (AFI = 1, 2). Between two L2 flowspecs, precedence of the L2 portion is determined as specified in this section after this paragraph. If the L2 flowspec L2 portions are the same and the L3-AFI is nonzero, then the L3 portions are compared as specified in [RFC8955] or [RFC8956] as appropriate. Note: if the L3-AFI fields are different between two L2 flowspecs, they will never match the same packet so it will not be necessary to prioritize two flowspecs with different L3-AFI values.¶
The original definition for the order of traffic filtering rules can be reused for L2 with new consideration for the MAC Address offset. As long as the offsets are equal, the comparison is the same, retaining longest-prefix-match semantics. If the offsets are not equal, the lowest offset has precedence, as this flow matches the most significant bit.¶
Pseudocode:¶
flow_rule_L2_cmp (a, b) { comp1 = next_component(a); comp2 = next_component(b); while (comp1 || comp2) { // component_type returns infinity on end-of-list if (component_type(comp1) < component_type(comp2)) { return A_HAS_PRECEDENCE; } if (component_type(comp1) > component_type(comp2)) { return B_HAS_PRECEDENCE; } if (component_type(comp1) == MAC_DESTINATION || MAC_SOURCE) { common = MIN(MAC Address length (comp1), MAC Address length (comp2)); cmp = MAC Address compare(comp1, comp2, common); // not equal, lowest value has precedence // equal, longest match has precedence } else { common = MIN(component_length(comp1), component_length(comp2)); cmp = memcmp(data(comp1), data(comp2), common); // not equal, lowest value has precedence // equal, longest string has precedence } } return EQUAL; }¶
The NLRI format for AFI=25/SAFI=134 (L2VPN), as with the other VPN flowspec AFI/SAFI pairs, is the same as the non-VPN Flow-Spec but with the addition of a Route Distinguisher to identify the VPN to which the flowspec is to be applied.¶
In addition, the IANA entry for SAFI 134 is slightly generalized as specified at the beginning of Section 6.¶
The L2VPN NLRI format is as follows:¶
The fields in Figure 2, other than the Route Distinguisher, are encoded as specified in Section 2 except that the minimum value for total-length is 12.¶
Flow specification rules received via this NLRI apply only to traffic that belongs to the VPN instance(s) into which it is imported. Flow rules are accepted as specified in Section 5.¶
The order between L2VPN filtering rules is determined as specified in Section 2.2. Note that if the Route Distinguisher is different between two L2VPN filtering rules, they will never both match the same packet so they need not be prioritized.¶
The default action for an L2 traffic filtering flowspec is to accept traffic that matches that particular rule. The following extended community values per [RFC8955] can be used to specify particular actions in an L2 VPN network:¶
type | extended community | encoding |
---|---|---|
0x8006 | traffic-rate | 2-octet as#, 4-octet float |
0x8007 | traffic-action | bitmask |
0x8008 | redirect | 6-octet Route Target |
0x8009 | traffic-marking | DSCP value |
Redirect: The action should be redefined to allow the traffic to be redirected to a MAC or IP VRF routing instance that lists the specified route-target in its import policy.¶
Besides the above extended communities, this document also specifies the following BGP extended communities for Ethernet flows to extend [RFC8955]:¶
type | extended community | encoding |
---|---|---|
TBD1 | VLAN-action | bitmask |
TBD2 | TPID-action | bitmask |
The VLAN-action extended community, as shown in the diagram below, consists of 6 octets that include action Flags, two VLAN IDs, and the associated PCP and DEI values. The action Flags fields are further divided into two parts which correspond to the first action and the second action respectively. Bit 0 to bit 7 give the first action while bit 8 to bit 15 give the second action. The bits of PO, PU, SW, RI and RO in each part represent the action of Pop, Push, Swap, Rewrite inner VLAN and Rewrite outer VLAN respectively. Through this method, more complicated actions also can be represented in a single VLAN-action extended community, such as SwapPop, PushSwap, etc. For example, SwapPop action is the sequence of two actions, the first action is Swap and the second action is Pop.¶
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ |PO1|PU1|SW1|RI1|RO1| Resv |PO2|PU2|SW2|RI2|RO2| Resv | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | VLAN ID1 | PCP1 |DE1| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | VLAN ID2 | PCP2 |DE2| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+¶
Giving an example below: if the action of PUSH Inner VLAN 10 with PCP value 5 and DEI value 0 and PUSH Outer VLAN 20 with PCP value 6 and DEI value 0 is needed, the format of the VLAN-action extended community is as follows:¶
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |0 |1 |0 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 10 |1 |0 |1 |0 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 20 |1 |1 |0 |0 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+¶
The TPID-action extended community consists of 6 octets which includes the fields of action Flags, TP ID1 and TP ID2.¶
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |TI|TO| Resv | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | TP ID1 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | TP ID2 | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+¶
Flow Specifications received over AFI=25/SAFI=134 are validated against routing reachability received over AFI=25/SAFI=128 as modified to conform to [RFC9117].¶
IANA is requested to change the description for SAFI 134 [RFC8955] to read as follows and to change the reference for it to [this document]:¶
134 VPN dissemination of flow specification rules¶
IANA is requested to create an L2 Flow Specification Component Type registry on the Flow Spec Component Types registries web page as follows:¶
Name: L2 Flow Specification Component Types Reference: [this document] Registration Procedures: 0 Reserved 1-127 Specification Required 128-255 First Come First Served¶
Initial contents:¶
type | Reference | description |
---|---|---|
0 | [this document] | Reserved |
1 | [this document] | Ethernet Type |
2 | [this document] | Source MAC |
3 | [this document] | Destination MAC |
4 | [this document] | DSAP in LLC |
5 | [this document] | SSAP in LLC |
6 | [this document] | Control field in LLC |
7 | [this document] | SNAP |
8 | [this document] | VLAN ID |
9 | [this document] | VLAN PCP |
10 | [this document] | Inner VLAN ID |
11 | [this document] | Inner VLAN PCP |
12 | [this document] | VLAN DEI |
13 | [this document] | Inner VLAN DEI |
14 | [this document] | Source MAC Special Bits |
15 | [this document] | Destination MAC Special Bits |
16-254 | [this document] | unassigned |
255 | [this document] | Reserved |
IANA is requested to assign two values from the "BGP Extended Communities Type - extended, transitive" registry [suggested value provided in square brackets]:¶
Type value | Name | Reference |
---|---|---|
TBD1[0x080A] | Flow spec VLAN action | [this document] |
TBD2[0x080B] | Flow spec TPID action | [this document] |
For General BGP Flow Specification Security Considerations, see [RFC8955].¶
VLAN tagging identifies Layer 2 communities which are commonly expected to be isolated except when higher layer connection is provided, such as Layer 3 routing. Thus, the ability of the flowspec VLAN action to change the VLAN ID in a frame might compromise security.¶
The authors wish to acknowledge the important contributions and suggestions of the following:¶
Hannes Gredler, Xiaohu Xu, Zhenbin Li, Lucy Yong, and Feng Dong.¶