]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: fix removed default route at vrf enabling
authorLouis Scalbert <louis.scalbert@6wind.com>
Thu, 22 Aug 2024 09:29:11 +0000 (11:29 +0200)
committerLouis Scalbert <louis.scalbert@6wind.com>
Mon, 10 Mar 2025 08:54:18 +0000 (09:54 +0100)
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 <louis.scalbert@6wind.com>
zebra/zebra_vrf.c

index 7e53a2e8043519ccd0d508de3127482cbb4addf6..faafcf7892ece490e319640c8d24f4d1686f3c5e 100644 (file)
@@ -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. */