From 345a1a35b4b3862432daa91b6bf4902a296c22db Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Thu, 22 Aug 2024 11:29:11 +0200 Subject: [PATCH] zebra: fix removing 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 --- zebra/zebra_vrf.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 34db978ead33..b3ae1f337261 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -391,6 +391,11 @@ static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi, memset(&p, 0, sizeof(p)); p.family = afi2family(afi); + if (route_node_lookup_maynull(zvrf->table[afi][safi], &p)) + /* do not override the existing default route */ + return; + + /* create a fake default route */ rn = srcdest_rnode_get(zvrf->table[afi][safi], &p, NULL); zebra_rib_create_dest(rn); }