summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--zebra/zebra_rib.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index a07036e5..b4ea2424 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -1124,8 +1124,16 @@ rib_install_kernel (struct route_node *rn, struct rib *rib)
{
int ret = 0;
struct nexthop *nexthop, *tnexthop;
+ rib_table_info_t *info = rn->table->info;
int recursing;
+ if (info->safi != SAFI_UNICAST)
+ {
+ for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
+ SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
+ return;
+ }
+
/*
* Make sure we update the FPM any time we send new information to
* the kernel.
@@ -1157,8 +1165,16 @@ rib_uninstall_kernel (struct route_node *rn, struct rib *rib)
{
int ret = 0;
struct nexthop *nexthop, *tnexthop;
+ rib_table_info_t *info = rn->table->info;
int recursing;
+ if (info->safi != SAFI_UNICAST)
+ {
+ for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
+ SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
+ return ret;
+ }
+
/*
* Make sure we update the FPM any time we send new information to
* the kernel.
@@ -1187,9 +1203,12 @@ rib_uninstall_kernel (struct route_node *rn, struct rib *rib)
static void
rib_uninstall (struct route_node *rn, struct rib *rib)
{
+ rib_table_info_t *info = rn->table->info;
+
if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
{
- zfpm_trigger_update (rn, "rib_uninstall");
+ if (info->safi == SAFI_UNICAST)
+ zfpm_trigger_update (rn, "rib_uninstall");
redistribute_delete (&rn->p, rib);
if (! RIB_SYSTEM_ROUTE (rib))
@@ -1306,9 +1325,6 @@ rib_process (struct route_node *rn)
if (! nexthop_active_update (rn, rib, 0))
continue;
- if (info->safi == SAFI_MULTICAST)
- continue;
-
/* Infinit distance. */
if (rib->distance == DISTANCE_INFINITY)
continue;
@@ -1371,7 +1387,8 @@ rib_process (struct route_node *rn)
select, fib);
if (CHECK_FLAG (select->flags, ZEBRA_FLAG_CHANGED))
{
- zfpm_trigger_update (rn, "updating existing route");
+ if (info->safi == SAFI_UNICAST)
+ zfpm_trigger_update (rn, "updating existing route");
redistribute_delete (&rn->p, select);
if (! RIB_SYSTEM_ROUTE (select))
@@ -1414,7 +1431,8 @@ rib_process (struct route_node *rn)
if (IS_ZEBRA_DEBUG_RIB)
rnode_debug (rn, "Removing existing route, fib %p", fib);
- zfpm_trigger_update (rn, "removing existing route");
+ if (info->safi == SAFI_UNICAST)
+ zfpm_trigger_update (rn, "removing existing route");
redistribute_delete (&rn->p, fib);
if (! RIB_SYSTEM_ROUTE (fib))
@@ -1434,7 +1452,8 @@ rib_process (struct route_node *rn)
if (IS_ZEBRA_DEBUG_RIB)
rnode_debug (rn, "Adding route, select %p", select);
- zfpm_trigger_update (rn, "new route selected");
+ if (info->safi == SAFI_UNICAST)
+ zfpm_trigger_update (rn, "new route selected");
/* Set real nexthop. */
nexthop_active_update (rn, select, 1);
@@ -3267,6 +3286,7 @@ static void
rib_close_table (struct route_table *table)
{
struct route_node *rn;
+ rib_table_info_t *info = table->info;
struct rib *rib;
if (table)
@@ -3276,7 +3296,8 @@ rib_close_table (struct route_table *table)
if (!CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
continue;
- zfpm_trigger_update (rn, NULL);
+ if (info->safi == SAFI_UNICAST)
+ zfpm_trigger_update (rn, NULL);
if (! RIB_SYSTEM_ROUTE (rib))
rib_uninstall_kernel (rn, rib);