]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes some problems related to link-local routes in KRT interface.
authorOndrej Zajicek <santiago@crfreenet.org>
Wed, 28 Oct 2009 21:39:24 +0000 (22:39 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 28 Oct 2009 21:39:24 +0000 (22:39 +0100)
proto/ospf/lsupd.c
sysdep/linux/netlink/netlink.c

index cb794617097cd359b0b8baf1ad7a07a43477c379..5278f1b20e9fed306934dd03e09f0e14229df250 100644 (file)
@@ -457,8 +457,6 @@ ospf_lsupd_receive(struct ospf_packet *ps_i, struct ospf_iface *ifa,
 
     /* pg 143 (1) */
     chsum = lsa->checksum;
-    log(L_WARN "Checking rcv %R %R %d (len %d)", ntohl(lsa->id), ntohl(lsa->rt), ntoht(lsa->type), ntohs(lsa->length));
-    buf_dump("RCV", lsa, ntohs(lsa->length));
     if (chsum != lsasum_check(lsa, NULL))
     {
       log(L_WARN "Received bad lsa checksum from %I: %x %x", n->ip, chsum, lsa->checksum);
index 0f7b707048ff76e3b46314f215ce31bb42c4ad25..6cfb0ba622d2d482a2e585383d1212b4ffc57d40 100644 (file)
@@ -686,16 +686,23 @@ nl_parse_route(struct nlmsghdr *h, int scan)
        }
       if (a[RTA_GATEWAY])
        {
+         struct iface *ifa = if_find_by_index(oif);
          neighbor *ng;
          ra.dest = RTD_ROUTER;
          memcpy(&ra.gw, RTA_DATA(a[RTA_GATEWAY]), sizeof(ra.gw));
          ipa_ntoh(ra.gw);
-         ng = neigh_find(&p->p, &ra.gw, 0);
+         ng = neigh_find2(&p->p, &ra.gw, ifa, 0);
          if (ng && ng->scope)
+         {
+           if (ng->iface != ifa)
+             log(L_WARN "KRT: Route with unexpected iface for %I/%d", net->n.prefix, net->n.pxlen);
            ra.iface = ng->iface;
+         }
          else
-           /* FIXME: Remove this warning? Handle it somehow... */
+         {
            log(L_WARN "Kernel told us to use non-neighbor %I for %I/%d", ra.gw, net->n.prefix, net->n.pxlen);
+           return;
+         }
        }
       else
        {