mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-02 15:13:20 +00:00
zebra: Fix rib_update_table
We should only be operating RIB_UPDATE_IF_CHANGE on types that zebra has control of. We assume that the calling routing protocol is going to take care of their own route changes based upon the interface state change. Also try to re-organize the code a tiny bit to allow it to fit better within a tabed world. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
407c87a6c3
commit
0a16efff9b
@ -2553,27 +2553,29 @@ static void rib_update_table(struct route_table *table,
|
||||
*/
|
||||
RNODE_FOREACH_RE_SAFE(rn, re, next)
|
||||
{
|
||||
if (re->type == ZEBRA_ROUTE_OSPF
|
||||
|| re->type == ZEBRA_ROUTE_OSPF6
|
||||
|| re->type == ZEBRA_ROUTE_BGP)
|
||||
continue; /* protocol will handle. */
|
||||
else if (re->type == ZEBRA_ROUTE_STATIC) {
|
||||
struct nexthop *nh;
|
||||
for (nh = re->nexthop; nh;
|
||||
nh = nh->next)
|
||||
if (!(nh->type
|
||||
== NEXTHOP_TYPE_IPV4
|
||||
|| nh->type
|
||||
== NEXTHOP_TYPE_IPV6))
|
||||
break;
|
||||
struct nexthop *nh;
|
||||
|
||||
/* If we only have nexthops to a
|
||||
* gateway, NHT will
|
||||
* take care.
|
||||
*/
|
||||
if (nh)
|
||||
rib_queue_add(rn);
|
||||
} else
|
||||
if (re->type != ZEBRA_ROUTE_SYSTEM &&
|
||||
re->type != ZEBRA_ROUTE_KERNEL &&
|
||||
re->type != ZEBRA_ROUTE_CONNECT &&
|
||||
re->type != ZEBRA_ROUTE_STATIC)
|
||||
continue;
|
||||
|
||||
if (re->type != ZEBRA_ROUTE_STATIC) {
|
||||
rib_queue_add(rn);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (nh = re->nexthop; nh; nh = nh->next)
|
||||
if (!(nh->type == NEXTHOP_TYPE_IPV4
|
||||
|| nh->type == NEXTHOP_TYPE_IPV6))
|
||||
break;
|
||||
|
||||
/* If we only have nexthops to a
|
||||
* gateway, NHT will
|
||||
* take care.
|
||||
*/
|
||||
if (nh)
|
||||
rib_queue_add(rn);
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user