diff options
Diffstat (limited to 'main/quagga/quagga-0.99.11-del-routes.patch')
-rw-r--r-- | main/quagga/quagga-0.99.11-del-routes.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/main/quagga/quagga-0.99.11-del-routes.patch b/main/quagga/quagga-0.99.11-del-routes.patch new file mode 100644 index 00000000000..72ee89929cf --- /dev/null +++ b/main/quagga/quagga-0.99.11-del-routes.patch @@ -0,0 +1,44 @@ +From http://lists.quagga.net/pipermail/quagga-dev/2009-January/006362.html + +If there are two paralell PtP links to the same router: + C * 192.168.101.112/32 is directly connected, p1-4-19-4-20 + C>* 192.168.101.112/32 is directly connected, p1-4-17-4-18 +and the cable is to one of the ppp links is pulled, Zebra +deletes both routes instead of just the one that got yanked. +This fixes it to only delete the route to the interface that +got yanked. +--- +This fix was suggested by lsorense at csclub.uwaterloo.ca (Lennart Sorensen) +who had a similar problem. See [quagga-dev 6355] + + zebra/zebra_rib.c | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c +index 90db932..7a37387 100644 +--- a/zebra/zebra_rib.c ++++ b/zebra/zebra_rib.c +@@ -1896,6 +1896,13 @@ rib_delete_ipv4 (int type, int flags, struct prefix_ipv4 *p, + inet_ntoa (*gate), + ifindex); + ++ if (IS_ZEBRA_DEBUG_KERNEL && !gate) ++ zlog_debug ("rib_delete_ipv4(): route delete %s/%d directly, %s ifindex %d", ++ inet_ntop (AF_INET, &p->prefix, buf1, BUFSIZ), ++ p->prefixlen, ++ ifindex2ifname(ifindex), ++ ifindex); ++ + /* Lookup route node. */ + rn = route_node_lookup (table, (struct prefix *) p); + if (! rn) +@@ -1942,7 +1949,7 @@ rib_delete_ipv4 (int type, int flags, struct prefix_ipv4 *p, + break; + } + /* Make sure that the route found has the same gateway. */ +- else if (gate == NULL || ++ else if (gate != NULL && + ((nexthop = rib->nexthop) && + (IPV4_ADDR_SAME (&nexthop->gate.ipv4, gate) || + IPV4_ADDR_SAME (&nexthop->rgate.ipv4, gate)))) + |