mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 22:50:14 +00:00
zebra: Allow static non interface based routes to leak
Allow this to work: vrf DONNA ip route 4.3.2.1/32 192.168.1.5 nexthop-vrf EVA The static route code was not properly telling the nexthop resolution code what vrf to use. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
5e21052204
commit
5bdd34db69
@ -397,7 +397,7 @@ static int nexthop_active(afi_t afi, struct route_entry *re,
|
||||
|
||||
if (set) {
|
||||
UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE);
|
||||
zebra_deregister_rnh_static_nexthops(re->vrf_id,
|
||||
zebra_deregister_rnh_static_nexthops(re->nh_vrf_id,
|
||||
nexthop->resolved, top);
|
||||
nexthops_free(nexthop->resolved);
|
||||
nexthop->resolved = NULL;
|
||||
@ -904,7 +904,7 @@ static unsigned nexthop_active_check(struct route_node *rn,
|
||||
memset(&nexthop->rmap_src.ipv6, 0, sizeof(union g_addr));
|
||||
|
||||
/* It'll get set if required inside */
|
||||
ret = zebra_route_map_check(family, re->type, p, nexthop, re->vrf_id,
|
||||
ret = zebra_route_map_check(family, re->type, p, nexthop, re->nh_vrf_id,
|
||||
re->tag);
|
||||
if (ret == RMAP_DENYMATCH) {
|
||||
if (IS_ZEBRA_DEBUG_RIB) {
|
||||
|
@ -1329,7 +1329,7 @@ route_map_result_t zebra_nht_route_map_check(int family, int client_proto,
|
||||
struct nh_rmap_obj nh_obj;
|
||||
|
||||
nh_obj.nexthop = nexthop;
|
||||
nh_obj.vrf_id = re->vrf_id;
|
||||
nh_obj.vrf_id = re->nh_vrf_id;
|
||||
nh_obj.source_protocol = re->type;
|
||||
nh_obj.metric = re->metric;
|
||||
nh_obj.tag = re->tag;
|
||||
|
@ -91,7 +91,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
nh_p.family = AF_INET;
|
||||
nh_p.prefixlen = IPV4_MAX_BITLEN;
|
||||
nh_p.u.prefix4 = si->addr.ipv4;
|
||||
zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
|
||||
zebra_register_rnh_static_nh(si->nh_vrf_id, &nh_p, rn);
|
||||
break;
|
||||
case STATIC_IPV4_GATEWAY_IFNAME:
|
||||
nexthop = route_entry_nexthop_ipv4_ifindex_add(
|
||||
@ -111,7 +111,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
nh_p.family = AF_INET6;
|
||||
nh_p.prefixlen = IPV6_MAX_BITLEN;
|
||||
nh_p.u.prefix6 = si->addr.ipv6;
|
||||
zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
|
||||
zebra_register_rnh_static_nh(si->nh_vrf_id, &nh_p, rn);
|
||||
break;
|
||||
case STATIC_IPV6_GATEWAY_IFNAME:
|
||||
nexthop = route_entry_nexthop_ipv6_ifindex_add(
|
||||
@ -141,7 +141,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
*/
|
||||
if (si->type == STATIC_IPV4_GATEWAY
|
||||
|| si->type == STATIC_IPV6_GATEWAY)
|
||||
zebra_evaluate_rnh(si->vrf_id, nh_p.family, 1,
|
||||
zebra_evaluate_rnh(si->nh_vrf_id, nh_p.family, 1,
|
||||
RNH_NEXTHOP_TYPE, &nh_p);
|
||||
else
|
||||
rib_queue_add(rn);
|
||||
@ -170,7 +170,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
nh_p.family = AF_INET;
|
||||
nh_p.prefixlen = IPV4_MAX_BITLEN;
|
||||
nh_p.u.prefix4 = si->addr.ipv4;
|
||||
zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
|
||||
zebra_register_rnh_static_nh(si->nh_vrf_id, &nh_p, rn);
|
||||
break;
|
||||
case STATIC_IPV4_GATEWAY_IFNAME:
|
||||
nexthop = route_entry_nexthop_ipv4_ifindex_add(
|
||||
@ -190,7 +190,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
nh_p.family = AF_INET6;
|
||||
nh_p.prefixlen = IPV6_MAX_BITLEN;
|
||||
nh_p.u.prefix6 = si->addr.ipv6;
|
||||
zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
|
||||
zebra_register_rnh_static_nh(si->nh_vrf_id, &nh_p, rn);
|
||||
break;
|
||||
case STATIC_IPV6_GATEWAY_IFNAME:
|
||||
nexthop = route_entry_nexthop_ipv6_ifindex_add(
|
||||
@ -222,7 +222,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
|
||||
if (si->type == STATIC_IPV4_GATEWAY
|
||||
|| si->type == STATIC_IPV6_GATEWAY) {
|
||||
rib_addnode(rn, re, 0);
|
||||
zebra_evaluate_rnh(si->vrf_id, nh_p.family, 1,
|
||||
zebra_evaluate_rnh(si->nh_vrf_id, nh_p.family, 1,
|
||||
RNH_NEXTHOP_TYPE, &nh_p);
|
||||
} else
|
||||
rib_addnode(rn, re, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user