rfc9079.original | rfc9079.txt | |||
---|---|---|---|---|
Network Working Group M. Boutier | Internet Engineering Task Force (IETF) M. Boutier | |||
Internet-Draft J. Chroboczek | Request for Comments: 9079 J. Chroboczek | |||
Intended status: Standards Track IRIF, University of Paris | Category: Standards Track IRIF, University of Paris | |||
Expires: 23 October 2021 21 April 2021 | ISSN: 2070-1721 August 2021 | |||
Source-Specific Routing in Babel | Source-Specific Routing in the Babel Routing Protocol | |||
draft-ietf-babel-source-specific-08 | ||||
Abstract | Abstract | |||
Source-specific routing (also known as Source-Address Dependent | Source-specific routing, also known as Source Address Dependent | |||
Routing, SADR) is an extension to traditional next-hop routing where | Routing (SADR), is an extension to traditional next-hop routing where | |||
packets are forwarded according to both their destination and their | packets are forwarded according to both their destination address and | |||
source address. This document describes an extension for source- | their source address. This document describes an extension for | |||
specific routing to the Babel routing protocol. | source-specific routing to the Babel routing protocol. | |||
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 23 October 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/rfc9079. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Simplified BSD License text as described in Section 4.e of | |||
provided without warranty as described in the Simplified BSD License. | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction and background . . . . . . . . . . . . . . . . . 2 | 1. Introduction and Background | |||
1.1. Application to multihoming . . . . . . . . . . . . . . . 3 | 1.1. Application to Multihoming | |||
1.2. Other applications . . . . . . . . . . . . . . . . . . . 4 | 1.2. Other Applications | |||
1.3. Specificity of prefix pairs . . . . . . . . . . . . . . . 5 | 1.3. Specificity of Prefix Pairs | |||
2. Specification of Requirements . . . . . . . . . . . . . . . . 6 | 2. Specification of Requirements | |||
3. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Data Structures | |||
3.1. The Source Table . . . . . . . . . . . . . . . . . . . . 7 | 3.1. The Source Table | |||
3.2. The Route Table . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. The Route Table | |||
3.3. The Table of Pending Seqno Requests . . . . . . . . . . . 7 | 3.3. The Table of Pending Seqno Requests | |||
4. Data Forwarding . . . . . . . . . . . . . . . . . . . . . . . 8 | 4. Data Forwarding | |||
5. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | 5. Protocol Operation | |||
5.1. Protocol Messages . . . . . . . . . . . . . . . . . . . . 9 | 5.1. Protocol Messages | |||
5.2. Wildcard Messages . . . . . . . . . . . . . . . . . . . . 9 | 5.2. Wildcard Messages | |||
6. Compatibility with the base protocol . . . . . . . . . . . . 10 | 6. Compatibility with the Base Protocol | |||
6.1. Starvation and Blackholes . . . . . . . . . . . . . . . . 10 | 6.1. Starvation and Blackholes | |||
7. Protocol Encoding . . . . . . . . . . . . . . . . . . . . . . 10 | 7. Protocol Encoding | |||
7.1. Source Prefix sub-TLV . . . . . . . . . . . . . . . . . . 11 | 7.1. Source Prefix Sub-TLV | |||
7.2. Source-specific Update . . . . . . . . . . . . . . . . . 12 | 7.2. Source-Specific Update | |||
7.3. Source-specific Route Request . . . . . . . . . . . . . . 12 | 7.3. Source-Specific Route Request | |||
7.4. Source-Specific Seqno Request . . . . . . . . . . . . . . 12 | 7.4. Source-Specific Seqno Request | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 8. IANA Considerations | |||
9. Security considerations . . . . . . . . . . . . . . . . . . . 12 | 9. Security Considerations | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 13 | Acknowledgments | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses | |||
1. Introduction and background | 1. Introduction and Background | |||
The Babel routing protocol [RFC8966] is a distance vector routing | The Babel routing protocol [RFC8966] is a distance vector routing | |||
protocol for next-hop routing. In next-hop routing, each node | protocol for next-hop routing. In next-hop routing, each node | |||
maintains a forwarding table which maps destination prefixes to next | maintains a forwarding table that maps destination prefixes to next | |||
hops. The forwarding decision is a per-packet operation which | hops. The forwarding decision is a per-packet operation that depends | |||
depends on the destination address of the packets and on the entries | on the destination address of the packets and on the entries of the | |||
of the forwarding table. When a packet is about to be routed, its | forwarding table. When a packet is about to be routed, its | |||
destination address is compared to the prefixes of the routing table: | destination address is compared to the prefixes of the routing table: | |||
the entry with the most specific prefix containing the destination | the entry with the most specific prefix containing the destination | |||
address of the packet is chosen, and the packet is forwarded to the | address of the packet is chosen, and the packet is forwarded to the | |||
associated next-hop. Next-hop routing is a simple, well understood | associated next hop. Next-hop routing is a simple, well-understood | |||
paradigm that works satisfactorily in a large number of cases. | paradigm that works satisfactorily in a large number of cases. | |||
The use of next-hop routing limits the flexibility of the routing | The use of next-hop routing limits the flexibility of the routing | |||
system in two ways. First, since the routing decision is local to | system in two ways. First, since the routing decision is local to | |||
each router, a router A can only select a route ABC...Z if its | each router, a router A can only select a route ABC...Z if its | |||
neighbouring router B has selected the route BC...Z. Second, the | neighbouring router B has selected the route BC...Z. Second, the | |||
only criterion used by a router to choose a route is the destination | only criterion used by a router to choose a route is the destination | |||
address: two packets with the same destination follow the same route. | address: two packets with the same destination follow the same route. | |||
Yet, there are other data in the IP header that could conceivably be | Yet, there are other data in the IP header that could conceivably be | |||
used to guide the routing decision -- the ToS octet and, of course, | used to guide the routing decision -- the Type of Service (ToS) octet | |||
the source address. | and, of course, the source address. | |||
Source-specific routing [SS-ROUTING], or Source Address Dependent | Source-specific routing [SS-ROUTING], or Source Address Dependent | |||
Routing (SADR), is a modest extension to next-hop routing where the | Routing (SADR), is a modest extension to next-hop routing where the | |||
forwarding decision depends not only on the destination address but | forwarding decision depends not only on the destination address but | |||
also on the source address of the packet being routed, which makes it | also on the source address of the packet being routed, which makes it | |||
possible for two packets with the same destination but different | possible for two packets with the same destination but different | |||
source addresses to be routed following different paths. | source addresses to be routed following different paths. | |||
This document describes a source-specific routing extension for the | This document describes a source-specific routing extension for the | |||
Babel routing protocol [RFC8966]. This involves minor changes to the | Babel routing protocol [RFC8966]. This involves minor changes to the | |||
data structures, which must include a source prefix in addition to | data structures, which must include a source prefix in addition to | |||
the destination prefix already present, and some changes to the | the destination prefix already present, and some changes to the | |||
Update, Route Request and Seqno Request TLVs, which are extended with | Update, Route Request, and Seqno Request TLVs, which are extended | |||
a source prefix. The source prefix is encoded using a mandatory sub- | with a source prefix. The source prefix is encoded using a mandatory | |||
TLV ([RFC8966] Section 4.4). | sub-TLV ([RFC8966], Section 4.4). | |||
1.1. Application to multihoming | 1.1. Application to Multihoming | |||
Multihoming is the practice of connecting a single network to two or | Multihoming is the practice of connecting a single network to two or | |||
more transit networks. The main application of source-specific | more transit networks. The main application of source-specific | |||
routing is a form of multihoming known as "multihoming with multiple | routing is a form of multihoming known as "multihoming with multiple | |||
addresses". | addresses". | |||
Classical multihoming consists in assigning a provider-independent | Classical multihoming consists of assigning a provider-independent | |||
range of addresses to the multihomed network and announcing it to all | range of addresses to the multihomed network and announcing it to all | |||
transit providers. While classical multihoming works well for large | transit providers. While classical multihoming works well for large | |||
networks, the cost of obtaining a provider-independent address range | networks, the cost of obtaining a provider-independent address range | |||
and announcing it globally in the Internet is prohibitive for small | and announcing it globally in the Internet is prohibitive for small | |||
networks. Unfortunately, it is not possible to implement classical | networks. Unfortunately, it is not possible to implement classical | |||
multihoming with ordinary provider-dependent addresses: in a network | multihoming with ordinary provider-dependent addresses: in a network | |||
connected to two providers A and B, a packet with a source address | connected to two providers A and B, a packet with a source address | |||
allocated by A needs to be routed through the edge router connected | allocated by A needs to be routed through the edge router connected | |||
to A. If it is routed through the edge router connected to B, it | to A. If it is routed through the edge router connected to B, it | |||
will most likely be filtered (dropped), in accordance with [BCP84]. | will most likely be filtered (dropped), in accordance with [BCP84]. | |||
skipping to change at page 4, line 6 ¶ | skipping to change at line 144 ¶ | |||
In multihoming with multiple addresses, every host in the multihomed | In multihoming with multiple addresses, every host in the multihomed | |||
network is assigned multiple addresses, one for each transit | network is assigned multiple addresses, one for each transit | |||
provider. Additional mechanisms are needed in order (i) to choose, | provider. Additional mechanisms are needed in order (i) to choose, | |||
for each packet, a source address that is associated with a provider | for each packet, a source address that is associated with a provider | |||
that is currently up, and (ii) to route each packet towards the | that is currently up, and (ii) to route each packet towards the | |||
router connected to the provider associated with its source address. | router connected to the provider associated with its source address. | |||
One might argue that multihoming with multiple addresses splits the | One might argue that multihoming with multiple addresses splits the | |||
difficult problem of multihoming into two simpler sub-problems. | difficult problem of multihoming into two simpler sub-problems. | |||
The issue of choosing a suitable source address is a decision local | The issue of choosing a suitable source address is a decision local | |||
to the sending host, and an area of active research. The simplest | to the sending host and is an area of active research. The simplest | |||
solution is to use a traditional transport-layer protocol, such as | solution is to use a traditional transport-layer protocol, such as | |||
TCP, and to probe all available source addresses at connection time, | TCP, and to probe all available source addresses at connection time, | |||
analogously to what is already done with destination addresses, | analogously to what is already done with destination addresses, | |||
either sequentially [RFC3484] or in parallel [RFC8305]. Since the | either sequentially [RFC6724] or in parallel [RFC8305]. Since the | |||
transport-layer protocol is not aware of the multiple available | transport-layer protocol is not aware of the multiple available | |||
addresses, flows are interrupted when the selected provider goes down | addresses, flows are interrupted when the selected provider goes down | |||
(from the point of view of the user, all TCP connections are dropped | (from the point of view of the user, all TCP connections are dropped | |||
when the network environment changes). A better user experience can | when the network environment changes). A better user experience can | |||
be provided by making available all of the potential source and | be provided by making all of the potential source and destination | |||
destination addresses to higher layer protocols, either at the | addresses available to higher-layer protocols, either at the | |||
transport layer [RFC8684] [RFC4960], or at the applicaton layer | transport layer [RFC8684] [RFC4960] or at the application layer | |||
[RFC8445]. | [RFC8445]. | |||
Source-specific routing solves the problem of routing a packet to the | Source-specific routing solves the problem of routing a packet to the | |||
edge router indicated by its source address. Every edge router | edge router indicated by its source address. Every edge router | |||
announces into the routing domain a default route specific to the | announces into the routing domain a default route specific to the | |||
prefix associated with the provider it is connected to. This route | prefix associated with the provider it is connected to. This route | |||
is propagated all the way to the routers on the access link, which | is propagated all the way to the routers on the access link, which | |||
are therefore able to route every packet to the correct router. | are therefore able to route every packet to the correct router. | |||
Hosts simply send packets to their default router -- no host changes | Hosts simply send packets to their default router -- no host changes | |||
are necessary at the network layer. | are necessary at the network layer. | |||
1.2. Other applications | 1.2. Other Applications | |||
In addition to multihoming with multiple addresses, we are aware of | In addition to multihoming with multiple addresses, we are aware of | |||
two applications of source-specific routing. Tunnels and VPNs are | two applications of source-specific routing. Tunnels and VPNs are | |||
packet encapsulation techniques that are commonly used in the | packet encapsulation techniques that are commonly used in the | |||
Internet to establish a network-layer topology that is different from | Internet to establish a network-layer topology that is different from | |||
the physical topology. In some deployments, the default route points | the physical topology. In some deployments, the default route points | |||
at the tunnel; this causes the network stack to attempt to send | at the tunnel; this causes the network stack to attempt to send | |||
encapsulated packets through the tunnel, which causes it to break. | encapsulated packets through the tunnel, which causes it to break. | |||
Various solutions to this problem are possible, the most common of | Various solutions to this problem are possible, the most common of | |||
which is to point a host route at the tunnel endpoint. | which is to point a host route at the tunnel endpoint. | |||
skipping to change at page 5, line 8 ¶ | skipping to change at line 195 ¶ | |||
The third application of source-specific routing is controlled | The third application of source-specific routing is controlled | |||
anycast. Anycast is a technique in which a single destination | anycast. Anycast is a technique in which a single destination | |||
address is used to represent multiple network endpoints, collectively | address is used to represent multiple network endpoints, collectively | |||
called an "anycast group". A packet destined to the anycast group is | called an "anycast group". A packet destined to the anycast group is | |||
routed to an arbitrary member of the group, typically the one that is | routed to an arbitrary member of the group, typically the one that is | |||
nearest according to the routing protocol. | nearest according to the routing protocol. | |||
In many applications of anycast, such as DNS root servers, the | In many applications of anycast, such as DNS root servers, the | |||
nondeterminism of anycast is acceptable; some applications, however, | nondeterminism of anycast is acceptable; some applications, however, | |||
require finer control. For example, in some Content Distribution | require finer control. For example, in some Content Distribution | |||
Networks (CDNs) every endpoint is expected to handle a well-defined | Networks (CDNs), every endpoint is expected to handle a well-defined | |||
subset of the client population. With source-specific routing, it is | subset of the client population. With source-specific routing, it is | |||
possible for each member of the anycast group to announce a route | possible for each member of the anycast group to announce a route | |||
specific to its client population, a technique that is both simpler | specific to its client population, a technique that is both simpler | |||
and more robust than manually tweaking the routing protocol's metric | and more robust than manually tweaking the routing protocol's metric | |||
("prepending" in BGP). | ("prepending" in BGP). | |||
1.3. Specificity of prefix pairs | 1.3. Specificity of Prefix Pairs | |||
In ordinary next-hop routing, when multiple routing table entries | In ordinary next-hop routing, when multiple routing table entries | |||
match the destination of a packet, the "longest prefix rule" mandates | match the destination of a packet, the "longest prefix rule" mandates | |||
that the most specific one applies. The reason why this rule makes | that the most specific entry applies. The reason why this rule makes | |||
sense is that the set of prefixes has the following "tree property": | sense is that the set of prefixes has the following "tree property": | |||
for any prefixes P and P', either P and P' are disjoint, or one is | For any prefixes P and P', either P and P' are disjoint, or one is | |||
more specific than the other. | more specific than the other. | |||
It would be a natural proposition to order pairs of prefixes | It would be a natural proposition to order pairs of prefixes | |||
pointwise: to define that (D,S) is more specific than (D',S') when D | pointwise: to define that (D,S) is more specific than (D',S') when D | |||
is more specific than D and S is more specific than S'. | is more specific than D and S is more specific than S'. | |||
Unfortunately, the set of pairs of prefixes with the pointwise | Unfortunately, the set of pairs of prefixes with the pointwise | |||
ordering doesn't satisfy the tree property. Indeed, consider the | ordering doesn't satisfy the tree property. Indeed, consider the | |||
following two pairs: | following two pairs: | |||
(2001:db8:0:1::/64, ::/0) and (::/0, 2001:db8:0:2::/64) | (2001:db8:0:1::/64, ::/0) and (::/0, 2001:db8:0:2::/64) | |||
These two pairs are not disjoint (a packet with destination | These two pairs are not disjoint (a packet with destination | |||
2001:db8:0:1::1 and source 2001:db8:0:2::1 is matched by both), but | 2001:db8:0:1::1 and source 2001:db8:0:2::1 is matched by both), but | |||
neither is more specific than the other. The effect is that there is | neither is more specific than the other. The effect is that there is | |||
no natural unambiguous way to interpret a routing table such as the | no natural, unambiguous way to interpret a routing table such as the | |||
following: | following: | |||
destination source next-hop | destination source next-hop | |||
2001:db8:0:1::/64 ::/0 A | 2001:db8:0:1::/64 ::/0 A | |||
::/0 2001:db8:0:2::/64 B | ::/0 2001:db8:0:2::/64 B | |||
A more refined ordering over pairs of prefixes is required in order | A finer ordering of pairs of prefixes is required in order to avoid | |||
to avoid all ambiguities. There are two natural choices: the | all ambiguities. There are two natural choices: destination-first | |||
destination-first ordering, where (D,S) is more specific than (D',S') | ordering, where (D,S) is more specific than (D',S') when | |||
when | ||||
* D is strictly more specific than D'; or | * D is strictly more specific than D', or | |||
* D = D' and S is more specific than S', | * D = D', and S is more specific than S' | |||
and, symmetrically, the source-first ordering, in which sources are | ||||
and, symmetrically, source-first ordering, in which sources are | ||||
compared first and destinations second. | compared first and destinations second. | |||
Expedient as it would be to leave the choice to the implementation, | Expedient as it would be to leave the choice to the implementation, | |||
this is not possible: all routers in a routing domain must use the | this is not possible: all routers in a routing domain must use the | |||
same ordering, lest persistent routing loops occur. Indeed, consider | same ordering lest persistent routing loops occur. Indeed, consider | |||
the following topology: | the following topology: | |||
A --- B --- C --- D | A --- B --- C --- D | |||
Suppose that A announces a route for (::/0, 2001:db8:0:2::/64), while | Suppose that A announces a route for (::/0, 2001:db8:0:2::/64), while | |||
D announces a route for (2001:db8:0:1::/64, ::/0). Suppose further | D announces a route for (2001:db8:0:1::/64, ::/0). Suppose further | |||
that B uses the destination-first ordering, while C uses the source- | that B uses destination-first ordering while C uses source-first | |||
first ordering. Then a packet that matches both routes, say, with | ordering. Then a packet that matches both routes, say, with | |||
destination 2001:db8:0:1::1 and source 2001:db8:0:2::1, would be sent | destination 2001:db8:0:1::1 and source 2001:db8:0:2::1, would be sent | |||
by B towards D and by C towards A, and would therefore loop | by B towards D and by C towards A and would therefore loop | |||
indefinitely between B and C. | indefinitely between B and C. | |||
This document mandates (Section 4) that all routers use the | This document mandates (Section 4) that all routers use destination- | |||
destination-first ordering, which is generally believed to be more | first ordering, which is generally believed to be more useful than | |||
useful than the source-first ordering. Consider the following | source-first ordering. Consider the following topology, where A is | |||
topology, where A is an edge router connected to the Internet and B | an edge router connected to the Internet and B is an internal router | |||
is an internal router connected to an access network N: | connected to an access network N: | |||
(::/0, S) (D, ::/0) | (::/0, S) (D, ::/0) | |||
Internet --- A --- B --- N | Internet --- A --- B --- N | |||
A announces a source-specific default route with source S (::/0, S), | A announces a source-specific default route with source S (::/0, S), | |||
while B announces a non-specific route to prefix D. Consider what | while B announces a nonspecific route to prefix D. Consider what | |||
happens to a packet with a desination in D and a source in S. With | happens to a packet with a destination in D and a source in S. With | |||
the destination-first ordering, the packet is routed towards the | destination-first ordering, the packet is routed towards the network | |||
network N, which is the only way it can possibly reach its | N, which is the only way it can possibly reach its destination. With | |||
destination. With the source-first ordering, on the other hand, the | source-first ordering, on the other hand, the packet is sent towards | |||
packet is sent towards the Internet, with no hope to ever reach its | the Internet, with no hope of ever reaching its destination in N. | |||
destination in N. | ||||
2. Specification of Requirements | 2. Specification of Requirements | |||
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 | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 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. Data Structures | 3. Data Structures | |||
A number of the conceptual data structures described in Section 3.2 | A number of the conceptual data structures described in Section 3.2 | |||
of [RFC8966] contain a destination prefix. This specification | of [RFC8966] contain a destination prefix. This specification | |||
extends these data structures with a source prefix. Data from the | extends these data structures with a source prefix. Data from the | |||
original protocol, which do not specify a source prefix, are stored | original protocol, which do not specify a source prefix, are stored | |||
with a zero length source prefix, which matches exactly the same set | with a zero-length source prefix, which matches the exact same set of | |||
of packets as the original, non-source-specific data. | packets as the original, non-source-specific data. | |||
3.1. The Source Table | 3.1. The Source Table | |||
Every Babel node maintains a source table, as described in [RFC8966] | Every Babel node maintains a source table, as described in [RFC8966], | |||
Section 3.2.5. A source-specific Babel node extends this table with | Section 3.2.5. A source-specific Babel node extends this table with | |||
the following field: | the following field: | |||
* The source prefix (sprefix, splen) specifying the source address | * The source prefix (sprefix, splen) specifying the source address | |||
of packets to which this entry applies. | of packets to which this entry applies. | |||
The source table is now indexed by 5-tuples of the form (prefix, | The source table is now indexed by 5-tuples of the form (prefix, | |||
plen, sprefix, splen, router-id). | plen, sprefix, splen, router-id). | |||
Note that the route entry contains a source (see sections 2 and 3.2.5 | Note that the route entry contains a source (see Sections 2 and 3.2.5 | |||
of [RFC8966]) which itself contains both destination and source | of [RFC8966]) that itself contains both destination and source | |||
prefixes. These are two different concepts, and must not be | prefixes. These are two different concepts and must not be confused. | |||
confused. | ||||
3.2. The Route Table | 3.2. The Route Table | |||
Every Babel node maintains a route table, as described in [RFC8966] | Every Babel node maintains a route table, as described in [RFC8966], | |||
Section 3.2.6. Each route table entry contains, among other data, a | Section 3.2.6. Each route table entry contains, among other data, a | |||
source, which this specification extends with a source prefix as | source, which this specification extends with a source prefix as | |||
described above. The route table is now indexed by 5-tuples of the | described above. The route table is now indexed by 5-tuples of the | |||
form (prefix, plen, sprefix, splen, neighbour), where the first four | form (prefix, plen, sprefix, splen, neighbour), where the first four | |||
components are obtained from the source. | components are obtained from the source. | |||
3.3. The Table of Pending Seqno Requests | 3.3. The Table of Pending Seqno Requests | |||
Every Babel node maintains a table of pending seqno requests, as | Every Babel node maintains a table of pending seqno requests, as | |||
described in [RFC8966], Section 3.2.7. A source-specific Babel node | described in [RFC8966], Section 3.2.7. A source-specific Babel node | |||
extends this table with the following entry: | extends this table with the following entry: | |||
* The source prefix (sprefix, splen) being requested. | * The source prefix (sprefix, splen) being requested. | |||
The table of pending seqno requests is now indexed by 5-tuples of the | The table of pending seqno requests is now indexed by 5-tuples of the | |||
form (prefix, plen, sprefix, splen, router-id). | form (prefix, plen, sprefix, splen, router-id). | |||
4. Data Forwarding | 4. Data Forwarding | |||
As noted in Section 1.3 above, source-specific tables can, in | As noted in Section 1.3, source-specific tables can, in general, be | |||
general, be ambiguous, and all routers in a routing domain must use | ambiguous, and all routers in a routing domain must use the same | |||
the same algorithm for choosing applicable routes. An implementation | algorithm for choosing applicable routes. An implementation of the | |||
of the extension described in this document MUST choose routing table | extension described in this document MUST choose routing table | |||
entries by using the destination-first ordering, where a routing | entries by using destination-first ordering, where routing table | |||
table entry R1 is preferred to a routing table entry R2 when either | entry R1 is preferred to routing table entry R2 when either R1's | |||
R1's destination prefix is more specific than R2's, or the | destination prefix is more specific than R2's or the destination | |||
destination prefixes are equal and R1's source prefix is more | prefixes are equal and R1's source prefix is more specific than R2's. | |||
specific than R2's. | ||||
In practice, this means that a source-specific Babel implementation | In practice, this means that a source-specific Babel implementation | |||
must take care that any lower layer that performs packet forwarding | must take care that any lower layer that performs packet forwarding | |||
obey this semantics. More precisely: | obey these semantics. More precisely: | |||
* if the lower layers implement the destination-first ordering, then | * if the lower layers implement destination-first ordering, then the | |||
the Babel implementation SHOULD use them directly; | Babel implementation SHOULD use them directly; | |||
* if the lower layers can hold source-specific routes, but not with | * if the lower layers can hold source-specific routes but not with | |||
the right semantics, then the Babel implementation MUST either | the right semantics, then the Babel implementation MUST either | |||
silently ignore any source-specific routes, or disambiguate the | silently ignore any source-specific routes or disambiguate the | |||
routing table by using a suitable disambiguation algorithm (see | routing table by using a suitable disambiguation algorithm (see | |||
Section V.B of [SS-ROUTING] for such an algorithm); | Section V.B of [SS-ROUTING] for such an algorithm); | |||
* if the lower layers cannot hold source-specific routes, then a | * if the lower layers cannot hold source-specific routes, then a | |||
Babel implementation MUST silently ignore any source-specific | Babel implementation MUST silently ignore any source-specific | |||
routes. | routes. | |||
5. Protocol Operation | 5. Protocol Operation | |||
This extension does not fundamentally change the operation of the | This extension does not fundamentally change the operation of the | |||
Babel protocol, and we therefore only describe differences between | Babel protocol, and we therefore only describe differences between | |||
the original protocol and the extended protocol. | the original protocol and the extended protocol. | |||
In the original protocol, three TLVs carry a destination prefix: | In the original protocol, three TLVs carry a destination prefix: | |||
Updates, Route Requests and Seqno Requests. This specification | Update, Route Request, and Seqno Request TLVs. This specification | |||
extends these messages so that they may carry a Source Prefix sub- | extends these messages so that they may carry a Source Prefix sub- | |||
TLV, as described in Section 7 below. The sub-TLV is marked as | TLV, as described in Section 7. The sub-TLV is marked as mandatory | |||
mandatory, so that an unextended implementation will silently ignore | so that an unextended implementation will silently ignore the whole | |||
the whole enclosing TLV. A node obeying this specification MUST NOT | enclosing TLV. A node obeying this specification MUST NOT send a TLV | |||
send a TLV with a zero-length source prefix: instead, it sends a TLV | with a zero-length source prefix; instead, it sends a TLV with no | |||
with no Source Prefix sub-TLV. Conversely, an extended | Source Prefix sub-TLV. Conversely, an extended implementation MUST | |||
implementation MUST interpret an unextended TLV as carrying a source | interpret an unextended TLV as carrying a source prefix of zero | |||
prefix of zero length. Taken together, these properties ensure | length. Taken together, these properties ensure interoperability | |||
interoperability between the original and extended protocols (see | between the original and extended protocols (see Section 6). | |||
Section 6 below). | ||||
5.1. Protocol Messages | 5.1. Protocol Messages | |||
This extension allows three TLVs of the original Babel protocol to | This extension allows three TLVs of the original Babel protocol to | |||
carry a source prefix: Update TLVs, Route Request TLVs, and Seqno | carry a source prefix: Update TLVs, Route Request TLVs, and Seqno | |||
Request TLVs. | Request TLVs. | |||
In order to advertise a route with a non-zero length source prefix, a | In order to advertise a route with a non-zero length source prefix, a | |||
node sends a source-specific Update, i.e., an Update with a Source | node sends a source-specific update, i.e., an update with a Source | |||
Prefix sub-TLV. When a node receives a source-specific Update | Prefix sub-TLV. When a node receives a source-specific update | |||
(prefix, source prefix, router-id, seqno, metric) from a neighbour | (prefix, source prefix, router-id, seqno, metric) from a neighbour | |||
neigh, it behaves as described in [RFC8966] Section 3.5.3, except | neigh, it behaves as described in [RFC8966], Section 3.5.3, except | |||
that the entry under consideration is indexed by (prefix, plen, | that the entry under consideration is indexed by (prefix, plen, | |||
sprefix, splen, neigh) rather than just (prefix, plen, neigh). | sprefix, splen, neigh) rather than just (prefix, plen, neigh). | |||
Similarly, when a node needs to send a Request of either kind that | Similarly, when a node needs to send a request of either kind that | |||
applies to a route with a non-zero length source prefix, it sends a | applies to a route with a non-zero length source prefix, it sends a | |||
source-specific Request, i.e., a Request with a Source Prefix sub- | source-specific request, i.e., a request with a Source Prefix sub- | |||
TLV. When a node receives a source-specific Request, it behaves as | TLV. When a node receives a source-specific request, it behaves as | |||
described in Section 3.8 of [RFC8966], except that the request | described in Section 3.8 of [RFC8966], except that the request | |||
applies to the Route Table entry carrying the source prefix indicated | applies to the route table entry carrying the source prefix indicated | |||
by the Source Prefix sub-TLV. | by the Source Prefix sub-TLV. | |||
5.2. Wildcard Messages | 5.2. Wildcard Messages | |||
In the original protocol, the Address Encoding (AE) value 0 is used | In the original protocol, the address encoding (AE) value 0 is used | |||
for wildcard messages: messages that apply to all routes, of any | for wildcard messages: messages that apply to all routes of any | |||
address family and with any destination prefix. Wildcard messages | address family and with any destination prefix. Wildcard messages | |||
are allowed in two places in the protocol: wildcard retractions are | are allowed in two places in the protocol: wildcard retractions are | |||
used to retract all of the routes previously advertised by a node on | used to retract all of the routes previously advertised by a node on | |||
a given interface, and wildcard Route Requests are used to request a | a given interface, and wildcard route requests are used to request a | |||
full dump of the Route Table from a given node. Wildcard messages | full dump of the route table from a given node. Wildcard messages | |||
are intended to apply to all routes, including routes decorated with | are intended to apply to all routes, including routes decorated with | |||
additional data and AE values to be defined by future extensions, and | additional data and AE values to be defined by future extensions; | |||
hence this specification extends wildcard operations to apply to all | hence, this specification extends wildcard operations to apply to all | |||
routes, whatever the value of the source prefix. | routes, whatever the value of the source prefix. | |||
More precisely, a node receiving an Update with the AE field set to 0 | More precisely, a node receiving an update with the AE field set to 0 | |||
and the Metric field set to infinity (a wildcard retraction) MUST | and the Metric field set to infinity (a wildcard retraction) MUST | |||
apply the route acquisition procedure described in Section 3.5.3 of | apply the route acquisition procedure described in Section 3.5.3 of | |||
[RFC8966] to all of the routes that it has learned from the sending | [RFC8966] to all of the routes that it has learned from the sending | |||
node, whatever the value of the source prefix. A node MUST NOT send | node, whatever the value of the source prefix. A node MUST NOT send | |||
a wildcard retraction with an attached source prefix, and a node that | a wildcard retraction with an attached source prefix, and a node that | |||
receives a wildcard retraction with a source prefix MUST ignore the | receives a wildcard retraction with a source prefix MUST ignore the | |||
retraction. | retraction. | |||
Similarly, a node that receives a route request with the AE field set | Similarly, a node that receives a route request with the AE field set | |||
to 0 (a wildcard route request) SHOULD send a full routing table | to 0 (a wildcard route request) SHOULD send a full routing table | |||
dump, including routes with a non-zero length source prefix. A node | dump, including routes with a non-zero length source prefix. A node | |||
MUST NOT send a wildcard request that carries a source prefix, and a | MUST NOT send a wildcard request that carries a source prefix, and a | |||
node receiving a wildcard request with a source prefix MUST ignore | node receiving a wildcard request with a source prefix MUST ignore | |||
the request. | the request. | |||
6. Compatibility with the base protocol | 6. Compatibility with the Base Protocol | |||
The protocol extension defined in this document is, to a great | The protocol extension defined in this document is, to a great | |||
extent, interoperable with the base protocol defined in [RFC8966] | extent, interoperable with the base protocol defined in [RFC8966] | |||
(and all previously standardised extensions). More precisely, if | (and all previously standardised extensions). More precisely, if | |||
non-source-specific routers and source-specific routers are mixed in | non-source-specific routers and source-specific routers are mixed in | |||
a single routing domain, Babel's loop-avoidance properties are | a single routing domain, Babel's loop-avoidance properties are | |||
preserved, and, in particular, no persistent routing loops will | preserved, and, in particular, no persistent routing loops will | |||
occur. | occur. | |||
However, this extension is encoded using mandatory sub-TLVs, | However, this extension is encoded using mandatory sub-TLVs, | |||
introduced in [RFC8966], and therefore is not compatible with the | introduced in [RFC8966], and therefore is not compatible with the | |||
older version of the Babel Routing Protocol [RFC6126] which does not | older version of the Babel routing protocol [RFC6126], which does not | |||
support mandatory sub-TLVs. Consequently, this extension MUST NOT be | support mandatory sub-TLVs. Consequently, this extension MUST NOT be | |||
used in a routing domain in which some routers implement RFC 6126, | used in a routing domain in which some routers implement [RFC6126]; | |||
otherwise persistent routing loops may occur. | otherwise, persistent routing loops may occur. | |||
6.1. Starvation and Blackholes | 6.1. Starvation and Blackholes | |||
In general, the discarding of source-specific routes by non-source- | In general, the discarding of source-specific routes by non-source- | |||
specific routers will cause route starvation. Intuitively, unless | specific routers will cause route starvation. Intuitively, unless | |||
there are enough non-source-specific routes in the network, non- | there are enough non-source-specific routes in the network, non- | |||
source-specific routers will suffer starvation, and discard packets | source-specific routers will suffer starvation and discard packets | |||
for destinations that are only announced by source-specific routers. | for destinations that are only announced by source-specific routers. | |||
In the common case where all source-specific routes are originated at | In the common case where all source-specific routes are originated at | |||
one of a small set of edge routers, a simple yet sufficient condition | one of a small set of edge routers, a simple yet sufficient condition | |||
for avoiding starvation is to build a connected source-specific | for avoiding starvation is to build a connected source-specific | |||
backbone that includes all of the edge routers, and announce a non- | backbone that includes all of the edge routers and announce a non- | |||
source-specific default route towards the backbone. | source-specific default route towards the backbone. | |||
7. Protocol Encoding | 7. Protocol Encoding | |||
This extension defines a new sub-TLV used to carry a source prefix: | This extension defines a new sub-TLV used to carry a source prefix: | |||
the Source Prefix sub-TLV. It can be used within an Update, a Route | the Source Prefix sub-TLV. It can be used within an Update, Route | |||
Request or a Seqno Request TLV to match a source-specific entry of | Request, or Seqno Request TLV to match a source-specific entry of the | |||
the Route Table, in conjunction with the destination prefix natively | route table in conjunction with the destination prefix natively | |||
carried by these TLVs. | carried by these TLVs. | |||
Since a source-specific routing entry is characterized by a single | Since a source-specific routing entry is characterised by a single | |||
destination prefix and a single source prefix, a source-specific | destination prefix and a single source prefix, a source-specific | |||
contains message exactly one Source Prefix sub-TLV. A node MUST NOT | message contains exactly one Source Prefix sub-TLV. A node MUST NOT | |||
send more than one Source Prefix sub-TLV in a TLV, and a node | send more than one Source Prefix sub-TLV in a TLV, and a node | |||
receiving more than one Source Prefix sub-TLV in a single TLV MUST | receiving more than one Source Prefix sub-TLV in a single TLV MUST | |||
ignore the TLV. It MAY ignore the whole packet. | ignore the TLV. It MAY ignore the whole packet. | |||
7.1. Source Prefix sub-TLV | 7.1. Source Prefix Sub-TLV | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 128 | Length | Source Plen | Source Prefix... | | Type = 128 | Length | Source Plen | Source Prefix... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
Fields: | Fields: | |||
Type Set to 128 to indicate a Source Prefix sub-TLV. | Type Set to 128 to indicate a Source Prefix sub-TLV. | |||
Length The length of the body, in octets, exclusive of the Type | Length The length of the body, in octets, exclusive of the | |||
and Length fields. | Type and Length fields. | |||
Source Plen The length of the advertised source prefix, in bits. | Source Plen The length of the advertised source prefix, in bits. | |||
This MUST NOT be 0. | This MUST NOT be 0. | |||
Source Prefix The source prefix being advertised. This field's size | Source Prefix The source prefix being advertised. This field's size | |||
is (Source Plen)/8 octets rounded upwards. | is (Source Plen)/8 octets rounded upwards. | |||
The length of the body TLV is normally of size 1+(Source Plen)/8 | The length of the body TLV is normally of size 1+(Source Plen)/8 | |||
rounded upwards. If the Length field indicates a length smaller than | rounded upwards. If the Length field indicates a length smaller than | |||
that, then the sub-TLV is corrupt, and the whole enclosing TLV must | that, then the sub-TLV is corrupt, and the whole enclosing TLV must | |||
be ignored; if the Length field indicates a length that is larger, | be ignored; if the Length field indicates a length that is larger, | |||
then the extra octets contained in the sub-TLV MUST be silently | then the extra octets contained in the sub-TLV MUST be silently | |||
ignored. | ignored. | |||
The contents of the Source Prefix sub-TLV are interpreted according | The contents of the Source Prefix sub-TLV are interpreted according | |||
to the AE of the enclosing TLV. If a TLV with AE equal to 0 contains | to the AE of the enclosing TLV. If a TLV with AE equal to 0 contains | |||
a Source Prefix sub-TLV, then the whole enclosing TLV MUST be | a Source Prefix sub-TLV, then the whole enclosing TLV MUST be | |||
ignored. If a TLV contains multiple Source Prefix sub-TLVs, then the | ignored. If a TLV contains multiple Source Prefix sub-TLVs, then the | |||
whole TLV MUST be ignored. | whole TLV MUST be ignored. | |||
Note that this sub-TLV is a mandatory sub-TLV. Therefore, as | Note that this sub-TLV is a mandatory sub-TLV. Therefore, as | |||
described in Section 4.4 of [RFC8966], the whole TLV MUST be ignored | described in Section 4.4 of [RFC8966], the whole TLV MUST be ignored | |||
if that sub-TLV is not understood (or malformed). | if that sub-TLV is not understood (or malformed). | |||
7.2. Source-specific Update | 7.2. Source-Specific Update | |||
The source-specific Update is an Update TLV with a Source Prefix sub- | The source-specific update is an Update TLV with a Source Prefix sub- | |||
TLV. It advertises or retracts source-specific routes in the same | TLV. It advertises or retracts source-specific routes in the same | |||
manner as routes with non-source-specific Updates (see [RFC8966]). A | manner as routes with non-source-specific updates (see [RFC8966]). A | |||
wildcard retraction (Update with AE equal to 0) MUST NOT carry a | wildcard retraction (update with AE equal to 0) MUST NOT carry a | |||
Source Prefix sub-TLV. | Source Prefix sub-TLV. | |||
Babel uses a stateful compression scheme to reduce the size taken by | Babel uses a stateful compression scheme to reduce the size taken by | |||
destination prefixes in update TLVs (see Section 4.5 of [RFC8966]). | destination prefixes in Update TLVs (see Section 4.5 of [RFC8966]). | |||
The source prefix defined by this extension is not compressed. On | The source prefix defined by this extension is not compressed. On | |||
the other hand, compression is allowed for the destination prefixes | the other hand, compression is allowed for the destination prefixes | |||
carried by source-specific updates. As described in Section 4.5 of | carried by source-specific updates. As described in Section 4.5 of | |||
[RFC8966], unextended implementations will correctly update their | [RFC8966], unextended implementations will correctly update their | |||
parser state while otherwise ignoring the whole TLV. | parser state while otherwise ignoring the whole TLV. | |||
7.3. Source-specific Route Request | 7.3. Source-Specific Route Request | |||
A source-specific Route Request is a Route Request TLV with a Source | A source-specific route request is a Route Request TLV with a Source | |||
Prefix sub-TLV. It prompts the receiver to send an update for a | Prefix sub-TLV. It prompts the receiver to send an update for a | |||
given pair of destination and source prefixes, as described in | given pair of destination and source prefixes, as described in | |||
Section 3.8.1.1 of [RFC8966]. A wildcard request (Route Request with | Section 3.8.1.1 of [RFC8966]. A wildcard request (route request with | |||
AE equals to 0) MUST NOT carry a Source Prefix sub-TLV; if a wildcard | AE equal to 0) MUST NOT carry a Source Prefix sub-TLV; if a wildcard | |||
request with a Source Prefix sub-TLV is received, then the request | request with a Source Prefix sub-TLV is received, then the request | |||
MUST be ignored. | MUST be ignored. | |||
7.4. Source-Specific Seqno Request | 7.4. Source-Specific Seqno Request | |||
A source-specific Seqno Request is a Seqno Request TLV with a Source | A source-specific seqno request is a Seqno Request TLV with a Source | |||
Prefix sub-TLV. It requests the receiving node to perform the | Prefix sub-TLV. It requests that the receiving node perform the | |||
procedure described in Section 3.8.1.2 of [RFC8966], but applied to a | procedure described in Section 3.8.1.2 of [RFC8966] but applied to a | |||
pair of a destination and source prefix. | pair consisting of a destination and source prefix. | |||
8. IANA Considerations | 8. IANA Considerations | |||
IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV | IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV | |||
in the Babel sub-TLV types registry. | in the "Babel Sub-TLV Types" registry. | |||
9. Security considerations | 9. Security Considerations | |||
The extension defined in this document adds a new sub-TLV to three | The extension defined in this document adds a new sub-TLV to three | |||
sub-TLVs already present in the original Babel protocol, and does not | sub-TLVs already present in the original Babel protocol and does not | |||
change the security properties of the protocol itself. However, the | change the security properties of the protocol itself. However, the | |||
additional flexibility provided by source-specific routing might | additional flexibility provided by source-specific routing might | |||
invalidate the assumptions made by some network administrators, which | invalidate the assumptions made by some network administrators, which | |||
could conceivably lead to security issues. | could conceivably lead to security issues. | |||
For example, a network administrator might be tempted to abuse route | For example, a network administrator might be tempted to abuse route | |||
filtering (Appendix C of [RFC8966]) as a security mechanism. Unless | filtering (Appendix C of [RFC8966]) as a security mechanism. Unless | |||
the filtering rules are designed to take source-specific routing into | the filtering rules are designed to take source-specific routing into | |||
account, they might be bypassed by a source-specific route, which | account, they might be bypassed by a source-specific route, which | |||
might cause traffic to reach a portion of a network that was thought | might cause traffic to reach a portion of a network that was thought | |||
to be protected. A network administrator might also assume that no | to be protected. A network administrator might also assume that no | |||
route is more specific than a host route, and use a host route in | route is more specific than a host route and use a host route in | |||
order to direct traffic for a given destination through a security | order to direct traffic for a given destination through a security | |||
device (e.g., a firewall); source-specific routing invalidates this | device (e.g., a firewall); source-specific routing invalidates this | |||
assumption, and in some topologies announcing a source-specific route | assumption, and, in some topologies, announcing a source-specific | |||
might conceivably be used to bypass the security device. | route might conceivably be used to bypass the security device. | |||
10. Acknowledgments | 10. References | |||
The authors are indebted to Donald Eastlake, Joel Halpern, and Toke | 10.1. Normative References | |||
Hoiland-Jorgensen for their help with this document. | ||||
11. References | [BCP84] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | |||
Networks", BCP 84, RFC 3704, March 2004. | ||||
11.1. Normative References | Sriram, K., Montgomery, D., and J. Haas, "Enhanced | |||
Feasible-Path Unicast Reverse Path Forwarding", BCP 84, | ||||
RFC 8704, February 2020. | ||||
[BCP84] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | <https://www.rfc-editor.org/info/bcp84> | |||
Networks", BCP 84, RFC 3704, March 2004, | ||||
<https://www.rfc-editor.org/rfc/rfc3704>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[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/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8966] Chroboczek, J. and D. Schinazi, "The Babel Routing | [RFC8966] Chroboczek, J. and D. Schinazi, "The Babel Routing | |||
Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021, | Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8966>. | <https://www.rfc-editor.org/info/rfc8966>. | |||
11.2. Informative References | 10.2. Informative References | |||
[RFC3484] Draves, R., "Default Address Selection for Internet | ||||
Protocol version 6 (IPv6)", RFC 3484, | ||||
DOI 10.17487/RFC3484, February 2003, | ||||
<https://www.rfc-editor.org/info/rfc3484>. | ||||
[RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | |||
RFC 4960, DOI 10.17487/RFC4960, September 2007, | RFC 4960, DOI 10.17487/RFC4960, September 2007, | |||
<https://www.rfc-editor.org/info/rfc4960>. | <https://www.rfc-editor.org/info/rfc4960>. | |||
[RFC6126] Chroboczek, J., "The Babel Routing Protocol", RFC 6126, | [RFC6126] Chroboczek, J., "The Babel Routing Protocol", RFC 6126, | |||
DOI 10.17487/RFC6126, April 2011, | DOI 10.17487/RFC6126, April 2011, | |||
<https://www.rfc-editor.org/info/rfc6126>. | <https://www.rfc-editor.org/info/rfc6126>. | |||
[RFC6724] Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, | ||||
"Default Address Selection for Internet Protocol Version 6 | ||||
(IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012, | ||||
<https://www.rfc-editor.org/info/rfc6724>. | ||||
[RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | |||
Better Connectivity Using Concurrency", RFC 8305, | Better Connectivity Using Concurrency", RFC 8305, | |||
DOI 10.17487/RFC8305, December 2017, | DOI 10.17487/RFC8305, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8305>. | <https://www.rfc-editor.org/info/rfc8305>. | |||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
<https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
[RFC8684] Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C. | [RFC8684] Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C. | |||
Paasch, "TCP Extensions for Multipath Operation with | Paasch, "TCP Extensions for Multipath Operation with | |||
Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March | Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March | |||
2020, <https://www.rfc-editor.org/info/rfc8684>. | 2020, <https://www.rfc-editor.org/info/rfc8684>. | |||
[SS-ROUTING] | [SS-ROUTING] | |||
Boutier, M. and J. Chroboczek, "Source-Specific Routing", | Boutier, M. and J. Chroboczek, "Source-Specific Routing", | |||
August 2014, <http://arxiv.org/pdf/1403.0445>. In Proc. | IFIP Networking Conference, | |||
IFIP Networking 2015. | DOI 10.1109/IFIPNetworking.2015.7145305, May 2015, | |||
<http://arxiv.org/pdf/1403.0445>. | ||||
Acknowledgments | ||||
The authors are indebted to Donald Eastlake, Joel Halpern, and Toke | ||||
Hoiland-Jorgensen for their help with this document. | ||||
Authors' Addresses | Authors' Addresses | |||
Matthieu Boutier | Matthieu Boutier | |||
IRIF, University of Paris | IRIF, University of Paris | |||
Case 7014 | Case 7014 | |||
75205 Paris Cedex 13 | 75205 Paris Cedex 13 | |||
France | France | |||
Email: boutier@irif.fr | Email: boutier@irif.fr | |||
End of changes. 88 change blocks. | ||||
205 lines changed or deleted | 204 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/ |