draft-ietf-babel-source-specific-07.txt | draft-ietf-babel-source-specific-08.txt | |||
---|---|---|---|---|
Network Working Group M. Boutier | Network Working Group M. Boutier | |||
Internet-Draft J. Chroboczek | Internet-Draft J. Chroboczek | |||
Intended status: Standards Track IRIF, University of Paris-Diderot | Intended status: Standards Track IRIF, University of Paris | |||
Expires: May 1, 2021 October 28, 2020 | Expires: 23 October 2021 21 April 2021 | |||
Source-Specific Routing in Babel | Source-Specific Routing in Babel | |||
draft-ietf-babel-source-specific-07 | 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 and their | |||
source address. This document describes an extension for source- | source address. This document describes an extension for source- | |||
specific routing to the Babel routing protocol. | specific routing to the Babel routing protocol. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 34 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on May 1, 2021. | This Internet-Draft will expire on 23 October 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 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 | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction and background . . . . . . . . . . . . . . . . . 2 | 1. Introduction and background . . . . . . . . . . . . . . . . . 2 | |||
2. Specification of Requirements . . . . . . . . . . . . . . . . 3 | 1.1. Application to multihoming . . . . . . . . . . . . . . . 3 | |||
3. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Other applications . . . . . . . . . . . . . . . . . . . 4 | |||
3.1. The Source Table . . . . . . . . . . . . . . . . . . . . 3 | 1.3. Specificity of prefix pairs . . . . . . . . . . . . . . . 5 | |||
3.2. The Route Table . . . . . . . . . . . . . . . . . . . . . 4 | 2. Specification of Requirements . . . . . . . . . . . . . . . . 6 | |||
3.3. The Table of Pending Seqno Requests . . . . . . . . . . . 4 | 3. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4. Data Forwarding . . . . . . . . . . . . . . . . . . . . . . . 4 | 3.1. The Source Table . . . . . . . . . . . . . . . . . . . . 7 | |||
5. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. The Route Table . . . . . . . . . . . . . . . . . . . . . 7 | |||
5.1. Protocol Messages . . . . . . . . . . . . . . . . . . . . 6 | 3.3. The Table of Pending Seqno Requests . . . . . . . . . . . 7 | |||
5.2. Wildcard Messages . . . . . . . . . . . . . . . . . . . . 6 | 4. Data Forwarding . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
6. Compatibility with the base protocol . . . . . . . . . . . . 7 | 5. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | |||
6.1. Loop-avoidance . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Protocol Messages . . . . . . . . . . . . . . . . . . . . 9 | |||
6.2. Starvation and Blackholes . . . . . . . . . . . . . . . . 8 | 5.2. Wildcard Messages . . . . . . . . . . . . . . . . . . . . 9 | |||
7. Protocol Encoding . . . . . . . . . . . . . . . . . . . . . . 8 | 6. Compatibility with the base protocol . . . . . . . . . . . . 10 | |||
7.1. Source Prefix sub-TLV . . . . . . . . . . . . . . . . . . 8 | 6.1. Starvation and Blackholes . . . . . . . . . . . . . . . . 10 | |||
7.2. Source-specific Update . . . . . . . . . . . . . . . . . 9 | 7. Protocol Encoding . . . . . . . . . . . . . . . . . . . . . . 10 | |||
7.3. Source-specific (Route) Request . . . . . . . . . . . . . 9 | 7.1. Source Prefix sub-TLV . . . . . . . . . . . . . . . . . . 11 | |||
7.4. Source-Specific Seqno Request . . . . . . . . . . . . . . 9 | 7.2. Source-specific Update . . . . . . . . . . . . . . . . . 12 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 7.3. Source-specific Route Request . . . . . . . . . . . . . . 12 | |||
9. Security considerations . . . . . . . . . . . . . . . . . . . 10 | 7.4. Source-Specific Seqno Request . . . . . . . . . . . . . . 12 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 12 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 11 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 13 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
1. Introduction and background | 1. Introduction and background | |||
The Babel routing protocol [BABEL] 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 which maps destination prefixes to next | |||
hops. The forwarding decision is a per-packet operation which | hops. The forwarding decision is a per-packet operation which | |||
depends on the destination address of the packets and on the entries | depends on the destination address of the packets and on the entries | |||
of the forwarding table. When a packet is about to be routed, its | of the 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 | ||||
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 | ||||
neighbouring router B has selected the route BC...Z. Second, the | ||||
only criterion used by a router to choose a route is the destination | ||||
address: two packets with the same destination follow the same route. | ||||
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, | ||||
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. The | source addresses to be routed following different paths. | |||
forwarding tables are extended to map pairs of prefixes (destination, | ||||
source) to next hops. When multiple entries match a given packet, | ||||
the one with the most specific destination prefix is chosen, and, in | ||||
the case of equally specific destination prefixes, the one with the | ||||
most specific source prefix. | ||||
The main application of source-specific routing is a form of | ||||
multihoming known as multihoming with multiple addresses. When using | ||||
this technique in a network connected to multiple providers, every | ||||
host is assigned multiple addresses, one per provider. When a host | ||||
sources a packet, it picks one of its addresses as the source | ||||
address, and source-specific routing is used to route the packet to | ||||
an edge router that is connected to the corresponding provider, which | ||||
is compatible with [BCP84]. Unlike classical multihoming, this | ||||
technique is applicable to small networks, as it does not require the | ||||
use of provider-independent addresses, or cause excessive growth of | ||||
the global routing table. More details are given in [SS-ROUTING]. | ||||
This document describes a source-specific routing extension for the | This document describes a source-specific routing extension for the | |||
Babel routing protocol [BABEL]. 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 with | |||
a source prefix. The source prefix is encoded using a mandatory sub- | a source prefix. The source prefix is encoded using a mandatory sub- | |||
TLV ([BABEL] Section 4.4). | TLV ([RFC8966] Section 4.4). | |||
1.1. Application to multihoming | ||||
Multihoming is the practice of connecting a single network to two or | ||||
more transit networks. The main application of source-specific | ||||
routing is a form of multihoming known as "multihoming with multiple | ||||
addresses". | ||||
Classical multihoming consists in assigning a provider-independent | ||||
range of addresses to the multihomed network and announcing it to all | ||||
transit providers. While classical multihoming works well for large | ||||
networks, the cost of obtaining a provider-independent address range | ||||
and announcing it globally in the Internet is prohibitive for small | ||||
networks. Unfortunately, it is not possible to implement classical | ||||
multihoming with ordinary provider-dependent addresses: in a network | ||||
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 | ||||
to A. If it is routed through the edge router connected to B, it | ||||
will most likely be filtered (dropped), in accordance with [BCP84]. | ||||
In multihoming with multiple addresses, every host in the multihomed | ||||
network is assigned multiple addresses, one for each transit | ||||
provider. Additional mechanisms are needed in order (i) to choose, | ||||
for each packet, a source address that is associated with a provider | ||||
that is currently up, and (ii) to route each packet towards the | ||||
router connected to the provider associated with its source address. | ||||
One might argue that multihoming with multiple addresses splits the | ||||
difficult problem of multihoming into two simpler sub-problems. | ||||
The issue of choosing a suitable source address is a decision local | ||||
to the sending host, and an area of active research. The simplest | ||||
solution is to use a traditional transport-layer protocol, such as | ||||
TCP, and to probe all available source addresses at connection time, | ||||
analogously to what is already done with destination addresses, | ||||
either sequentially [RFC3484] or in parallel [RFC8305]. Since the | ||||
transport-layer protocol is not aware of the multiple available | ||||
addresses, flows are interrupted when the selected provider goes down | ||||
(from the point of view of the user, all TCP connections are dropped | ||||
when the network environment changes). A better user experience can | ||||
be provided by making available all of the potential source and | ||||
destination addresses to higher layer protocols, either at the | ||||
transport layer [RFC8684] [RFC4960], or at the applicaton layer | ||||
[RFC8445]. | ||||
Source-specific routing solves the problem of routing a packet to the | ||||
edge router indicated by its source address. Every edge router | ||||
announces into the routing domain a default route specific to the | ||||
prefix associated with the provider it is connected to. This route | ||||
is propagated all the way to the routers on the access link, which | ||||
are therefore able to route every packet to the correct router. | ||||
Hosts simply send packets to their default router -- no host changes | ||||
are necessary at the network layer. | ||||
1.2. Other applications | ||||
In addition to multihoming with multiple addresses, we are aware of | ||||
two applications of source-specific routing. Tunnels and VPNs are | ||||
packet encapsulation techniques that are commonly used in the | ||||
Internet to establish a network-layer topology that is different from | ||||
the physical topology. In some deployments, the default route points | ||||
at the tunnel; this causes the network stack to attempt to send | ||||
encapsulated packets through the tunnel, which causes it to break. | ||||
Various solutions to this problem are possible, the most common of | ||||
which is to point a host route at the tunnel endpoint. | ||||
When source-specific routing is available, it becomes possible to | ||||
announce through the tunnel a default route that is specific to the | ||||
prefix served by the tunnel. Since the encapsulated packets have a | ||||
source address that is not within that prefix, they are not routed | ||||
through the tunnel. | ||||
The third application of source-specific routing is controlled | ||||
anycast. Anycast is a technique in which a single destination | ||||
address is used to represent multiple network endpoints, collectively | ||||
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 | ||||
nearest according to the routing protocol. | ||||
In many applications of anycast, such as DNS root servers, the | ||||
nondeterminism of anycast is acceptable; some applications, however, | ||||
require finer control. For example, in some Content Distribution | ||||
Networks (CDNs) every endpoint is expected to handle a well-defined | ||||
subset of the client population. With source-specific routing, it is | ||||
possible for each member of the anycast group to announce a route | ||||
specific to its client population, a technique that is both simpler | ||||
and more robust than manually tweaking the routing protocol's metric | ||||
("prepending" in BGP). | ||||
1.3. Specificity of prefix pairs | ||||
In ordinary next-hop routing, when multiple routing table entries | ||||
match the destination of a packet, the "longest prefix rule" mandates | ||||
that the most specific one applies. The reason why this rule makes | ||||
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 | ||||
more specific than the other. | ||||
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 | ||||
is more specific than D and S is more specific than S'. | ||||
Unfortunately, the set of pairs of prefixes with the pointwise | ||||
ordering doesn't satisfy the tree property. Indeed, consider the | ||||
following two pairs: | ||||
(2001:db8:0:1::/64, ::/0) and (::/0, 2001:db8:0:2::/64) | ||||
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 | ||||
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 | ||||
following: | ||||
destination source next-hop | ||||
2001:db8:0:1::/64 ::/0 A | ||||
::/0 2001:db8:0:2::/64 B | ||||
A more refined ordering over pairs of prefixes is required in order | ||||
to avoid all ambiguities. There are two natural choices: the | ||||
destination-first ordering, where (D,S) is more specific than (D',S') | ||||
when | ||||
* D is strictly more specific than D'; or | ||||
* D = D' and S is more specific than S', | ||||
and, symmetrically, the source-first ordering, in which sources are | ||||
compared first and destinations second. | ||||
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 | ||||
same ordering, lest persistent routing loops occur. Indeed, consider | ||||
the following topology: | ||||
A --- B --- C --- D | ||||
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 | ||||
that B uses the destination-first ordering, while C uses the source- | ||||
first 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 | ||||
by B towards D and by C towards A, and would therefore loop | ||||
indefinitely between B and C. | ||||
This document mandates (Section 4) that all routers use the | ||||
destination-first ordering, which is generally believed to be more | ||||
useful than the source-first ordering. Consider the following | ||||
topology, where A is an edge router connected to the Internet and B | ||||
is an internal router connected to an access network N: | ||||
(::/0, S) (D, ::/0) | ||||
Internet --- A --- B --- N | ||||
A announces a source-specific default route with source S (::/0, S), | ||||
while B announces a non-specific route to prefix D. Consider what | ||||
happens to a packet with a desination in D and a source in S. With | ||||
the destination-first ordering, the packet is routed towards the | ||||
network N, which is the only way it can possibly reach its | ||||
destination. With the source-first ordering, on the other hand, the | ||||
packet is sent towards the Internet, with no hope to ever reach its | ||||
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 [BABEL] contain a destination prefix. This specification extends | of [RFC8966] contain a destination prefix. This specification | |||
these data structures with a source prefix. Data from the original | extends these data structures with a source prefix. Data from the | |||
protocol, which do not specify a source prefix, are stored with a | original protocol, which do not specify a source prefix, are stored | |||
zero length source prefix, which matches exactly the same set of | with a zero length source prefix, which matches exactly the same set | |||
packets as the original, non-source-specific data. | of 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 [BABEL] | 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: | |||
o The source prefix specifying the source address of packets to | * The source prefix (sprefix, splen) specifying the source address | |||
which this entry applies. | of packets to which this entry applies. | |||
The source table is now indexed by triples of the form (prefix, | The source table is now indexed by 5-tuples of the form (prefix, | |||
source prefix, 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 [BABEL]) which itself contains a source prefix. These are two | of [RFC8966]) which itself contains both destination and source | |||
very different concepts that should not be confused. | prefixes. These are two different concepts, and must not be | |||
confused. | ||||
3.2. The Route Table | 3.2. The Route Table | |||
Every Babel node maintains a route table, as described in [BABEL] | 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 triples of the | described above. The route table is now indexed by 5-tuples of the | |||
form (prefix, source prefix, neighbour), where the prefix and source | form (prefix, plen, sprefix, splen, neighbour), where the first four | |||
prefix 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 [BABEL], 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: | |||
o The source prefix being requested. | * The source prefix (sprefix, splen) being requested. | |||
The table of pending seqno requests is now indexed by triples of the | The table of pending seqno requests is now indexed by 5-tuples of the | |||
form (prefix, source prefix, router-id). | form (prefix, plen, sprefix, splen, router-id). | |||
4. Data Forwarding | 4. Data Forwarding | |||
In next-hop routing, if two routing table entries overlap, then one | As noted in Section 1.3 above, source-specific tables can, in | |||
is necessarily more specific than the other; the "longest prefix | general, be ambiguous, and all routers in a routing domain must use | |||
rule" specifies that the most specific applicable routing table entry | the same algorithm for choosing applicable routes. An implementation | |||
is chosen. | of the extension described in this document MUST choose routing table | |||
entries by using the destination-first ordering, where a routing | ||||
With source-specific routing, there might no longer be a most | table entry R1 is preferred to a routing table entry R2 when either | |||
specific applicable entry: two routing table entries might match a | R1's destination prefix is more specific than R2's, or the | |||
given packet without one necessarily being more specific than the | destination prefixes are equal and R1's source prefix is more | |||
other. Consider for example the following routing table: | specific than R2's. | |||
destination source next-hop | ||||
2001:DB8:0:1::/64 ::/0 A | ||||
::/0 2001:DB8:0:2::/64 B | ||||
This specifies that all packets with destination in 2001:DB8:0:1::/64 | ||||
are to be routed through A, while all packets with source in | ||||
2001:DB8:0:2::/64 are to be routed through B. A packet with source | ||||
2001:DB8:0:2::42 and destination 2001:DB8:0:1::57 matches both | ||||
entries, although neither is more specific than the other. A choice | ||||
is necessary, and unless the choice being made is the same on all | ||||
routers in a routing domain, persistent routing loops may occur. | ||||
More details are given in Section IV.C of [SS-ROUTING]. | ||||
A Babel implementation MUST choose routing table entries by using the | ||||
so-called destination-first ordering, where a routing table entry R1 | ||||
is preferred to a routing table entry R2 when either R1's destination | ||||
prefix is more specific than R2's, or the destination prefixes are | ||||
equal and R1's source prefix is more specific than R2's. (In other | ||||
words, routing table entries are compared using the lexicographic | ||||
product of the destination prefix ordering by the source prefix | ||||
ordering.) | ||||
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 this semantics. More precisely: | |||
o If the lower layers implement the destination-first ordering, then | * if the lower layers implement the destination-first ordering, then | |||
the Babel implementation SHOULD use them directly; | the Babel implementation SHOULD use them directly; | |||
o 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); | |||
o 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: | |||
skipping to change at page 6, line 11 ¶ | skipping to change at page 9, line 8 ¶ | |||
send a TLV with a zero-length source prefix: instead, it sends a TLV | send a TLV with a zero-length source prefix: instead, it sends a TLV | |||
with no Source Prefix sub-TLV. Conversely, an extended | with no Source Prefix sub-TLV. Conversely, an extended | |||
implementation MUST interpret an unextended TLV as carrying a source | implementation MUST interpret an unextended TLV as carrying a source | |||
prefix of zero length. Taken together, these properties ensure | prefix of zero length. Taken together, these properties ensure | |||
interoperability between the original and extended protocols (see | interoperability between the original and extended protocols (see | |||
Section 6 below). | 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 [BABEL] Section 3.5.4, except that | neigh, it behaves as described in [RFC8966] Section 3.5.3, except | |||
the entry under consideration is indexed by (prefix, source prefix, | that the entry under consideration is indexed by (prefix, plen, | |||
neigh) rather than just (prefix, 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 [BABEL], except that the request applies | described in Section 3.8 of [RFC8966], except that the request | |||
to the Route Table entry carrying the source prefix indicated by the | applies to the Route Table entry carrying the source prefix indicated | |||
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 value 0 is used for | In the original protocol, the Address Encoding (AE) value 0 is used | |||
wildcard messages: messages that apply to all routes, of any address | for wildcard messages: messages that apply to all routes, of any | |||
family and with any destination prefix. Wildcard messages are | address family and with any destination prefix. Wildcard messages | |||
allowed in two places in the protocol: wildcard retractions are used | are allowed in two places in the protocol: wildcard retractions are | |||
to retract all of the routes previously advertised by a node on a | used to retract all of the routes previously advertised by a node on | |||
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, and | |||
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.4 of | apply the route acquisition procedure described in Section 3.5.3 of | |||
[BABEL] 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 it. | receives a wildcard retraction with a source prefix MUST ignore the | |||
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 | |||
it. | 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 [BABEL] (and | extent, interoperable with the base protocol defined in [RFC8966] | |||
all previously standardised extensions). More precisely, if non- | (and all previously standardised extensions). More precisely, if | |||
source-specific routers and source-specific routers are mixed in a | non-source-specific routers and source-specific routers are mixed in | |||
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 [BABEL], and therefore is not compatible with the older | introduced in [RFC8966], and therefore is not compatible with the | |||
version of the Babel Routing Protocol [RFC6126] which does not | older version of the Babel Routing Protocol [RFC6126] which does not | |||
support such sub-TLVs. Consequently, this extension MUST NOT be used | support mandatory sub-TLVs. Consequently, this extension MUST NOT be | |||
with routers implementing RFC 6126, otherwise persistent routing | used in a routing domain in which some routers implement RFC 6126, | |||
loops may occur. | otherwise persistent routing loops may occur. | |||
6.1. Loop-avoidance | ||||
The extension defined in this protocol uses a new Mandatory sub-TLV | ||||
to carry the source prefix information. As discussed in Section 4.4 | ||||
of [BABEL], this encoding ensures that non-source-specific routers | ||||
will silently ignore the whole TLV, which is necessary to avoid | ||||
persistent routing loops in hybrid networks. | ||||
Consider two nodes A and B, with A source-specific announcing a route | ||||
to (D, S). Suppose that B (non-source-specific) merely ignores the | ||||
source prefix information when it receives the update rather than | ||||
ignoring the whole TLV, and re-announces the route as D. This re- | ||||
announcement reaches A, which treats it as (D, ::/0). Packets | ||||
destined to D but not sourced in S will be forwarded by A to B, and | ||||
by B to A, causing a persistent routing loop: | ||||
(D,S) (D) | ||||
<-- <-- | ||||
------ A ----------------- B | ||||
--> | ||||
(D,::/0) | ||||
6.2. 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. | |||
A simple yet sufficient condition for avoiding starvation is to build | In the common case where all source-specific routes are originated at | |||
a connected source-specific backbone that includes all of the edge | one of a small set of edge routers, a simple yet sufficient condition | |||
routers, and announce a (non-source-specific) default route towards | for avoiding starvation is to build a connected source-specific | |||
the backbone. | backbone that includes all of the edge routers, and announce a non- | |||
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, a Route | |||
Request or a Seqno Request TLV to match a source-specific entry of | Request or a Seqno Request TLV to match a source-specific entry of | |||
the Route Table, in conjunction with the destination prefix natively | the 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 characterized by a single | |||
destination prefix and a single source prefix, a source-specific | destination prefix and a single source prefix, a source-specific | |||
message contains exactly one Source Prefix sub-TLV. A node MUST NOT | contains message 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 this 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 Type | |||
and Length fields. | and Length fields. | |||
Source Plen The length of the advertised source prefix. This MUST | Source Plen The length of the advertised source prefix, in bits. | |||
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 | ||||
rounded upwards. If the Length field indicates a length smaller than | ||||
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, | ||||
then the extra octets contained in the sub-TLV MUST be silently | ||||
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 TLV MUST be ignored. | a Source Prefix sub-TLV, then the whole enclosing TLV MUST be | |||
Similarly, if a TLV contains multiple Source Prefix sub-TLVs, then | ignored. If a TLV contains multiple Source Prefix sub-TLVs, then the | |||
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 [BABEL], the whole TLV MUST be ignored if | described in Section 4.4 of [RFC8966], the whole TLV MUST be ignored | |||
that sub-TLV is not understood (or malformed). Otherwise, routing | if that sub-TLV is not understood (or malformed). | |||
loops may occur (see Section 6.1). | ||||
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 [BABEL]). 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 [BABEL]). | 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 | |||
[BABEL], 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 [BABEL]. 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 equals 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 the receiving node to perform the | |||
procedure described in Section 3.8.1.2 of [BABEL], 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 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 | |||
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 [BABEL]) 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. Similarly, a network administrator might assume | to be protected. A network administrator might also assume that no | |||
that no route is more specific than a host route, and use a host | route is more specific than a host route, and use a host route in | |||
route in order to direct traffic for a given destination through a | order to direct traffic for a given destination through a security | |||
security device (e.g., a firewall); source-specific routing | device (e.g., a firewall); source-specific routing invalidates this | |||
invalidates this assumption, and in some topologies announcing a | assumption, and in some topologies announcing a source-specific route | |||
source-specific route might conceivably be used to bypass the | might conceivably be used to bypass the security device. | |||
security device. | ||||
10. Acknowledgments | 10. Acknowledgments | |||
The authors are grateful to Donald Eastlake and Joel Halpern for | The authors are indebted to Donald Eastlake, Joel Halpern, and Toke | |||
their help with this document. | Hoiland-Jorgensen for their help with this document. | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
[BABEL] Chroboczek, J. and D. Schinazi, "The Babel Routing | ||||
Protocol", Internet Draft draft-ietf-babel-rfc6126bis-20, | ||||
September 2020. | ||||
[BCP84] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | [BCP84] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | |||
Networks", BCP 84, RFC 3704, March 2004. | 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>. | ||||
[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. | May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | |||
[RFC8966] Chroboczek, J. and D. Schinazi, "The Babel Routing | ||||
Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8966>. | ||||
11.2. Informative References | 11.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", | ||||
RFC 4960, DOI 10.17487/RFC4960, September 2007, | ||||
<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>. | |||
[RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | ||||
Better Connectivity Using Concurrency", RFC 8305, | ||||
DOI 10.17487/RFC8305, December 2017, | ||||
<https://www.rfc-editor.org/info/rfc8305>. | ||||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | ||||
Connectivity Establishment (ICE): A Protocol for Network | ||||
Address Translator (NAT) Traversal", RFC 8445, | ||||
DOI 10.17487/RFC8445, July 2018, | ||||
<https://www.rfc-editor.org/info/rfc8445>. | ||||
[RFC8684] Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C. | ||||
Paasch, "TCP Extensions for Multipath Operation with | ||||
Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March | ||||
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. | August 2014, <http://arxiv.org/pdf/1403.0445>. In Proc. | |||
IFIP Networking 2015. | ||||
In Proc. IFIP Networking 2015. A slightly earlier | ||||
version is available online from http://arxiv.org/ | ||||
pdf/1403.0445. | ||||
Authors' Addresses | Authors' Addresses | |||
Matthieu Boutier | Matthieu Boutier | |||
IRIF, University of Paris-Diderot | 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 | |||
Juliusz Chroboczek | Juliusz Chroboczek | |||
IRIF, University of Paris-Diderot | IRIF, University of Paris | |||
Case 7014 | Case 7014 | |||
75205 Paris Cedex 13 | 75205 Paris Cedex 13 | |||
France | France | |||
Email: jch@irif.fr | Email: jch@irif.fr | |||
End of changes. 61 change blocks. | ||||
206 lines changed or deleted | 348 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/ |