<?xml version="1.0"encoding="US-ASCII"?>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" ?>"rfc2629-xhtml.ent"> <rfccategory="std"xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-babel-source-specific-08"ipr="trust200902">number="9079" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" tocDepth="2" symRefs="true" sortRefs="true" version="3"> <front><title>Source-Specific<title abbrev="Source-Specific Routing inBabel</title>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>75205 Paris<city>Paris Cedex 13</city><region></region> <code></code><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>75205 Paris<city>Paris Cedex 13</city><region></region> <code></code><region/> <code>75205</code> <country>France</country> </postal> <email>jch@irif.fr</email> </address> </author> <dateday="21" month="April"month="August" year="2021"/> <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> <abstract> <t>Source-specificrouting (alsorouting, also known asSource-AddressSource Address DependentRouting, SADR)Routing (SADR), is an extension to traditional next-hop routing where packets are forwarded according to both their destination address and their source address. This document describes an extension for source-specific routing to the Babel routing protocol.</t> </abstract> </front> <middle> <sectiontitle="Introductionnumbered="true" toc="default"> <name>Introduction andbackground">Background</name> <t>The Babel routing protocol <xreftarget="RFC8966"/>target="RFC8966" format="default"/> is a distance vector routing protocol for next-hop routing. In next-hop routing, each node maintains a forwarding tablewhichthat maps destination prefixes to next hops. The forwarding decision is a per-packet operationwhichthat 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 destination address is compared to the prefixes of the routing table: the entry with the most specific prefix containing the destination address of the packet is chosen, and the packet is forwarded to the associatednext-hop.next hop. Next-hop routing is a simple,well understoodwell-understood paradigm that works satisfactorily in a large number of cases.</t> <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 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—-- theToSType of Service (ToS) octet and, of course, the source address.</t> <t>Source-specific routing <xreftarget="SS-ROUTING"/>,target="SS-ROUTING" format="default"/>, or Source Address Dependent Routing (SADR), is a modest extension to next-hop routing where the forwarding decision depends not only on the destination address but also on the source address of the packet being routed, which makes it possible for two packets with the same destination but different source addresses to be routed following different paths.</t> <t>This document describes a source-specific routing extension for the Babel routing protocol <xreftarget="RFC8966"/>.target="RFC8966" format="default"/>. This involves minor changes to the data structures, which must include a source prefix in addition to the destination prefix already present, and some changes to the Update, RouteRequestRequest, and Seqno Request TLVs, which are extended with a source prefix. The source prefix is encoded using a mandatory sub-TLV (<xreftarget="RFC8966"/> Section 4.4).</t>target="RFC8966" sectionFormat="comma" section="4.4"/>).</t> <sectiontitle="Applicationnumbered="true" toc="default"> <name>Application tomultihoming">Multihoming</name> <t>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".</t> <t>Classical multihoming consistsinof 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 <xreftarget="BCP84"/>.</t>target="BCP84" format="default"/>.</t> <t>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.</t> <t>The issue of choosing a suitable source address is a decision local to the sendinghost,host and is 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 <xreftarget="RFC3484"/>target="RFC6724" format="default"/> or in parallel <xreftarget="RFC8305"/>.target="RFC8305" format="default"/>. 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 makingavailableall of the potential source and destination addresses available tohigher layerhigher-layer protocols, either at the transport layer <xreftarget="RFC8684"/>target="RFC8684" format="default"/> <xreftarget="RFC4960"/>,target="RFC4960" format="default"/> or at theapplicatonapplication layer <xreftarget="RFC8445"/>.</t>target="RFC8445" format="default"/>.</t> <t>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.</t> </section> <sectiontitle="Other applications">numbered="true" toc="default"> <name>Other Applications</name> <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 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.</t> <t>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.</t> <t>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.</t> <t>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)(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).</t> </section> <sectiontitle="Specificityanchor="specificity" numbered="true" toc="default"> <name>Specificity ofprefix pairs" anchor="specificity">Prefix Pairs</name> <t>In ordinary next-hop routing, when multiple routing table entries match the destination of a packet, the "longest prefix rule" mandates that the most specificoneentry applies. The reason why this rule makes sense is that the set of prefixes has the following "tree property":<list style="empty"> <t>for</t> <ul empty="true"> <li> For any prefixes P and P', either P and P' are disjoint, or one is more specific than theother.</t> </list></t>other. </li> </ul> <t>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:<list style="empty"> <t>(2001:db8:0:1::/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 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 nonaturalnatural, unambiguous way to interpret a routing table such as the following:</t><figure><artwork><![CDATA[<artwork name="" type=""><![CDATA[ destination source next-hop 2001:db8:0:1::/64 ::/0 A ::/0 2001:db8:0:2::/64 B]]></artwork></figure>]]></artwork> <t>Amore refinedfiner orderingoverof pairs of prefixes is required in order to avoid all ambiguities. There are two natural choices:thedestination-first ordering, where (D,S) is more specific than (D',S') when<list style="symbols"> <t>D</t> <ul spacing="normal"> <li>D is strictly more specific thanD'; or</t> <t>D = D'D', or</li> <li>D = D', and S is more specific thanS',</t> </list>S'</li> </ul> <t> and, symmetrically,thesource-first ordering, in which sources are compared first and destinations second.</t> <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 sameordering,ordering lest persistent routing loops occur. Indeed, consider the following topology:</t><figure><artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ A --- B --- C --- D]]></artwork></figure>]]></artwork> <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 B usesthedestination-firstordering,ordering while C usesthesource-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 towardsA,A and would therefore loop indefinitely between B and C.</t> <t>This document mandates (<xreftarget="forwarding"/>)target="forwarding" format="default"/>) that all routers usethedestination-first ordering, which is generally believed to be more useful thanthesource-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:</t><figure><artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ (::/0, S) (D, ::/0) Internet --- A --- B --- N]]></artwork></figure>]]></artwork> <t>A announces a source-specific default route with source S (::/0, S), while B announces anon-specificnonspecific route to prefix D. Consider what happens to a packet with adesinationdestination in D and a source in S. Withthedestination-first ordering, the packet is routed towards the network N, which is the only way it can possibly reach its destination. Withthesource-first ordering, on the other hand, the packet is sent towards the Internet, with no hopetoof everreachreaching its destination in N.</t> </section> </section> <sectiontitle="Specificationnumbered="true" toc="default"> <name>Specification ofRequirements"> <t>TheRequirements</name> <t> The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shownhere.</t>here. </t> </section> <sectiontitle="Data Structures">numbered="true" toc="default"> <name>Data Structures</name> <t>A number of the conceptual data structures described inSection 3.2 of<xreftarget="RFC8966"/>target="RFC8966" sectionFormat="of" section="3.2"/> contain a destination prefix. This specification extends these data structures with a source prefix. Data from the original protocol, which do not specify a source prefix, are stored with azero lengthzero-length source prefix, which matchesexactlythe exact same set of packets as the original, non-source-specific data.</t> <sectiontitle="Thenumbered="true" toc="default"> <name>The SourceTable">Table</name> <t>Every Babel node maintains a source table, as described in <xreftarget="RFC8966"/> Section 3.2.5.target="RFC8966" sectionFormat="comma" section="3.2.5"/>. A source-specific Babel node extends this table with the following field:<list style="symbols"> <t>The</t> <ul spacing="normal"> <li>The source prefix (sprefix, splen) specifying the source address of packets to which this entryapplies.</t> </list></t>applies.</li> </ul> <t>The source table is now indexed by 5-tuples of the form (prefix, plen, sprefix, splen, router-id).</t> <t>Note that the route entry contains a source (seesections 2Sections <xref target="RFC8966" section="2" sectionFormat="bare"/> and3.2.5<xref target="RFC8966" sectionFormat="bare" section="3.2.5" /> of <xreftarget="RFC8966"/>) whichtarget="RFC8966" format="default"/>) that itself contains both destination and source prefixes. These are two differentconcepts,concepts and must not be confused.</t> </section> <sectiontitle="Thenumbered="true" toc="default"> <name>The RouteTable">Table</name> <t>Every Babel node maintains a route table, as described in <xreftarget="RFC8966"/> Section 3.2.6.target="RFC8966" sectionFormat="comma" section="3.2.6"/>. Each route table entry contains, 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 the form (prefix, plen, sprefix, splen, neighbour), where the first four components are obtained from the source.</t> </section> <sectiontitle="Thenumbered="true" toc="default"> <name>The Table of Pending SeqnoRequests">Requests</name> <t>Every Babel node maintains a table of pending seqno requests, as described in <xreftarget="RFC8966"/>, Section 3.2.7.target="RFC8966" sectionFormat="comma" section="3.2.7"/>. A source-specific Babel node extends this table with the following entry:</t><t><list style="symbols"> <t>The<ul spacing="normal"> <li>The source prefix (sprefix, splen) beingrequested.</t> </list></t>requested.</li> </ul> <t>The table of pending seqno requests is now indexed by 5-tuples of the form (prefix, plen, sprefix, splen, router-id).</t> </section> </section> <sectiontitle="Data Forwarding" anchor="forwarding">anchor="forwarding" numbered="true" toc="default"> <name>Data Forwarding</name> <t>As noted in <xreftarget="specificity"/> above,target="specificity" format="default"/>, source-specific tables can, in general, be ambiguous, and all routers in a routing domain must use the same algorithm for choosing applicable routes. An implementation of the extension described in this documentMUST<bcp14>MUST</bcp14> choose routing table entries by usingthedestination-first ordering, wherearouting table entry R1 is preferred toarouting table entry R2 when either R1's destination prefix is more specific thanR2's,R2's or the destination prefixes 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 must take care that any lower layer that performs packet forwarding obeythisthese semantics. More precisely:</t><t><list style="symbols"> <t>if<ul spacing="normal"> <li>if the lower layers implementthedestination-first ordering, then the Babel implementationSHOULD<bcp14>SHOULD</bcp14> use themdirectly;</t> <t>ifdirectly;</li> <li>if the lower layers can hold source-specificroutes,routes but not with the right semantics, then the Babel implementationMUST<bcp14>MUST</bcp14> either silently ignore any source-specificroutes,routes or disambiguate the routing table by using a suitable disambiguation algorithm (see Section V.B of <xreftarget="SS-ROUTING"/>target="SS-ROUTING" format="default"/> for such analgorithm);</t> <t>ifalgorithm);</li> <li>if the lower layers cannot hold source-specific routes, then a Babel implementationMUST<bcp14>MUST</bcp14> silently ignore any source-specificroutes.</t> </list></t>routes.</li> </ul> </section> <sectiontitle="Protocol Operation">numbered="true" toc="default"> <name>Protocol Operation</name> <t>This extension does not fundamentally change the operation of the Babel protocol, and we therefore only describe differences between the original protocol and the extended protocol.</t> <t>In the original protocol, three TLVs carry a destination prefix:Updates,Update, RouteRequestsRequest, and SeqnoRequests.Request TLVs. This specification extends these messages so that they may carry a Source Prefix sub-TLV, as described in <xreftarget="protocol-encoding"/> below.target="protocol-encoding" format="default"/>. The sub-TLV is marked asmandatory,mandatory so that an unextended implementation will silently ignore the whole enclosing TLV. A node obeying this specificationMUST NOT<bcp14>MUST NOT</bcp14> send a TLV with a zero-length sourceprefix:prefix; instead, it sends a TLV with no Source Prefix sub-TLV. Conversely, an extended implementationMUST<bcp14>MUST</bcp14> interpret an unextended TLV as carrying a source prefix of zero length. Taken together, these properties ensure interoperability between the original and extended protocols (see <xreftarget="compatibility"/> below).</t>target="compatibility" format="default"/>).</t> <sectiontitle="Protocol Messages">numbered="true" toc="default"> <name>Protocol Messages</name> <t>This extension allows three TLVs of the original Babel protocol to carry a source prefix: Update TLVs, Route Request TLVs, and Seqno Request TLVs.</t> <t>In order to advertise a route with a non-zero length source prefix, a node sends a source-specificUpdate,update, i.e., anUpdateupdate with a Source Prefix sub-TLV. When a node receives a source-specificUpdateupdate (prefix, source prefix, router-id, seqno, metric) from a neighbour neigh, it behaves as described in <xreftarget="RFC8966"/> Section 3.5.3,target="RFC8966" sectionFormat="comma" section="3.5.3"/>, except that the entry under consideration is indexed by (prefix, plen, sprefix, splen, neigh) rather than just (prefix, plen, neigh).</t> <t>Similarly, when a node needs to send aRequestrequest of either kind that applies to a route with a non-zero length source prefix, it sends a source-specificRequest,request, i.e., aRequestrequest with a Source Prefix sub-TLV. When a node receives a source-specificRequest,request, it behaves as described inSection 3.8 of<xreftarget="RFC8966"/>,target="RFC8966" sectionFormat="of" section="3.8"/>, except that the request applies to theRoute Tableroute table entry carrying the source prefix indicated by the Source Prefix sub-TLV.</t> </section> <sectiontitle="Wildcard Messages">numbered="true" toc="default"> <name>Wildcard Messages</name> <t>In the original protocol, theAddress Encodingaddress encoding (AE) value 0 is used for wildcard messages: messages that apply to allroutes,routes of any address family and with any destination prefix. Wildcard messages are allowed in 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 wildcardRoute Requestsroute requests are used to request a full dump of theRoute Tableroute table from a given node. Wildcard messages are intended to apply to all routes, including routes decorated with additional data and AE values to be defined by futureextensions, and henceextensions; hence, this specification extends wildcard operations to apply to all routes, whatever the value of the source prefix.</t> <t>More precisely, a node receiving anUpdateupdate with the AE field set to 0 and the Metric field set to infinity (a wildcard retraction)MUST<bcp14>MUST</bcp14> apply the route acquisition procedure described inSection 3.5.3 of<xreftarget="RFC8966"/>target="RFC8966" sectionFormat="of" section="3.5.3"/> to all of the routes that it has learned from the sending node, whatever the value of the source prefix. A nodeMUST NOT<bcp14>MUST NOT</bcp14> send a wildcard retraction with an attached source prefix, and a node that receives a wildcard retraction with a source prefixMUST<bcp14>MUST</bcp14> ignore the retraction.</t> <t>Similarly, a node that receives a route request with the AE field set to 0 (a wildcard route request)SHOULD<bcp14>SHOULD</bcp14> send a full routing table dump, including routes with a non-zero length source prefix. A nodeMUST NOT<bcp14>MUST NOT</bcp14> send a wildcard request that carries a source prefix, and a node receiving a wildcard request with a source prefixMUST<bcp14>MUST</bcp14> ignore the request.</t> </section> </section> <sectiontitle="Compatibilityanchor="compatibility" numbered="true" toc="default"> <name>Compatibility with thebase protocol" anchor="compatibility">Base Protocol</name> <t>The protocol extension defined in this document is, to a great extent, interoperable with the base protocol defined in <xreftarget="RFC8966"/>target="RFC8966" format="default"/> (and all previously standardised extensions). More precisely, if non-source-specific routers and source-specific routers are mixed in a single routing domain, Babel's loop-avoidance properties are preserved, and, in particular, no persistent routing loops will occur.</t> <t>However, this extension is encoded using mandatory sub-TLVs, introduced in <xreftarget="RFC8966"/>,target="RFC8966" format="default"/>, and therefore is not compatible with the older version of the BabelRouting Protocolrouting protocol <xreftarget="RFC6126"/>target="RFC6126" format="default"/>, which does not support mandatory sub-TLVs. Consequently, this extensionMUST NOT<bcp14>MUST NOT</bcp14> be used in a routing domain in which some routers implementRFC 6126, otherwise<xref target="RFC6126"/>; otherwise, persistent routing loops may occur.</t> <sectiontitle="Starvationnumbered="true" toc="default"> <name>Starvation andBlackholes">Blackholes</name> <t>In general, the discarding of source-specific routes by non-source-specific routers will cause route starvation. Intuitively, unless there are enough non-source-specific routes in the network, non-source-specific routers will sufferstarvation,starvation and discard packets for destinations that are only announced by source-specific routers.</t> <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 avoiding starvation is to build a connected source-specific backbone that includes all of the edgerouters,routers and announce a non-source-specific default route towards the backbone.</t> </section> </section> <sectiontitle="Protocol Encoding" anchor="protocol-encoding">anchor="protocol-encoding" numbered="true" toc="default"> <name>Protocol Encoding</name> <t>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,aRouteRequestRequest, oraSeqno Request TLV to match a source-specific entry of theRoute Table,route table in conjunction with the destination prefix natively carried by these TLVs.</t> <t>Since a source-specific routing entry ischaracterizedcharacterised by a single destination prefix and a single source prefix, a source-specificcontainsmessage contains exactly one Source Prefix sub-TLV. A nodeMUST NOT<bcp14>MUST NOT</bcp14> 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 TLVMUST<bcp14>MUST</bcp14> ignore the TLV. ItMAY<bcp14>MAY</bcp14> ignore the whole packet.</t> <sectiontitle="Sourcenumbered="true" toc="default"> <name>Source Prefixsub-TLV"> <figure><artwork><![CDATA[Sub-TLV</name> <artwork name="" type="" align="left" alt=""><![CDATA[ 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 128 | Length | Source Plen | Source Prefix... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-]]></artwork></figure>]]></artwork> <t>Fields:<list style="hanging" hangIndent="10"> <t hangText="Type">Set</t> <dl newline="false" spacing="normal" indent="15"> <dt>Type</dt> <dd>Set to 128 to indicate a Source Prefixsub-TLV.</t> <t hangText="Length">Thesub-TLV.</dd> <dt>Length</dt> <dd>The length of the body, in octets, exclusive of the Type and Lengthfields.</t> <t hangText="Source Plen">Thefields.</dd> <dt>Source Plen</dt> <dd>The length of the advertised source prefix, in bits. ThisMUST NOT<bcp14>MUST NOT</bcp14> be0.</t> <t hangText="Source Prefix">The0.</dd> <dt>Source Prefix</dt> <dd>The source prefix being advertised. This field's size is (Source Plen)/8 octets roundedupwards.</t> </list> </t>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 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-TLVMUST<bcp14>MUST</bcp14> be silently ignored.</t> <t>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 a Source Prefix sub-TLV, then the whole enclosing TLVMUST<bcp14>MUST</bcp14> be ignored. If a TLV contains multiple Source Prefix sub-TLVs, then the whole TLVMUST<bcp14>MUST</bcp14> be ignored.</t> <t>Note that this sub-TLV is a mandatory sub-TLV. Therefore, as described inSection 4.4 of<xreftarget="RFC8966"/>,target="RFC8966" sectionFormat="of" section="4.4"/>, the whole TLVMUST<bcp14>MUST</bcp14> be ignored if that sub-TLV is not understood (or malformed).</t> </section> <sectiontitle="Source-specific Update">numbered="true" toc="default"> <name>Source-Specific Update</name> <t>The source-specificUpdateupdate is an Update TLV with a Source Prefix sub-TLV. It advertises or retracts source-specific routes in the same manner as routes with non-source-specificUpdatesupdates (see <xreftarget="RFC8966"/>).target="RFC8966" format="default"/>). A wildcard retraction(Update(update with AE equal to 0)MUST NOT<bcp14>MUST NOT</bcp14> carry a Source Prefix sub-TLV.</t> <t>Babel uses a stateful compression scheme to reduce the size taken by destination prefixes inupdateUpdate TLVs (seeSection 4.5 of<xreftarget="RFC8966"/>).target="RFC8966" sectionFormat="of" section="4.5"/>). The source prefix defined by this extension is not compressed. On the other hand, compression is allowed for the destination prefixes carried by source-specific updates. As described inSection 4.5 of<xreftarget="RFC8966"/>,target="RFC8966" sectionFormat="of" section="4.5"/>, unextended implementations will correctly update their parser state while otherwise ignoring the whole TLV.</t> </section> <sectiontitle="Source-specificanchor="ss-request" numbered="true" toc="default"> <name>Source-Specific RouteRequest" anchor="ss-request">Request</name> <t>A source-specificRoute Requestroute request is a Route Request TLV with a Source Prefix sub-TLV. It prompts the receiver to send an update for a given pair of destination and source prefixes, as described inSection 3.8.1.1 of<xreftarget="RFC8966"/>.target="RFC8966" sectionFormat="of" section="3.8.1.1"/>. A wildcard request(Route Request(route request with AEequalsequal to 0)MUST NOT<bcp14>MUST NOT</bcp14> carry a Source Prefix sub-TLV; if a wildcard request with a Source Prefix sub-TLV is received, then the requestMUST<bcp14>MUST</bcp14> be ignored.</t> </section> <sectiontitle="Source-Specificnumbered="true" toc="default"> <name>Source-Specific SeqnoRequest">Request</name> <t>A source-specificSeqno Requestseqno request is a Seqno Request TLV with a Source Prefix sub-TLV. It requests that the receiving nodetoperform the procedure described inSection 3.8.1.2 of<xreftarget="RFC8966"/>,target="RFC8966" sectionFormat="of" section="3.8.1.2"/> but applied to a pair consisting of a destination and source prefix.</t> </section> </section> <sectiontitle="IANA Considerations">numbered="true" toc="default"> <name>IANA Considerations</name> <t>IANA has allocated sub-TLV number 128 for the Source Prefix sub-TLV in theBabel sub-TLV types"Babel Sub-TLV Types" registry.</t> </section> <sectiontitle="Security considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>The extension defined in this document adds a new sub-TLV to three sub-TLVs already present in the original Babelprotocol,protocol and does not change the security properties of the protocol itself. However, the additional flexibility provided by source-specific routing might invalidate the assumptions made by some network administrators, which could conceivably lead to security issues.</t> <t>For example, a network administrator might be tempted to abuse route filtering(Appendix C of <xref target="RFC8966"/>)(<xref target="RFC8966" sectionFormat="of" section="C"/>) as a security mechanism. Unless the filtering rules are designed to take source-specific routing 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 protected. A network administrator might also assume that no route is more specific than a hostroute,route and use a host route in order to direct traffic for a given destination through a security device (e.g., a firewall); source-specific routing invalidates this assumption,andand, in sometopologiestopologies, announcing a source-specific route might conceivably be used to bypass the security device.</t> </section><section title="Acknowledgments"> <t>The authors are indebted to Donald Eastlake, Joel Halpern, and Toke Hoiland-Jorgensen for their help with this document.</t> </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> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <referencegroup anchor="BCP84" target="https://www.rfc-editor.org/info/bcp84"> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3704.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8704.xml"/> </referencegroup> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8966.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> </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><references> <name>Informative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6126.xml"/> <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"/> <dateyear="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"/>year="2015" month="May"/> </front> <seriesInfoname="RFC" value="8305"/> <seriesInfoname="DOI"value="10.17487/RFC8305"/>value="10.1109/IFIPNetworking.2015.7145305"/> <refcontent>IFIP Networking Conference</refcontent> </reference><reference anchor="RFC8684" target="https://www.rfc-editor.org/info/rfc8684"> <front> <title>TCP Extensions<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6724.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8305.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8684.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8445.xml"/> </references> </references> <section numbered="false" toc="default"> <name>Acknowledgments</name> <t>The authors are indebted to <contact fullname="Donald Eastlake"/>, <contact fullname="Joel Halpern"/>, and <contact fullname="Toke Hoiland-Jorgensen"/> forMultipath Operationtheir help withMultiple 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"> <front> <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title> <author initials="A." surname="Keranen" fullname="A. Keranen"/> <author initials="C." surname="Holmberg" fullname="C. Holmberg"/> <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>this document.</t> </section> </back> </rfc>