]> git.puffer.fish Git - mirror/frr.git/commitdiff
babeld: fix bug due to v4mapped addresses.
authorMatthieu Boutier <boutier@pps.jussieu.fr>
Fri, 20 Jan 2012 16:53:57 +0000 (17:53 +0100)
committerPaul Jakma <paul@quagga.net>
Sun, 25 Mar 2012 16:06:53 +0000 (17:06 +0100)
babeld/babeld.c
babeld/xroute.c

index 6487bbe1505bf2a74e26f70db5d667c47abb4c7c..0cf8c8a1fb4a21528a47cfcc3ff6f765c78639bc 100644 (file)
@@ -708,7 +708,7 @@ input_filter(const unsigned char *id,
     struct interface *ifp = NULL;
     struct prefix p;
     p.family = v4mapped(prefix) ? AF_INET : AF_INET6;
-    p.prefixlen = plen;
+    p.prefixlen = v4mapped(prefix) ? plen - 96 : plen;
     if (p.family == AF_INET) {
         uchar_to_inaddr(&p.u.prefix4, prefix);
     } else {
@@ -730,7 +730,7 @@ output_filter(const unsigned char *id, const unsigned char *prefix,
     struct interface *ifp = NULL;
     struct prefix p;
     p.family = v4mapped(prefix) ? AF_INET : AF_INET6;
-    p.prefixlen = plen;
+    p.prefixlen = v4mapped(prefix) ? plen - 96 : plen;
     if (p.family == AF_INET) {
         uchar_to_inaddr(&p.u.prefix4, prefix);
     } else {
@@ -752,7 +752,7 @@ redistribute_filter(const unsigned char *prefix, unsigned short plen,
     struct interface *ifp = NULL;
     struct prefix p;
     p.family = v4mapped(prefix) ? AF_INET : AF_INET6;
-    p.prefixlen = plen;
+    p.prefixlen = v4mapped(prefix) ? plen - 96 : plen;
     if (p.family == AF_INET) {
         uchar_to_inaddr(&p.u.prefix4, prefix);
     } else {
index eb4aaeb570f59d2fa77b7a1e4cab4bcbe75bf172..8330b492f367e71242ccc967653a5a70c6325c23 100644 (file)
@@ -63,8 +63,8 @@ babel_ipv4_route_add (struct zapi_ipv4 *api, struct prefix_ipv4 *prefix,
 
     inaddr_to_uchar(uchar_prefix, &prefix->prefix);
     debugf(BABEL_DEBUG_ROUTE, "Adding new ipv4 route comming from Zebra.");
-    xroute_add_new_route(uchar_prefix, prefix->prefixlen, api->metric, ifindex,
-                         0, 1);
+    xroute_add_new_route(uchar_prefix, prefix->prefixlen + 96,
+                         api->metric, ifindex, 0, 1);
     return 0;
 }
 
@@ -77,7 +77,7 @@ babel_ipv4_route_delete (struct zapi_ipv4 *api, struct prefix_ipv4 *prefix,
     struct xroute *xroute = NULL;
 
     inaddr_to_uchar(uchar_prefix, &prefix->prefix);
-    xroute = find_xroute(uchar_prefix, prefix->prefixlen);
+    xroute = find_xroute(uchar_prefix, prefix->prefixlen + 96);
     if (xroute != NULL) {
         debugf(BABEL_DEBUG_ROUTE, "Removing ipv4 route (from zebra).");
         flush_xroute(xroute);