mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 18:04:03 +00:00
zebra: trust directly connected kernel/system routes
We made the decision to explicitly trust kernel and system routes
of every other type with 058c16b7e2
.
So, we should trust directly connected routes the same way, assuming
the interface exists.
Old Behavior:
K 2.2.2.1/32 [0/0] is directly connected, unknown inactive, 00:00:39
New Behavior:
K>* 2.2.2.1/32 [0/0] is directly connected, test1, 00:00:03
As a bonus, this fixes the issues we were seeing with not removing
directly connected routes of certain interface types when
those interfaces go down/are deleted.
Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
parent
200334ecbb
commit
fc8a02c45f
@ -1637,7 +1637,16 @@ static unsigned nexthop_active_check(struct route_node *rn,
|
|||||||
switch (nexthop->type) {
|
switch (nexthop->type) {
|
||||||
case NEXTHOP_TYPE_IFINDEX:
|
case NEXTHOP_TYPE_IFINDEX:
|
||||||
ifp = if_lookup_by_index(nexthop->ifindex, nexthop->vrf_id);
|
ifp = if_lookup_by_index(nexthop->ifindex, nexthop->vrf_id);
|
||||||
if (ifp && if_is_operative(ifp))
|
/*
|
||||||
|
* If the interface exists and its operative or its a kernel
|
||||||
|
* route and interface is up, its active. We trust kernel routes
|
||||||
|
* to be good.
|
||||||
|
*/
|
||||||
|
if (ifp
|
||||||
|
&& (if_is_operative(ifp)
|
||||||
|
|| (if_is_up(ifp)
|
||||||
|
&& (re->type == ZEBRA_ROUTE_KERNEL
|
||||||
|
|| re->type == ZEBRA_ROUTE_SYSTEM))))
|
||||||
SET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
SET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
||||||
else
|
else
|
||||||
UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
||||||
|
Loading…
Reference in New Issue
Block a user