Merge pull request #3466 from donaldsharp/fib_only

zebra: For rnh handling use actual resolved nexthop
This commit is contained in:
Russ White 2018-12-13 10:35:58 -05:00 committed by GitHub
commit f1663c1eae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -528,8 +528,7 @@ static void zebra_rnh_process_pbr_tables(int family,
*/ */
static bool rnh_nexthop_valid(const struct nexthop *nh) static bool rnh_nexthop_valid(const struct nexthop *nh)
{ {
return ((CHECK_FLAG(nh->flags, NEXTHOP_FLAG_FIB) return (CHECK_FLAG(nh->flags, NEXTHOP_FLAG_FIB)
|| CHECK_FLAG(nh->flags, NEXTHOP_FLAG_RECURSIVE))
&& CHECK_FLAG(nh->flags, NEXTHOP_FLAG_ACTIVE)); && CHECK_FLAG(nh->flags, NEXTHOP_FLAG_ACTIVE));
} }
@ -581,8 +580,7 @@ zebra_rnh_resolve_nexthop_entry(struct zebra_vrf *zvrf, int family,
/* Just being SELECTED isn't quite enough - must /* Just being SELECTED isn't quite enough - must
* have an installed nexthop to be useful. * have an installed nexthop to be useful.
*/ */
for (nexthop = re->ng.nexthop; nexthop; for (ALL_NEXTHOPS(re->ng, nexthop)) {
nexthop = nexthop->next) {
if (rnh_nexthop_valid(nexthop)) if (rnh_nexthop_valid(nexthop))
break; break;
} }
@ -915,7 +913,7 @@ static int send_client(struct rnh *rnh, struct zserv *client, rnh_type_t type,
num = 0; num = 0;
nump = stream_get_endp(s); nump = stream_get_endp(s);
stream_putc(s, 0); stream_putc(s, 0);
for (nh = re->ng.nexthop; nh; nh = nh->next) for (ALL_NEXTHOPS(re->ng, nh))
if (rnh_nexthop_valid(nh)) { if (rnh_nexthop_valid(nh)) {
stream_putl(s, nh->vrf_id); stream_putl(s, nh->vrf_id);
stream_putc(s, nh->type); stream_putc(s, nh->type);