diff options
Diffstat (limited to 'net/quagga/files/patch-cvs-4-nexthop_active_update')
-rw-r--r-- | net/quagga/files/patch-cvs-4-nexthop_active_update | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/net/quagga/files/patch-cvs-4-nexthop_active_update b/net/quagga/files/patch-cvs-4-nexthop_active_update new file mode 100644 index 000000000000..11ae35a428d5 --- /dev/null +++ b/net/quagga/files/patch-cvs-4-nexthop_active_update @@ -0,0 +1,47 @@ +--- zebra/zebra_rib.c.orig 2007-06-25 14:17:53.000000000 +0400 ++++ zebra/zebra_rib.c 2007-08-08 11:38:18.000000000 +0400 +@@ -795,27 +795,32 @@ + return CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE); + } + ++/* Iterate over all nexthops of the given RIB entry and refresh their ++ * ACTIVE flag. rib->nexthop_active_num is updated accordingly. If any ++ * nexthop is found to toggle the ACTIVE flag, the whole rib structure ++ * is flagged with ZEBRA_FLAG_CHANGED. The 4th 'set' argument is ++ * transparently passed to nexthop_active_check(). ++ * ++ * Return value is the new number of active nexthops. ++ */ ++ + static int + nexthop_active_update (struct route_node *rn, struct rib *rib, int set) + { + struct nexthop *nexthop; +- int active; ++ int prev_active, new_active; + + rib->nexthop_active_num = 0; + UNSET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); + + for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next) +- { +- active = CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE); +- +- nexthop_active_check (rn, rib, nexthop, set); +- if ((MULTIPATH_NUM == 0 || rib->nexthop_active_num < MULTIPATH_NUM) +- && active != CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) +- SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); +- +- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) +- rib->nexthop_active_num++; +- } ++ { ++ prev_active = CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE); ++ if ((new_active = nexthop_active_check (rn, rib, nexthop, set))) ++ rib->nexthop_active_num++; ++ if (prev_active != new_active) ++ SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); ++ } + return rib->nexthop_active_num; + } + |