]> git.puffer.fish Git - mirror/frr.git/commitdiff
[zebra] Changes of nexthops of static routes didnt take effect
authorPaul Jakma <paul.jakma@sun.com>
Fri, 8 Dec 2006 00:53:14 +0000 (00:53 +0000)
committerPaul Jakma <paul.jakma@sun.com>
Fri, 8 Dec 2006 00:53:14 +0000 (00:53 +0000)
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.

zebra/ChangeLog
zebra/zebra_rib.c

index 0740e75650c71bd60d5654bc2b50034d50d22404..3ea4f57f31781746ebbf6f34b45ac97c9164068b 100644 (file)
@@ -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
index acad065a02c53a2b0963beefb614c2c0526e54d5..02c73d1296dc7585752fee5408824634e3dd4114 100644 (file)
@@ -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
     {