summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2022-05-20 15:28:59 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2022-10-24 11:50:13 +0200
commit0e83283c661a22874e3ee5bc115787a6d17dc039 (patch)
tree25702cf57eae5f46024fe0b03ba83cd809a613d2
parentisisd: allow nexthop lookup on interface only (diff)
downloadfrr-0e83283c661a22874e3ee5bc115787a6d17dc039.tar.xz
frr-0e83283c661a22874e3ee5bc115787a6d17dc039.zip
isisd: apply fast-reroute when an interface falls down
Backup routes are sent to zebra by routing daemons such as isisd so that the dataplane can pre-install them with a lower priority. When an interface comes down, the associated primary routes are discarded by the dataplane and the backup ones take over. However, some dataplanes (e.g. Netlink ones) do not pre-install the backup routes. Associated prefixes have no next-hop until SPF is recomputed. Apply fast-reroute as soon as an interface falls down by sending route UPDATEs to zebra. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
-rw-r--r--isisd/isis_circuit.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 7f5426abf..65332c76b 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -1636,9 +1636,14 @@ static int isis_ifp_up(struct interface *ifp)
static int isis_ifp_down(struct interface *ifp)
{
+ afi_t afi;
struct isis_circuit *circuit = ifp->info;
if (circuit) {
+ for (afi = AFI_IP; afi <= AFI_IP6; afi++)
+ isis_circuit_switchover_routes(
+ circuit, afi == AFI_IP ? AF_INET : AF_INET6,
+ NULL, ifp->ifindex);
isis_csm_state_change(IF_DOWN_FROM_Z, circuit, ifp);
SET_FLAG(circuit->flags, ISIS_CIRCUIT_FLAPPED_AFTER_SPF);