rfc9079xml2.original.xml | rfc9079.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" []> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<?rfc toc="yes"?> | ||||
<?rfc tocdepth="2"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes" ?> | ||||
<?rfc compact="yes" ?> | ||||
<rfc category="std" docName="draft-ietf-babel-source-specific-08" ipr="trust2009 | ||||
02"> | ||||
<front> | ||||
<title>Source-Specific Routing in Babel</title> | ||||
<author fullname="Matthieu Boutier" initials="M." surname="Boutier"> | ||||
<organization>IRIF, University of Paris</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Case 7014</street> | ||||
<city>75205 Paris Cedex 13</city> | ||||
<region></region> | ||||
<code></code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>boutier@irif.fr</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | ||||
<organization>IRIF, University of Paris</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Case 7014</street> | ||||
<city>75205 Paris Cedex 13</city> | ||||
<region></region> | ||||
<code></code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>jch@irif.fr</email> | ||||
</address> | ||||
</author> | ||||
<date day="21" month="April" year="2021"/> | ||||
<abstract> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<t>Source-specific routing (also known as Source-Address Dependent | ||||
Routing, SADR) is an extension to traditional next-hop routing where | ||||
packets are forwarded according to both their destination and their source | ||||
address. This document describes an extension for source-specific routing | ||||
to the Babel routing protocol.</t> | ||||
</abstract> | ||||
</front> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-babel-source -specific-08" number="9079" ipr="trust200902" obsoletes="" updates="" submission Type="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" tocD epth="2" symRefs="true" sortRefs="true" version="3"> | |||
<middle> | <front> | |||
<title abbrev="Source-Specific Routing in Babel">Source-Specific Routing in | ||||
the Babel Routing Protocol</title> | ||||
<seriesInfo name="RFC" value="9079"/> | ||||
<author fullname="Matthieu Boutier" initials="M." surname="Boutier"> | ||||
<organization>IRIF, University of Paris</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Case 7014</street> | ||||
<city>Paris Cedex 13</city> | ||||
<region/> | ||||
<code>75205</code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>boutier@irif.fr</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | ||||
<organization>IRIF, University of Paris</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Case 7014</street> | ||||
<city>Paris Cedex 13</city> | ||||
<region/> | ||||
<code>75205</code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>jch@irif.fr</email> | ||||
</address> | ||||
</author> | ||||
<date month="August" year="2021"/> | ||||
<section title="Introduction and background"> | <keyword>SADR</keyword> | |||
<keyword>source address-dependent routing</keyword> | ||||
<keyword>source address</keyword> | ||||
<keyword>multihoming</keyword> | ||||
<keyword>multihoming with multiple addresses</keyword> | ||||
<keyword>multiple addresses</keyword> | ||||
<keyword>source address selection</keyword> | ||||
<keyword>multiple routes</keyword> | ||||
<keyword>multipath</keyword> | ||||
<keyword>disjoint routes</keyword> | ||||
<keyword>route diversity</keyword> | ||||
<t>The Babel routing protocol <xref target="RFC8966"/> is a distance vector | <abstract> | |||
<t>Source-specific routing, also known as Source Address Dependent | ||||
Routing (SADR), is an extension to traditional next-hop routing where | ||||
packets are forwarded according to both their destination address and their sour | ||||
ce | ||||
address. This document describes an extension for source-specific routing | ||||
to the Babel routing protocol.</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section numbered="true" toc="default"> | ||||
<name>Introduction and Background</name> | ||||
<t>The Babel routing protocol <xref target="RFC8966" format="default"/> is | ||||
a distance vector | ||||
routing protocol for next-hop routing. In next-hop routing, each node | routing protocol for next-hop routing. In next-hop routing, each node | |||
maintains a forwarding table which maps destination prefixes to next hops. | maintains a forwarding table that maps destination prefixes to next hops. | |||
The forwarding decision is a per-packet operation which depends on the | The forwarding decision is a per-packet operation that depends on the | |||
destination address of the packets and on the entries of the forwarding | destination address of the packets and on the entries of the forwarding | |||
table. When a packet is about to be routed, its destination address is | table. When a packet is about to be routed, its destination address is | |||
compared to the prefixes of the routing table: the entry with the most | compared to the prefixes of the routing table: the entry with the most | |||
specific prefix containing the destination address of the packet is | specific prefix containing the destination address of the packet is | |||
chosen, and the packet is forwarded to the associated next-hop. Next-hop | chosen, and the packet is forwarded to the associated next hop. Next-hop | |||
routing is a simple, well understood paradigm that works satisfactorily in | routing is a simple, well-understood paradigm that works satisfactorily in | |||
a large number of cases.</t> | a large number of cases.</t> | |||
<t>The use of next-hop routing limits the flexibility of the routing | ||||
<t>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 | 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, 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 | 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 | 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 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 IP header that could conceivably be used to guide the routing decision | |||
— the ToS octet and, of course, the source address.</t> | -- the Type of Service (ToS) octet and, of course, the source address.</t> | |||
<t>Source-specific routing <xref target="SS-ROUTING" format="default"/>, o | ||||
<t>Source-specific routing <xref target="SS-ROUTING"/>, or Source Address | r Source Address | |||
Dependent Routing (SADR), is a modest extension to next-hop routing where | Dependent Routing (SADR), is a modest extension to next-hop routing where | |||
the forwarding decision depends not only on the destination address but | the 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 source | possible for two packets with the same destination but different source | |||
addresses to be routed following different paths.</t> | addresses to be routed following different paths.</t> | |||
<t>This document describes a source-specific routing extension for the | ||||
<t>This document describes a source-specific routing extension for the | Babel routing protocol <xref target="RFC8966" format="default"/>. This involves | |||
Babel routing protocol <xref target="RFC8966"/>. This involves minor | minor | |||
changes to the data structures, which must include a source prefix in | changes to the data structures, which must include a source prefix in | |||
addition to the destination prefix already present, and some changes to | addition to the destination prefix already present, and some changes to | |||
the Update, Route Request and Seqno Request TLVs, which are extended with | the Update, Route Request, and Seqno Request TLVs, which are extended with | |||
a source prefix. The source prefix is encoded using a mandatory sub-TLV | a source prefix. The source prefix is encoded using a mandatory sub-TLV | |||
(<xref target="RFC8966"/> Section 4.4).</t> | (<xref target="RFC8966" sectionFormat="comma" section="4.4"/>).</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Application to multihoming"> | <name>Application to Multihoming</name> | |||
<t>Multihoming is the practice of connecting a single network to two or | ||||
<t>Multihoming is the practice of connecting a single network to two or | ||||
more transit networks. The main application of source-specific routing is | more transit networks. The main application of source-specific routing is | |||
a form of multihoming known as "multihoming with multiple addresses".</t> | a form of multihoming known as "multihoming with multiple addresses".</t> | |||
<t>Classical multihoming consists of assigning a provider-independent | ||||
<t>Classical multihoming consists in 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 and | networks, the cost of obtaining a provider-independent address range and | |||
announcing it globally in the Internet is prohibitive for small networks. | announcing it globally in the Internet is prohibitive for small networks. | |||
Unfortunately, it is not possible to implement classical multihoming with | Unfortunately, it is not possible to implement classical multihoming with | |||
ordinary provider-dependent addresses: in a network connected to two | 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 | 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 | 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), | the edge router connected to B, it will most likely be filtered (dropped), | |||
in accordance with <xref target="BCP84"/>.</t> | in accordance with <xref target="BCP84" format="default"/>.</t> | |||
<t>In multihoming with multiple addresses, every host in the multihomed | ||||
<t>In multihoming with multiple addresses, every host in the multihomed | ||||
network is assigned multiple addresses, one for each transit provider. | network is assigned multiple addresses, one for each transit provider. | |||
Additional mechanisms are needed in order (i) to choose, for each packet, | 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, | 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 | and (ii) to route each packet towards the router connected to the provider | |||
associated with its source address. One might argue that multihoming with | associated with its source address. One might argue that multihoming with | |||
multiple addresses splits the difficult problem of multihoming into two | multiple addresses splits the difficult problem of multihoming into two | |||
simpler sub-problems.</t> | simpler sub-problems.</t> | |||
<t>The issue of choosing a suitable source address is a decision local to | <t>The issue of choosing a suitable source address is a decision local t | |||
the sending host, and an area of active research. The simplest solution | o | |||
the sending host and is an area of active research. The simplest solution | ||||
is to use a traditional transport-layer protocol, such as TCP, and to | is to use a traditional transport-layer protocol, such as TCP, and to | |||
probe all available source addresses at connection time, analogously to | probe all available source addresses at connection time, analogously to | |||
what is already done with destination addresses, either sequentially | what is already done with destination addresses, either sequentially | |||
<xref target="RFC3484"/> or in parallel <xref target="RFC8305"/>. Since | <xref target="RFC6724" format="default"/> or in parallel <xref target="RFC8305" format="default"/>. Since | |||
the transport-layer protocol is not aware of the multiple available | the 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 when | (from the point of view of the user, all TCP connections are dropped when | |||
the network environment changes). A better user experience can be | the network environment changes). A better user experience can be | |||
provided by making available all of the potential source and destination | provided by making all of the potential source and destination | |||
addresses to higher layer protocols, either at the transport layer <xref | addresses available to higher-layer protocols, either at the transport layer <xr | |||
target="RFC8684"/> <xref target="RFC4960"/>, or at the applicaton layer | ef target="RFC8684" format="default"/> <xref target="RFC4960" format="default"/> | |||
<xref target="RFC8445"/>.</t> | or at the application layer | |||
<xref target="RFC8445" format="default"/>.</t> | ||||
<t>Source-specific routing solves the problem of routing a packet to the | <t>Source-specific routing solves the problem of routing a packet to the | |||
edge router indicated by its source address. Every edge router announces | edge router indicated by its source address. Every edge router announces into t | |||
into the routing domain a default route specific to the prefix associated | he routing domain a default route specific to the prefix associated | |||
with the provider it is connected to. This route is propagated all the | 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 | 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 | every packet to the correct router. Hosts simply send packets to their | |||
default router — no host changes are necessary at the network layer.</t> | default router -- no host changes are necessary at the network layer.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Other Applications</name> | ||||
<section title="Other applications"> | <t>In addition to multihoming with multiple addresses, we are aware of t | |||
wo applications of source-specific routing. Tunnels and VPNs are packet | ||||
<t>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 | encapsulation techniques that are commonly used in the Internet to | |||
establish a network-layer topology that is different from the physical | establish a network-layer topology that is different from the physical | |||
topology. In some deployments, the default route points at the tunnel; | topology. In some deployments, the default route points at the tunnel; | |||
this causes the network stack to attempt to send encapsulated packets | this causes the network stack to attempt to send encapsulated packets | |||
through the tunnel, which causes it to break. Various solutions to this | 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 | problem are possible, the most common of which is to point a host route at | |||
the tunnel endpoint.</t> | the tunnel endpoint.</t> | |||
<t>When source-specific routing is available, it becomes possible to | ||||
<t>When source-specific routing is available, it becomes possible to | ||||
announce through the tunnel a default route that is specific to the prefix | announce through the tunnel a default route that is specific to the prefix | |||
served by the tunnel. Since the encapsulated packets have a source | served by the tunnel. Since the encapsulated packets have a source | |||
address that is not within that prefix, they are not routed through the | address that is not within that prefix, they are not routed through the | |||
tunnel.</t> | tunnel.</t> | |||
<t>The third application of source-specific routing is controlled anycas | ||||
<t>The third application of source-specific routing is controlled anycast. | t. | |||
Anycast is a technique in which a single destination address is used to | Anycast is a technique in which a single destination address is used to | |||
represent multiple network endpoints, collectively called an "anycast | represent multiple network endpoints, collectively called an "anycast | |||
group". A packet destined to the anycast group is routed to an arbitrary | 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 | member of the group, typically the one that is nearest according to the | |||
routing protocol.</t> | routing protocol.</t> | |||
<t>In many applications of anycast, such as DNS root servers, the | ||||
<t>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 Networks | require finer control. For example, in some Content Distribution Networks | |||
(CDNs) every endpoint is expected to handle a well-defined subset of the | (CDNs), every endpoint is expected to handle a well-defined subset of the | |||
client population. With source-specific routing, it is possible for each | client population. With source-specific routing, it is possible for each | |||
member of the anycast group to announce a route specific to its client | 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 | population, a technique that is both simpler and more robust than manually | |||
tweaking the routing protocol's metric ("prepending" in BGP).</t> | tweaking the routing protocol's metric ("prepending" in BGP).</t> | |||
</section> | ||||
</section> | <section anchor="specificity" numbered="true" toc="default"> | |||
<name>Specificity of Prefix Pairs</name> | ||||
<section title="Specificity of prefix pairs" anchor="specificity"> | <t>In ordinary next-hop routing, when multiple routing table entries mat | |||
ch | ||||
<t>In ordinary next-hop routing, when multiple routing table entries match | ||||
the destination of a packet, the "longest prefix rule" mandates that the | 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 | most specific entry applies. The reason why this rule makes sense is that | |||
the set of prefixes has the following "tree property": | the set of prefixes has the following "tree property": | |||
<list style="empty"> | </t> | |||
<t>for any prefixes P and P', either P and P' are disjoint, or one is more | <ul empty="true"> | |||
specific than the other.</t> | ||||
</list></t> | ||||
<t>It would be a natural proposition to order pairs of prefixes pointwise: | <li> | |||
For any prefixes P and P', either P and P' are disjoint, or one is more | ||||
specific than the other. | ||||
</li> | ||||
</ul> | ||||
<t>It would be a natural proposition to order pairs of prefixes pointwis | ||||
e: | ||||
to define that (D,S) is more specific than (D',S') when D is more specific | 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 | 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. | prefixes with the pointwise ordering doesn't satisfy the tree property. | |||
Indeed, consider the following two pairs: | Indeed, consider the following two pairs: | |||
<list style="empty"> | </t> | |||
<t>(2001:db8:0:1::/64, ::/0) and (::/0, 2001:db8:0:2::/64)</t> | <t indent="3">(2001:db8:0:1::/64, ::/0) and (::/0, 2001:db8:0:2::/64)</t | |||
</list></t> | > | |||
<t>These two pairs are not disjoint (a packet with destination | ||||
<t>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 no | 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 | natural, unambiguous way to interpret a routing table such as the | |||
following:</t> | following:</t> | |||
<figure><artwork><![CDATA[ | <artwork name="" type=""><![CDATA[ | |||
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 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>A more refined ordering over pairs of prefixes is required in order to | <t>A finer ordering of pairs of prefixes is required in order to | |||
avoid all ambiguities. There are two natural choices: the | avoid all ambiguities. There are two natural choices: destination-first orderin | |||
destination-first ordering, where (D,S) is more specific than (D',S') | g, where (D,S) is more specific than (D',S') | |||
when | when | |||
<list style="symbols"> | </t> | |||
<t>D is strictly more specific than D'; or</t> | <ul spacing="normal"> | |||
<t>D = D' and S is more specific than S',</t> | <li>D is strictly more specific than D', or</li> | |||
</list> | <li>D = D', and S is more specific than S'</li> | |||
and, symmetrically, the source-first ordering, in which sources are | </ul> | |||
<t> | ||||
and, symmetrically, source-first ordering, in which sources are | ||||
compared first and destinations second.</t> | compared first and destinations second.</t> | |||
<t>Expedient as it would be to leave the choice to the implementation, | ||||
<t>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 | this is not possible: all routers in a routing domain must use the same | |||
ordering, lest persistent routing loops occur. Indeed, consider the | ordering lest persistent routing loops occur. Indeed, consider the | |||
following topology:</t> | following topology:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
A --- B --- C --- D | A --- B --- C --- D | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>Suppose that A announces a route for (::/0, 2001:db8:0:2::/64), while | ||||
<t>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 | 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 | B uses destination-first ordering while C uses source-first | |||
ordering. Then a packet that matches both routes, say, with destination | 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 | 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 | D and by C towards A and would therefore loop indefinitely between B and | |||
C.</t> | C.</t> | |||
<t>This document mandates (<xref target="forwarding" format="default"/>) | ||||
<t>This document mandates (<xref target="forwarding"/>) that all routers | that all routers | |||
use the destination-first ordering, which is generally believed to be more | use destination-first ordering, which is generally believed to be more | |||
useful than the source-first ordering. Consider the following topology, | useful than source-first ordering. Consider the following topology, | |||
where A is an edge router connected to the Internet and B is an internal | where A is an edge router connected to the Internet and B is an internal | |||
router connected to an access network N:</t> | router connected to an access network N:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
(::/0, S) (D, ::/0) | (::/0, S) (D, ::/0) | |||
Internet --- A --- B --- N | Internet --- A --- B --- N | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>A announces a source-specific default route with source | ||||
<t>A announces a source-specific default route with source | S (::/0, S), while B announces a nonspecific route to prefix D. | |||
S (::/0, S), while B announces a non-specific route to prefix D. | Consider what happens to a packet with a destination in D and a source in | |||
Consider what happens to a packet with a desination in D and a source in | S. With destination-first ordering, the packet is routed towards the | |||
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. | 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 | With source-first ordering, on the other hand, the packet is sent | |||
towards the Internet, with no hope to ever reach its destination in N.</t> | towards the Internet, with no hope of ever reaching its destination in N.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Specification of Requirements</name> | |||
<t> | ||||
<section title="Specification of Requirements"> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and | be interpreted as | |||
only when, they appear in all capitals, as shown here.</t> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
when, and only when, they appear in all capitals, as shown here. | ||||
</section> | </t> | |||
</section> | ||||
<section title="Data Structures"> | <section numbered="true" toc="default"> | |||
<name>Data Structures</name> | ||||
<t>A number of the conceptual data structures described in Section 3.2 of | <t>A number of the conceptual data structures described in <xref target="R | |||
<xref target="RFC8966"/> contain a destination prefix. This specification | FC8966" sectionFormat="of" section="3.2"/> contain a destination prefix. This s | |||
pecification | ||||
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 with | original protocol, which do not specify a source prefix, are stored with | |||
a zero length source prefix, which matches exactly the same set of packets | a zero-length source prefix, which matches the exact same set of packets | |||
as the original, non-source-specific data.</t> | as the original, non-source-specific data.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="The Source Table"> | <name>The Source Table</name> | |||
<t>Every Babel node maintains a source table, as described in <xref targ | ||||
<t>Every Babel node maintains a source table, as described in <xref | et="RFC8966" sectionFormat="comma" section="3.2.5"/>. A source-specific Babel n | |||
target="RFC8966"/> Section 3.2.5. A source-specific Babel node | ode | |||
extends this table with the following field: | extends this table with the following field: | |||
<list style="symbols"> | </t> | |||
<t>The source prefix (sprefix, splen) specifying the source address of | <ul spacing="normal"> | |||
packets to which this entry applies.</t> | <li>The source prefix (sprefix, splen) specifying the source addr | |||
</list></t> | ess of | |||
packets to which this entry applies.</li> | ||||
<t>The source table is now indexed by 5-tuples of the form (prefix, plen, | </ul> | |||
<t>The source table is now indexed by 5-tuples of the form (prefix, plen | ||||
, | ||||
sprefix, splen, router-id).</t> | sprefix, splen, router-id).</t> | |||
<t>Note that the route entry contains a source (see Sections <xref targe | ||||
<t>Note that the route entry contains a source (see sections 2 and 3.2.5 | t="RFC8966" section="2" sectionFormat="bare"/> and <xref target="RFC8966" sectio | |||
of <xref target="RFC8966"/>) which itself contains both destination and | nFormat="bare" section="3.2.5" /> | |||
source prefixes. These are two different concepts, and must not be | of <xref target="RFC8966" format="default"/>) that itself contains both destinat | |||
ion and | ||||
source prefixes. These are two different concepts and must not be | ||||
confused.</t> | confused.</t> | |||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>The Route Table</name> | ||||
</section> | <t>Every Babel node maintains a route table, as described in <xref targe | |||
t="RFC8966" sectionFormat="comma" section="3.2.6"/>. Each route table entry con | ||||
<section title="The Route Table"> | tains, | |||
<t>Every Babel node maintains a route table, as described in <xref | ||||
target="RFC8966"/> Section 3.2.6. Each route table entry contains, | ||||
among other data, a source, which this specification extends with a source | among other data, a source, which this specification extends with a source | |||
prefix as described above. The route table is now indexed by 5-tuples of | prefix as described above. The route table is now indexed by 5-tuples of | |||
the form (prefix, plen, sprefix, splen, neighbour), where the first four | the form (prefix, plen, sprefix, splen, neighbour), where the first four | |||
components are obtained from the source.</t> | components are obtained from the source.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>The Table of Pending Seqno Requests</name> | ||||
<section title="The Table of Pending Seqno Requests"> | <t>Every Babel node maintains a table of pending seqno requests, as | |||
described in <xref target="RFC8966" sectionFormat="comma" section="3.2.7"/>. A | ||||
<t>Every Babel node maintains a table of pending seqno requests, as | ||||
described in <xref target="RFC8966"/>, Section 3.2.7. A | ||||
source-specific Babel node extends this table with the following entry:</t> | source-specific Babel node extends this table with the following entry:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>The source prefix (sprefix, splen) being requested.</li> | |||
<t>The source prefix (sprefix, splen) being requested.</t> | </ul> | |||
</list></t> | <t>The table of pending seqno requests is now indexed by 5-tuples of the | |||
<t>The table of pending seqno requests is now indexed by 5-tuples of the | ||||
form (prefix, plen, sprefix, splen, router-id).</t> | form (prefix, plen, sprefix, splen, router-id).</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="forwarding" numbered="true" toc="default"> | ||||
</section> | <name>Data Forwarding</name> | |||
<t>As noted in <xref target="specificity" format="default"/>, source-speci | ||||
<section title="Data Forwarding" anchor="forwarding"> | fic tables | |||
<t>As noted in <xref target="specificity"/> above, source-specific tables | ||||
can, in general, be ambiguous, and all routers in a routing domain must | can, in general, be ambiguous, and all routers in a routing domain must | |||
use the same algorithm for choosing applicable routes. An implementation | use the same algorithm for choosing applicable routes. An implementation | |||
of the extension described in this document MUST choose routing table | of the extension described in this document <bcp14>MUST</bcp14> choose routing t | |||
entries by using the destination-first ordering, where a routing table | able | |||
entry R1 is preferred to a routing table entry R2 when either R1's | entries by using destination-first ordering, where routing table | |||
destination prefix is more specific than R2's, or the destination prefixes | entry R1 is preferred to 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.</t> | are equal and R1's source prefix is more specific than R2's.</t> | |||
<t>In practice, this means that a source-specific Babel implementation | ||||
<t>In practice, this means that a source-specific Babel implementation | ||||
must take care that any lower layer that performs packet forwarding obey | must take care that any lower layer that performs packet forwarding obey | |||
this semantics. More precisely:</t> | these semantics. More precisely:</t> | |||
<t><list style="symbols"> | <ul spacing="normal"> | |||
<t>if the lower layers implement the destination-first ordering, then the | <li>if the lower layers implement destination-first ordering, then the | |||
Babel implementation SHOULD use them directly;</t> | Babel implementation <bcp14>SHOULD</bcp14> use them directly;</li> | |||
<t>if the lower layers can hold source-specific routes, but not with the | <li>if the lower layers can hold source-specific routes but not with the | |||
right semantics, then the Babel implementation MUST either silently ignore | right semantics, then the Babel implementation <bcp14>MUST</bcp14> either silent | |||
any source-specific routes, or disambiguate the routing table by using | ly ignore | |||
any source-specific routes or disambiguate the routing table by using | ||||
a suitable disambiguation algorithm (see Section V.B of | a suitable disambiguation algorithm (see Section V.B of | |||
<xref target="SS-ROUTING"/> for such an algorithm);</t> | <xref target="SS-ROUTING" format="default"/> for such an algorithm);</li> | |||
<t>if the lower layers cannot hold source-specific routes, then a Babel | <li>if the lower layers cannot hold source-specific routes, then a Babel | |||
implementation MUST silently ignore any source-specific routes.</t> | implementation <bcp14>MUST</bcp14> silently ignore any source-specific routes.</ | |||
</list></t> | li> | |||
</ul> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Protocol Operation"> | <name>Protocol Operation</name> | |||
<t>This extension does not fundamentally change the operation of the Babel | ||||
<t>This extension does not fundamentally change the operation of the Babel | ||||
protocol, and we therefore only describe differences between the original | protocol, and we therefore only describe differences between the original | |||
protocol and the extended protocol.</t> | protocol and the extended protocol.</t> | |||
<t>In the original protocol, three TLVs carry a destination prefix: | <t>In the original protocol, three TLVs carry a destination prefix: | |||
Updates, Route Requests and Seqno Requests. This specification extends | Update, Route Request, and Seqno Request TLVs. This specification extends | |||
these messages so that they may carry a Source Prefix sub-TLV, as | these messages so that they may carry a Source Prefix sub-TLV, as | |||
described in <xref target="protocol-encoding"/> below. The sub-TLV is | described in <xref target="protocol-encoding" format="default"/>. The sub-TLV i | |||
marked as mandatory, so that an unextended implementation will silently | s | |||
ignore the whole enclosing TLV. A node obeying this specification MUST | marked as mandatory so that an unextended implementation will silently | |||
NOT send a TLV with a zero-length source prefix: instead, it sends a TLV | ignore the whole enclosing TLV. A node obeying this specification <bcp14>MUST | |||
NOT</bcp14> send a TLV with a zero-length source prefix; instead, it sends a TLV | ||||
with no Source Prefix sub-TLV. Conversely, an extended implementation | with no Source Prefix sub-TLV. Conversely, an extended implementation | |||
MUST interpret an unextended TLV as carrying a source prefix of zero | <bcp14>MUST</bcp14> interpret an unextended TLV as carrying a source prefix of z ero | |||
length. Taken together, these properties ensure interoperability between | length. Taken together, these properties ensure interoperability between | |||
the original and extended protocols (see <xref target="compatibility"/> | the original and extended protocols (see <xref target="compatibility" format="de | |||
below).</t> | fault"/>).</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Protocol Messages"> | <name>Protocol Messages</name> | |||
<t>This extension allows three TLVs of the original Babel protocol to | ||||
<t>This extension allows three TLVs of the original Babel protocol to | ||||
carry a source prefix: Update TLVs, Route Request TLVs, and Seqno Request | carry a source prefix: Update TLVs, Route Request TLVs, and Seqno Request | |||
TLVs.</t> | TLVs.</t> | |||
<t>In order to advertise a route with a non-zero length source prefix, | ||||
<t>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 | |||
a 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, | |||
Prefix sub-TLV. When a node receives a source-specific Update (prefix, | ||||
source prefix, router-id, seqno, metric) from a neighbour neigh, it | source prefix, router-id, seqno, metric) from a neighbour neigh, it | |||
behaves as described in <xref target="RFC8966"/> Section 3.5.3, | behaves as described in <xref target="RFC8966" sectionFormat="comma" section="3. 5.3"/>, | |||
except that the entry under consideration is indexed by (prefix, plen, | except that the entry under consideration is indexed by (prefix, plen, | |||
sprefix, splen, neigh) rather than just (prefix, plen, neigh).</t> | sprefix, splen, neigh) rather than just (prefix, plen, neigh).</t> | |||
<t>Similarly, when a node needs to send a request of either kind that | ||||
<t>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 | 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-TLV. | a source-specific request, i.e., a request with a Source Prefix sub-TLV. | |||
When a node receives a source-specific Request, it behaves as described in | When a node receives a source-specific request, it behaves as described in | |||
Section 3.8 of <xref target="RFC8966"/>, except that the request applies to | <xref target="RFC8966" sectionFormat="of" section="3.8"/>, except that the reque | |||
the Route Table entry carrying the source prefix indicated by the | st applies to | |||
the route table entry carrying the source prefix indicated by the | ||||
Source Prefix sub-TLV.</t> | Source Prefix sub-TLV.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Wildcard Messages</name> | ||||
<section title="Wildcard Messages"> | <t>In the original protocol, the address encoding (AE) value 0 is used f | |||
or | ||||
<t>In the original protocol, the Address Encoding (AE) value 0 is used for | wildcard messages: messages that apply to all routes of any address | |||
wildcard messages: messages that apply to all routes, of any address | ||||
family and with any destination prefix. Wildcard messages are allowed in | family and with any destination prefix. Wildcard messages are allowed in | |||
two places in the protocol: wildcard retractions are used to retract all | two places in the protocol: wildcard retractions are used to retract all | |||
of the routes previously advertised by a node on a given interface, and | of the routes previously advertised by a node on a given interface, and | |||
wildcard Route Requests are used to request a full dump of the Route Table | wildcard route requests are used to request a full dump of the route table | |||
from a given node. Wildcard messages are intended to apply to all routes, | from a given node. Wildcard messages are intended to apply to all routes, | |||
including routes decorated with additional data and AE values to be | including routes decorated with additional data and AE values to be | |||
defined by future extensions, and hence this specification extends | defined by future extensions; hence, this specification extends | |||
wildcard operations to apply to all routes, whatever the value of the | wildcard operations to apply to all routes, whatever the value of the | |||
source prefix.</t> | source prefix.</t> | |||
<t>More precisely, a node receiving an update with the AE field set to | ||||
<t>More precisely, a node receiving an Update with the AE field set to | 0 and the Metric field set to infinity (a wildcard retraction) <bcp14>MUST</bcp1 | |||
0 and the Metric field set to infinity (a wildcard retraction) MUST apply | 4> apply | |||
the route acquisition procedure described in Section 3.5.3 of <xref | the route acquisition procedure described in <xref target="RFC8966" sectionForma | |||
target="RFC8966"/> to all of the routes that it has learned from the sending | t="of" section="3.5.3"/> to all of the routes that it has learned from the sendi | |||
node, whatever the value of the source prefix. A node MUST NOT send | ng | |||
node, whatever the value of the source prefix. A node <bcp14>MUST NOT</bcp14> s | ||||
end | ||||
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 <bcp14>MUST</bcp14> ignore t he | |||
retraction.</t> | retraction.</t> | |||
<t>Similarly, a node that receives a route request with the AE field set | ||||
<t>Similarly, a node that receives a route request with the AE field set | to 0 (a wildcard route request) <bcp14>SHOULD</bcp14> send a full routing table | |||
to 0 (a wildcard route request) SHOULD send a full routing table dump, | dump, | |||
including routes with a non-zero length source prefix. A node MUST NOT | including routes with a non-zero length source prefix. A node <bcp14>MUST NOT</ | |||
bcp14> | ||||
send a wildcard request that carries a source prefix, and a node receiving | send a wildcard request that carries a source prefix, and a node receiving | |||
a wildcard request with a source prefix MUST ignore the request.</t> | a wildcard request with a source prefix <bcp14>MUST</bcp14> ignore the request.< | |||
/t> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="compatibility" numbered="true" toc="default"> | |||
<name>Compatibility with the Base Protocol</name> | ||||
<section title="Compatibility with the base protocol" anchor="compatibility"> | <t>The protocol extension defined in this document is, to a great extent, | |||
interoperable with the base protocol defined in <xref target="RFC8966" format="d | ||||
<t>The protocol extension defined in this document is, to a great extent, | efault"/> | |||
interoperable with the base protocol defined in <xref target="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 preserved, | a single routing domain, Babel's loop-avoidance properties are preserved, | |||
and, in particular, no persistent routing loops will occur.</t> | and, in particular, no persistent routing loops will occur.</t> | |||
<t>However, this extension is encoded using mandatory sub-TLVs, introduced | ||||
<t>However, this extension is encoded using mandatory sub-TLVs, introduced | in <xref target="RFC8966" format="default"/>, and therefore is not compatible wi | |||
in <xref target="RFC8966"/>, and therefore is not compatible with the | th the | |||
older version of the Babel Routing Protocol <xref target="RFC6126"/> which | older version of the Babel routing protocol <xref target="RFC6126" format="defau | |||
does not support mandatory sub-TLVs. Consequently, this extension MUST | lt"/>, which | |||
NOT be used in a routing domain in which some routers implement RFC 6126, | does not support mandatory sub-TLVs. Consequently, this extension <bcp14>MUST | |||
otherwise persistent routing loops may occur.</t> | NOT</bcp14> be used in a routing domain in which some routers implement <xref ta | |||
rget="RFC6126"/>; | ||||
<section title="Starvation and Blackholes"> | otherwise, persistent routing loops may occur.</t> | |||
<section numbered="true" toc="default"> | ||||
<t>In general, the discarding of source-specific routes by | <name>Starvation and Blackholes</name> | |||
<t>In general, the discarding of source-specific routes by | ||||
non-source-specific routers will cause route starvation. Intuitively, | non-source-specific routers will cause route starvation. Intuitively, | |||
unless there are enough non-source-specific routes in the network, | unless there are enough non-source-specific routes in the network, | |||
non-source-specific routers will suffer starvation, and discard packets | non-source-specific routers will suffer starvation and discard packets | |||
for destinations that are only announced by source-specific routers.</t> | for destinations that are only announced by source-specific routers.</t> | |||
<t>In the common case where all source-specific routes are originated at | ||||
<t>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 for | one of a small set of edge routers, a simple yet sufficient condition for | |||
avoiding starvation is to build a connected source-specific backbone that | avoiding starvation is to build a connected source-specific backbone that | |||
includes all of the edge routers, and announce a non-source-specific | includes all of the edge routers and announce a non-source-specific | |||
default route towards the backbone.</t> | default route towards the backbone.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="protocol-encoding" numbered="true" toc="default"> | ||||
</section> | <name>Protocol Encoding</name> | |||
<t>This extension defines a new sub-TLV used to carry a source prefix: the | ||||
<section title="Protocol Encoding" anchor="protocol-encoding"> | Source Prefix sub-TLV. It can be used within an Update, Route Request, | |||
or Seqno Request TLV to match a source-specific entry of the route | ||||
<t>This extension defines a new sub-TLV used to carry a source prefix: the | table in conjunction with the destination prefix natively carried by | |||
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 the Route | ||||
Table, in conjunction with the destination prefix natively carried by | ||||
these TLVs.</t> | these TLVs.</t> | |||
<t>Since a source-specific routing entry is characterized by a single | <t>Since a source-specific routing entry is characterised by a single | |||
destination prefix and a single source prefix, a source-specific contains | destination prefix and a single source prefix, a source-specific message contain | |||
message exactly one Source Prefix sub-TLV. A node MUST NOT send more | s | |||
exactly one Source Prefix sub-TLV. A node <bcp14>MUST NOT</bcp14> send more | ||||
than one Source Prefix sub-TLV in a TLV, and a node receiving more than | 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 ignore the TLV. It MAY | one Source Prefix sub-TLV in a single TLV <bcp14>MUST</bcp14> ignore the TLV. I t <bcp14>MAY</bcp14> | |||
ignore the whole packet.</t> | ignore the whole packet.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Source Prefix sub-TLV"> | <name>Source Prefix Sub-TLV</name> | |||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
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... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>Fields: | ||||
<t>Fields: | ||||
<list style="hanging" hangIndent="10"> | ||||
<t hangText="Type">Set to 128 to indicate a Source Prefix | ||||
sub-TLV.</t> | ||||
<t hangText="Length">The length of the body, in octets, exclusive of the | ||||
Type and Length fields.</t> | ||||
<t hangText="Source Plen">The length of the advertised source prefix, in | ||||
bits. This MUST NOT be 0.</t> | ||||
<t hangText="Source Prefix">The source prefix being advertised. This | ||||
field's size is (Source Plen)/8 octets rounded upwards.</t> | ||||
</list> | ||||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="15"> | ||||
<t>The length of the body TLV is normally of size 1+(Source Plen)/8 | <dt>Type</dt> | |||
<dd>Set to 128 to indicate a Source Prefix | ||||
sub-TLV.</dd> | ||||
<dt>Length</dt> | ||||
<dd>The length of the body, in octets, exclusive of the | ||||
Type and Length fields.</dd> | ||||
<dt>Source Plen</dt> | ||||
<dd>The length of the advertised source prefix, in | ||||
bits. This <bcp14>MUST NOT</bcp14> be 0.</dd> | ||||
<dt>Source Prefix</dt> | ||||
<dd>The source prefix being advertised. This | ||||
field's size is (Source Plen)/8 octets rounded upwards.</dd> | ||||
</dl> | ||||
<t>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 be | 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 | ignored; if the Length field indicates a length that is larger, then the | |||
extra octets contained in the sub-TLV MUST be silently ignored.</t> | extra octets contained in the sub-TLV <bcp14>MUST</bcp14> be silently ignored.</ | |||
t> | ||||
<t>The contents of the Source Prefix sub-TLV are interpreted according to | <t>The contents of the Source Prefix sub-TLV are interpreted according t | |||
o | ||||
the AE of the enclosing TLV. If a TLV with AE equal to 0 contains | 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 ignored. If | a Source Prefix sub-TLV, then the whole enclosing TLV <bcp14>MUST</bcp14> be ign | |||
a TLV contains multiple Source Prefix sub-TLVs, then the whole TLV MUST be | ored. If | |||
a TLV contains multiple Source Prefix sub-TLVs, then the whole TLV <bcp14>MUST</ | ||||
bcp14> be | ||||
ignored.</t> | ignored.</t> | |||
<t>Note that this sub-TLV is a mandatory sub-TLV. Therefore, as describ | ||||
<t>Note that this sub-TLV is a mandatory sub-TLV. Therefore, as described | ed | |||
in Section 4.4 of <xref target="RFC8966"/>, the whole TLV MUST be ignored if | in <xref target="RFC8966" sectionFormat="of" section="4.4"/>, the whole TLV <bcp | |||
14>MUST</bcp14> be ignored if | ||||
that sub-TLV is not understood (or malformed).</t> | that sub-TLV is not understood (or malformed).</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Source-Specific Update</name> | ||||
<section title="Source-specific Update"> | <t>The source-specific update is an Update TLV with a Source Prefix | |||
<t>The source-specific Update is an Update TLV with a Source Prefix | ||||
sub-TLV. It advertises or retracts source-specific routes in the same | sub-TLV. It advertises or retracts source-specific routes in the same | |||
manner as routes with non-source-specific Updates (see <xref | manner as routes with non-source-specific updates (see <xref target="RFC8966" fo | |||
target="RFC8966"/>). A wildcard retraction (Update with AE equal to 0) MUST | rmat="default"/>). A wildcard retraction (update with AE equal to 0) <bcp14>MUS | |||
NOT carry a Source Prefix sub-TLV.</t> | T | |||
NOT</bcp14> carry a Source Prefix sub-TLV.</t> | ||||
<t>Babel uses a stateful compression scheme to reduce the size taken by | <t>Babel uses a stateful compression scheme to reduce the size taken by | |||
destination prefixes in update TLVs (see Section 4.5 of <xref | destination prefixes in Update TLVs (see <xref target="RFC8966" sectionFormat="o | |||
target="RFC8966"/>). The source prefix defined by this extension is not | f" section="4.5"/>). The source prefix defined by this extension is not | |||
compressed. On the other hand, compression is allowed for the destination | compressed. On the other hand, compression is allowed for the destination | |||
prefixes carried by source-specific updates. As described in Section 4.5 | prefixes carried by source-specific updates. As described in <xref target="RFC8 | |||
of <xref target="RFC8966"/>, unextended implementations will correctly | 966" sectionFormat="of" section="4.5"/>, unextended implementations will correct | |||
ly | ||||
update their parser state while otherwise ignoring the whole TLV.</t> | update their parser state while otherwise ignoring the whole TLV.</t> | |||
</section> | ||||
</section> | <section anchor="ss-request" numbered="true" toc="default"> | |||
<name>Source-Specific Route Request</name> | ||||
<section title="Source-specific Route Request" anchor="ss-request"> | <t>A source-specific route request is a Route Request TLV with a Source | |||
<t>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 given | Prefix sub-TLV. It prompts the receiver to send an update for a given | |||
pair of destination and source prefixes, as described in Section 3.8.1.1 | pair of destination and source prefixes, as described in <xref target="RFC8966" | |||
of <xref target="RFC8966"/>. A wildcard request (Route Request with AE | sectionFormat="of" section="3.8.1.1"/>. A wildcard request (route request with | |||
equals to 0) MUST NOT carry a Source Prefix sub-TLV; if a wildcard request | AE | |||
with a Source Prefix sub-TLV is received, then the request MUST be | equal to 0) <bcp14>MUST NOT</bcp14> carry a Source Prefix sub-TLV; if a wildcard | |||
request | ||||
with a Source Prefix sub-TLV is received, then the request <bcp14>MUST</bcp14> b | ||||
e | ||||
ignored.</t> | ignored.</t> | |||
</section> | ||||
<section numbered="true" toc="default"> | ||||
</section> | <name>Source-Specific Seqno Request</name> | |||
<t>A source-specific seqno request is a Seqno Request TLV with a Source | ||||
<section title="Source-Specific Seqno Request"> | Prefix sub-TLV. It requests that the receiving node perform the procedure | |||
described in <xref target="RFC8966" sectionFormat="of" section="3.8.1.2"/> but a | ||||
<t>A source-specific Seqno Request is a Seqno Request TLV with a Source | pplied to | |||
Prefix sub-TLV. It requests the receiving node to perform the procedure | a pair consisting of a destination and source prefix.</t> | |||
described in Section 3.8.1.2 of <xref target="RFC8966"/>, but applied to | </section> | |||
a pair of a destination and source prefix.</t> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>IANA Considerations</name> | |||
<t>IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV in | ||||
</section> | the "Babel Sub-TLV Types" registry.</t> | |||
</section> | ||||
<section title="IANA Considerations"> | <section numbered="true" toc="default"> | |||
<name>Security Considerations</name> | ||||
<t>IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV in | <t>The extension defined in this document adds a new sub-TLV to three | |||
the Babel sub-TLV types registry.</t> | sub-TLVs already present in the original Babel protocol and does not | |||
</section> | ||||
<section title="Security considerations"> | ||||
<t>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 | ||||
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.</t> | could conceivably lead to security issues.</t> | |||
<t>For example, a network administrator might be tempted to abuse route | ||||
<t>For example, a network administrator might be tempted to abuse route | filtering (<xref target="RFC8966" sectionFormat="of" section="C"/>) as a securit | |||
filtering (Appendix C of <xref target="RFC8966"/>) as a security mechanism. | y mechanism. | |||
Unless the filtering rules are designed to take source-specific routing | Unless the filtering rules are designed to take source-specific routing | |||
into account, they might be bypassed by a source-specific route, which | into account, they might be bypassed by a source-specific route, which | |||
might cause traffic to reach a portion of a network that was thought to be | might cause traffic to reach a portion of a network that was thought to be | |||
protected. A network administrator might also assume that no route | protected. A network administrator might also assume that no route | |||
is more specific than a host route, and use a host route in order to | is more specific than a host route and use a host route in order to | |||
direct traffic for a given destination through a security device (e.g., | direct traffic for a given destination through a security device (e.g., | |||
a firewall); source-specific routing invalidates this assumption, and in | a firewall); source-specific routing invalidates this assumption, and, in | |||
some topologies announcing a source-specific route might conceivably be | some topologies, announcing a source-specific route might conceivably be | |||
used to bypass the security device.</t> | used to bypass the security device.</t> | |||
</section> | ||||
</middle> | ||||
<back> | ||||
</section> | <references> | |||
<name>References</name> | ||||
<section title="Acknowledgments"> | <references> | |||
<name>Normative References</name> | ||||
<t>The authors are indebted to Donald Eastlake, Joel Halpern, and Toke | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
Hoiland-Jorgensen for their help with this document.</t> | FC.2119.xml"/> | |||
</section> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
<reference anchor="RFC2119"><front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</title> | ||||
<author fullname="Scott Bradner" initials="S." surname="Bradner"/> | ||||
<date month="March" year="1997"/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="BCP84"><front> | ||||
<title>Ingress Filtering for Multihomed Networks</title> | ||||
<author fullname="Fred Baker" initials="F." surname="Baker"/> | ||||
<author fullname="Pekka Savola" initials="P." surname="Savola"/> | ||||
<date month="March" year="2004"/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="84"/> | ||||
<seriesInfo name="RFC" value="3704"/> | ||||
</reference> | ||||
<reference anchor="RFC8966" target="https://www.rfc-editor.org/info/rfc8966"> | ||||
<front> | ||||
<title>The Babel Routing Protocol</title> | ||||
<author initials="J." surname="Chroboczek" fullname="J. Chroboczek"/> | ||||
<author initials="D." surname="Schinazi" fullname="D. Schinazi"/> | ||||
<date year="2021" month="January"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8966"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8966"/> | ||||
</reference> | ||||
<reference anchor="RFC8174"><front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"/> | ||||
<date year="2017" month="May"/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<reference anchor="RFC6126" target="https://www.rfc-editor.org/info/rfc6126"> | ||||
<front> | ||||
<title>The Babel Routing Protocol</title> | ||||
<author initials="J." surname="Chroboczek" fullname="J. Chroboczek"/> | ||||
<date year="2011" month="April"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6126"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6126"/> | ||||
</reference> | ||||
<reference anchor="SS-ROUTING" target="http://arxiv.org/pdf/1403.0445"> | ||||
<front> | ||||
<title>Source-Specific Routing</title> | ||||
<author initials="M." surname="Boutier" fullname="Matthieu Boutier"/> | ||||
<author initials="J." surname="Chroboczek" fullname="Juliusz Chroboczek"/> | ||||
<date year="2014" month="August"/> | ||||
</front> | ||||
<annotation>In Proc. IFIP Networking 2015.</annotation> | ||||
</reference> | ||||
<reference anchor="RFC3484" target="https://www.rfc-editor.org/info/rfc3484"> | ||||
<front> | ||||
<title>Default Address Selection for Internet Protocol version 6 (IPv6)</title> | ||||
<author initials="R." surname="Draves" fullname="R. Draves"/> | ||||
<date year="2003" month="February"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3484"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3484"/> | ||||
</reference> | ||||
<reference anchor="RFC8305" target="https://www.rfc-editor.org/info/rfc8305"> | ||||
<front> | ||||
<title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title> | ||||
<author initials="D." surname="Schinazi" fullname="D. Schinazi"/> | ||||
<author initials="T." surname="Pauly" fullname="T. Pauly"/> | ||||
<date year="2017" month="December"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8305"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8305"/> | ||||
</reference> | ||||
<reference anchor="RFC8684" target="https://www.rfc-editor.org/info/rfc8684"> | ||||
<front> | ||||
<title>TCP Extensions for Multipath Operation with Multiple Addresses</title> | ||||
<author initials="A." surname="Ford" fullname="A. Ford"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Raiciu" fullname="C. Raiciu"/> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"/> | ||||
<author initials="O." surname="Bonaventure" fullname="O. Bonaventure"/> | ||||
<author initials="C." surname="Paasch" fullname="C. Paasch"/> | ||||
<date year="2020" month="March"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8684"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8684"/> | ||||
</reference> | ||||
<reference anchor="RFC4960" target="https://www.rfc-editor.org/info/rfc4960"> | ||||
<front> | ||||
<title>Stream Control Transmission Protocol</title> | ||||
<author initials="R." surname="Stewart" fullname="R. Stewart" role="editor"/> | ||||
<date year="2007" month="September"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4960"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4960"/> | ||||
</reference> | ||||
<reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8445"> | <referencegroup anchor="BCP84" target="https://www.rfc-editor.org/info/bcp84"> | |||
<front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<title>Interactive Connectivity Establishment (ICE): A Protocol for Network Addr | FC.3704.xml"/> | |||
ess Translator (NAT) Traversal</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<author initials="A." surname="Keranen" fullname="A. Keranen"/> | FC.8704.xml"/> | |||
<author initials="C." surname="Holmberg" fullname="C. Holmberg"/> | </referencegroup> | |||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"/> | ||||
<date year="2018" month="July"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8445"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8445"/> | ||||
</reference> | ||||
</references> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8966.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6126.xml"/> | ||||
</back> | <reference anchor="SS-ROUTING" target="http://arxiv.org/pdf/1403.0445"> | |||
<front> | ||||
<title>Source-Specific Routing</title> | ||||
<author initials="M." surname="Boutier" fullname="Matthieu Boutier"/ | ||||
> | ||||
<author initials="J." surname="Chroboczek" fullname="Juliusz Chroboc | ||||
zek"/> | ||||
<date year="2015" month="May"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.1109/IFIPNetworking.2015.7145305"/> | ||||
<refcontent>IFIP Networking Conference</refcontent> | ||||
</reference> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6724.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8305.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8684.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4960.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8445.xml"/> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>The authors are indebted to <contact fullname="Donald Eastlake"/>, <con | ||||
tact fullname="Joel Halpern"/>, and <contact fullname="Toke | ||||
Hoiland-Jorgensen"/> for their help with this document.</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 100 change blocks. | ||||
542 lines changed or deleted | 455 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/ |