]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Add the zvrf pointer to the 'struct static_route'
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 9 Jan 2018 00:11:17 +0000 (19:11 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 12 Jan 2018 14:22:46 +0000 (09:22 -0500)
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_static.c
zebra/zebra_static.h
zebra/zebra_vty.c

index 7fdc4908b4c27d9156af2f099665c674c616bb75..3423518bba58a2c85bd7279a9959b56616c9d9de 100644 (file)
@@ -155,7 +155,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
                re->metric = 0;
                re->mtu = 0;
                re->vrf_id = si->vrf_id;
-               re->nh_vrf_id = si->vrf_id;
+               re->nh_vrf_id = si->nh_vrf_id;
                re->table =
                        si->vrf_id
                                ? (zebra_vrf_lookup_by_id(si->vrf_id))->table_id
@@ -379,6 +379,7 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
                     struct prefix_ipv6 *src_p, union g_addr *gate,
                     const char *ifname, enum static_blackhole_type bh_type,
                     route_tag_t tag, u_char distance, struct zebra_vrf *zvrf,
+                    struct zebra_vrf *nh_zvrf,
                     struct static_nh_label *snh_label)
 {
        struct route_node *rn;
@@ -440,6 +441,8 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
        si->bh_type = bh_type;
        si->tag = tag;
        si->vrf_id = zvrf_id(zvrf);
+       si->nh_vrf_id = zvrf_id(nh_zvrf);
+
        if (ifname)
                strlcpy(si->ifname, ifname, sizeof(si->ifname));
        si->ifindex = IFINDEX_INTERNAL;
@@ -494,7 +497,7 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
        else {
                struct interface *ifp;
 
-               ifp = if_lookup_by_name(ifname, zvrf_id(zvrf));
+               ifp = if_lookup_by_name(ifname, zvrf_id(nh_zvrf));
                if (ifp && ifp->ifindex != IFINDEX_INTERNAL) {
                        si->ifindex = ifp->ifindex;
                        static_install_route(afi, safi, p, src_p, si);
index 68fe73b0a348971c377d91f972769f75b0b23b30..234e3e4036060f0e4927a8bfdbed5e86f055bd20 100644 (file)
@@ -54,6 +54,7 @@ struct static_route {
 
        /* VRF identifier. */
        vrf_id_t vrf_id;
+       vrf_id_t nh_vrf_id;
 
        /* Administrative distance. */
        u_char distance;
@@ -89,6 +90,7 @@ extern int static_add_route(afi_t, safi_t safi, u_char type, struct prefix *p,
                            const char *ifname,
                            enum static_blackhole_type bh_type, route_tag_t tag,
                            u_char distance, struct zebra_vrf *zvrf,
+                           struct zebra_vrf *nh_zvrf,
                            struct static_nh_label *snh_label);
 
 extern int static_delete_route(afi_t, safi_t safi, u_char type,
index 45e204dcc9038711f6acd5278564a9498ad4d742..ece4428c436e2a1fdc51b65a603c950d73831aa4 100644 (file)
@@ -233,7 +233,8 @@ static int zebra_static_route_leak(struct vty *vty,
 
        if (!negate)
                static_add_route(afi, safi, type, &p, src_p, gatep, ifname,
-                                bh_type, tag, distance, zvrf, &snh_label);
+                                bh_type, tag, distance, zvrf, nh_zvrf,
+                                &snh_label);
        else
                static_delete_route(afi, safi, type, &p, src_p, gatep, ifname,
                                    tag, distance, zvrf, &snh_label);