From: Louis Scalbert Date: Thu, 22 Aug 2024 09:29:11 +0000 (+0200) Subject: zebra: fix removed default route at vrf enabling X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5cde97678e85d51a90d8bf09149cd1b3ec6a7e82;p=matthieu%2Ffrr.git zebra: fix removed default route at vrf enabling When a routing table (RT) already has a default route before being assigned to a VRF, the default route vanishes in zebra after the VRF assignment. > root@router:~# ip route add blackhole default table 100 > root@router:~# ip route show table 100 > blackhole default > root@router:~# vtysh -c 'show ip route table 100' > [...] > VRF default table 100: > K>* 0.0.0.0/0 [0/0] unreachable (blackhole), 00:00:05 > root@router:~# ip l add red type vrf table 100 > root@router:~# vtysh -c 'show ip route table 100' > root@router:~# Do not override the default route if it exists. Signed-off-by: Louis Scalbert --- diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 7e53a2e804..faafcf7892 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -457,8 +457,11 @@ static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi, memset(&p, 0, sizeof(p)); p.family = afi2family(afi); + /* create a fake default route or get the existing one */ rn = srcdest_rnode_get(zvrf->table[afi][safi], &p, NULL); - zebra_rib_create_dest(rn); + if (!rn->info) + /* do not override the existing default route */ + zebra_rib_create_dest(rn); } /* Allocate new zebra VRF. */