diff options
author | David Lamparter <equinox@opensourcerouting.org> | 2017-08-06 07:50:18 +0200 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2017-08-07 03:17:47 +0200 |
commit | 06e0a0cb3c630c2b221fecd2f081348b36943a6e (patch) | |
tree | 12f1363ab6fe95aad06cfe7ac3f6c9a57f73c63e | |
parent | zebra: static: update on ifindex changes (diff) | |
download | frr-06e0a0cb3c630c2b221fecd2f081348b36943a6e.tar.xz frr-06e0a0cb3c630c2b221fecd2f081348b36943a6e.zip |
zebra: vrf: remove VRF-move static route updating
This was incorrectly implemented to begin with (it only re-added routes,
but didn't remove them) and is now covered in static_ifindex_update.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rw-r--r-- | zebra/interface.c | 10 | ||||
-rw-r--r-- | zebra/zebra_vrf.c | 44 | ||||
-rw-r--r-- | zebra/zebra_vrf.h | 1 |
3 files changed, 4 insertions, 51 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 13ac85d43..c629dfb3f 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -119,8 +119,6 @@ if_zebra_new_hook (struct interface *ifp) zebra_if->ipv4_subnets = route_table_init_with_delegate (&zebra_if_table_delegate); ifp->info = zebra_if; - - zebra_vrf_static_route_interface_fixup (ifp); return 0; } @@ -727,6 +725,8 @@ if_handle_vrf_change (struct interface *ifp, vrf_id_t vrf_id) old_vrf_id = ifp->vrf_id; + static_ifindex_update(ifp, false); + /* Uninstall connected routes. */ if_uninstall_connected (ifp); @@ -750,6 +750,8 @@ if_handle_vrf_change (struct interface *ifp, vrf_id_t vrf_id) /* Install connected routes (in new VRF). */ if_install_connected (ifp); + static_ifindex_update(ifp, true); + /* Due to connected route change, schedule RIB processing for both old * and new VRF. */ @@ -758,8 +760,6 @@ if_handle_vrf_change (struct interface *ifp, vrf_id_t vrf_id) ifp->vrf_id, ifp->name); rib_update (old_vrf_id, RIB_UPDATE_IF_CHANGE); rib_update (ifp->vrf_id, RIB_UPDATE_IF_CHANGE); - - zebra_vrf_static_route_interface_fixup (ifp); } static void @@ -866,8 +866,6 @@ if_up (struct interface *ifp) zlog_debug ("%u: IF %s up, scheduling RIB processing", ifp->vrf_id, ifp->name); rib_update (ifp->vrf_id, RIB_UPDATE_IF_CHANGE); - - zebra_vrf_static_route_interface_fixup (ifp); } /* Interface goes down. We have to manage different behavior of based diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 6b3689105..889c57e6f 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -98,50 +98,6 @@ zebra_vrf_new (struct vrf *vrf) return 0; } -/* - * Moving an interface amongst different vrf's - * causes the interface to get a new ifindex - * so we need to find static routes with - * the old ifindex and replace with new - * ifindex to insert back into the table - */ -void -zebra_vrf_static_route_interface_fixup (struct interface *ifp) -{ - afi_t afi; - safi_t safi; - struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id (ifp->vrf_id); - struct route_table *stable = NULL; - struct route_node *rn = NULL; - struct static_route *si = NULL; - - if (!zvrf) - return; - - for (afi = AFI_IP; afi < AFI_MAX; afi++) - { - for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++) - { - stable = zvrf->stable[afi][safi]; - if (stable) - for (rn = route_top (stable); rn; rn = route_next (rn)) - { - if (rn->info) - { - si = rn->info; - if ((strcmp (si->ifname, ifp->name) == 0) && - (si->ifindex != ifp->ifindex)) - { - si->ifindex = ifp->ifindex; - static_install_route (afi, safi, &rn->p, NULL, si); - } - } - } - } - } - -} - /* Callback upon enabling a VRF. */ static int zebra_vrf_enable (struct vrf *vrf) diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index 96d631d64..8864f1305 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -100,7 +100,6 @@ struct route_table * zebra_vrf_table_with_table_id (afi_t afi, safi_t safi, vrf_id_t vrf_id, u_int32_t table_id); -extern void zebra_vrf_static_route_interface_fixup (struct interface *ifp); extern void zebra_vrf_update_all (struct zserv *client); extern struct zebra_vrf *zebra_vrf_lookup_by_id (vrf_id_t vrf_id); extern struct zebra_vrf *zebra_vrf_lookup_by_name (const char *); |