# Source-specific routing

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Source-specific_routing
> Markdown URL: https://mediated.wiki/source/Source-specific_routing.md
> Source: https://en.wikipedia.org/wiki/Source-specific_routing
> Source revision: 1310029533
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

Not to be confused with [Source routing](/source/Source_routing).

**Source-specific routing**,[1] also called **source-address dependent routing** (**SADR**),[2] is a [routing](/source/Routing) technique in which a routing decision is made by looking at the source address of a [packet](/source/Network_packet) in addition to its destination address. The main application of source-specific routing is to allow a cheap form of [multihoming](/source/Multihoming) without the need for provider-independent addresses or any cooperation from upstream ISPs.

## The problem

Incorrect source when multihoming

In traditional *next-hop routing*, a packet is routed according to its destination only, towards the closest router that announces a route that matches that destination. Consider a [multihomed](/source/Multihoming) end-user network connected to two ISPs, BT&T and PacketCast; such a network will typically have two *edge routers*, each of which is connected to one ISP.

Both edge routers announce a default route, meaning that they are willing to accept packets destined for the Internet. If a packet with a source in BT&T's network is routed through PacketCast's edge router, PacketCast will assume it is a [spoofed packet](/source/IP_address_spoofing), and drop it in accordance to BCP 38.[3]

## Multihoming with source-specific routing

With source-specific routing, each edge router announces a *source-specific default route*: a route that applies to packets destined to the Internet but only if their source is in a given prefix. The effect is that each edge router only attracts packets that have a source address in that provider's prefix.

## Desirable host changes

With source-specific routing, each host interface has multiple addresses, one per provider-dependent prefix. For outgoing traffic, host software must choose the right source address. Various techniques for doing that have been suggested, at the network layer,[4] above the network layer (see [Shim6](/source/Shim6)), or by using multipath techniques at the higher layers (see [Multipath TCP](/source/Multipath_TCP) and Multipath [Mosh](/source/Mosh_(software))[5]).

## Support in routing protocols

On a network with a single edge router, it is possible to implement source-specific routing by manual manipulation of routing tables.[6] With multiple routers, explicit support for source-specific routing is required in the routing protocol.

As of early 2016, there are two routing protocols that implement support for source-specific routing:

- The [Babel routing protocol](/source/Babel_(protocol)) has support for source-specific routing for both IPv4 and IPv6;[7] this is implemented for IPv6 in *babeld* and in [BIRD](/source/Bird_Internet_routing_daemon) (earlier versions of *babeld* supported source-specific routing for IPv4[8]);

- There exists an implementation of [IS-IS](/source/IS-IS) with support for source-specific routing for IPv6 only.[9]

The IETF Homenet protocol suite requires support for source-specific routing in its routing protocol.[10]

## References

1. **[^](#cite_ref-1)** Matthieu Boutier; Juliusz Chroboczek (2015). *Source-specific routing*. *Proc. IFIP Networking 2015*. [arXiv](/source/ArXiv_(identifier)):[1403.0445](https://arxiv.org/abs/1403.0445). [Bibcode](/source/Bibcode_(identifier)):[2014arXiv1403.0445B](https://ui.adsabs.harvard.edu/abs/2014arXiv1403.0445B).

1. **[^](#cite_ref-2)** Trøan, Ole; Colitti, Lorenzo (4 September 2013). ["Draft-troan-homenet-sadr-01"](https://tools.ietf.org/html/draft-troan-homenet-sadr-01).

1. **[^](#cite_ref-3)** [RFC](/source/RFC_(identifier)) [2827](https://www.rfc-editor.org/rfc/rfc2827)

1. **[^](#cite_ref-4)** [RFC](/source/RFC_(identifier)) [6724](https://www.rfc-editor.org/rfc/rfc6724)

1. **[^](#cite_ref-5)** Matthieu Boutier; Juliusz Chroboczek (2015). "User-space multipath UDP in Mosh". [arXiv](/source/ArXiv_(identifier)):[1502.02402](https://arxiv.org/abs/1502.02402) [[cs.NI](https://arxiv.org/archive/cs.NI)].

1. **[^](#cite_ref-6)** [http://www.lartc.org/](http://www.lartc.org/), Section 4.2

1. **[^](#cite_ref-7)** [RFC](/source/RFC_(identifier)) [9079](https://www.rfc-editor.org/rfc/rfc9079)

1. **[^](#cite_ref-8)** ["\[Babel-users\] ANNOUNCE: Babeld-1.10"](https://alioth-lists.debian.net/pipermail/babel-users/2021-April/003818.html). 25 April 2021.

1. **[^](#cite_ref-9)** Baker, Fred; Lamparter, David (18 July 2017). ["Draft-baker-ipv6-isis-DST-SRC-routing-07"](https://tools.ietf.org/html/draft-baker-ipv6-isis-dst-src-routing-07).

1. **[^](#cite_ref-10)** [RFC](/source/RFC_(identifier)) [7368](https://www.rfc-editor.org/rfc/rfc7368), Section 3.2.4

---
Adapted from the Wikipedia article [Source-specific routing](https://en.wikipedia.org/wiki/Source-specific_routing) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Source-specific_routing?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
