diff options
author | Paul Jakma <paul.jakma@sun.com> | 2006-12-08 00:53:14 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2006-12-08 00:53:14 +0000 |
commit | 3c0755dc9772deccff2ba6e9dc0511a9af2b9d1b (patch) | |
tree | 320e64867af564f2f943742f2a895132606f2e16 | |
parent | 95fdcd8a793d6c271996da221c4030d8ee277891 (diff) | |
download | quagga-3c0755dc9772deccff2ba6e9dc0511a9af2b9d1b.tar.bz2 quagga-3c0755dc9772deccff2ba6e9dc0511a9af2b9d1b.tar.xz |
[zebra] Changes of nexthops of static routes didnt take effect
2006-12-08 Piotr Chytla <pch@packetconsulting.pl>
* zebra_rib.c: (static_install_ipv{4,6}) Case where existing
RIB is updated must explicitely rib_addqueue the route_node,
to ensure the update actually takes effect.
-rw-r--r-- | zebra/ChangeLog | 6 | ||||
-rw-r--r-- | zebra/zebra_rib.c | 22 |
2 files changed, 18 insertions, 10 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 0740e756..3ea4f57f 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,9 @@ +2006-12-08 Piotr Chytla <pch@packetconsulting.pl> + + * zebra_rib.c: (static_install_ipv{4,6}) Case where existing + RIB is updated must explicitely rib_addqueue the route_node, + to ensure the update actually takes effect. + 2006-09-13 Tom Everett <tom@khubla.com> * kernel_socket.c (rtm_type_str): ifdef RTM_OLD{ADD,DEL} to diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index acad065a..02c73d12 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1103,20 +1103,20 @@ rib_queue_init (struct zebra_t *zebra) * The queue length is bounded by the maximal size of the routing table, * as a route_node will not be requeued, if already queued. * - * RIBs are submitted via rib_addnode and rib_delnode, which set - * minimal state and then submit route_node to queue for best-path - * selection later. Order of add/delete state changes are preserved for - * any given RIB. + * RIBs are submitted via rib_addnode or rib_delnode which set minimal + * state, or static_install_ipv{4,6} (when an existing RIB is updated) + * and then submit route_node to queue for best-path selection later. + * Order of add/delete state changes are preserved for any given RIB. * * Deleted RIBs are reaped during best-path selection. * * rib_addnode * |-> rib_link or unset RIB_ENTRY_REMOVE |->Update kernel with - * |-> rib_addqueue | best RIB, if required - * | | - * |-> .......................... -> rib_process - * | | - * |-> rib_addqueue |-> rib_unlink + * |-------->| | best RIB, if required + * | | + * static_install->|->rib_addqueue...... -> rib_process + * | | + * |-------->| |-> rib_unlink * |-> set RIB_ENTRY_REMOVE | * rib_delnode (RIB freed) * @@ -1548,6 +1548,7 @@ static_install_ipv4 (struct prefix *p, struct static_ipv4 *si) nexthop_blackhole_add (rib); break; } + rib_queue_add (&zebrad, rn); } else { @@ -1704,7 +1705,7 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname, } } - /* Distance chaged. */ + /* Distance changed. */ if (update) static_delete_ipv4 (p, gate, ifname, update->distance, vrf_id); @@ -2097,6 +2098,7 @@ static_install_ipv6 (struct prefix *p, struct static_ipv6 *si) nexthop_ipv6_ifname_add (rib, &si->ipv6, si->ifname); break; } + rib_queue_add (&zebrad, rn); } else { |