]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes missing device attributes when exporting routes to kernel.
authorOndrej Zajicek <santiago@crfreenet.org>
Fri, 20 Apr 2012 19:04:55 +0000 (21:04 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Sat, 21 Apr 2012 09:00:23 +0000 (11:00 +0200)
Thanks to Howden Nick for the bugreport.

sysdep/linux/netlink/netlink.c

index c8eed0f3165eaa4967cd5945a66e26ef6dd3adf4..2b0d76336b58230aa8b1a01f03363ae145ea5b89 100644 (file)
@@ -588,9 +588,9 @@ krt_capable(rte *e)
   switch (a->dest)
     {
     case RTD_ROUTER:
-      if (ipa_has_link_scope(a->gw) && (a->iface == NULL))
-       return 0;
     case RTD_DEVICE:
+      if (a->iface == NULL)
+       return 0;
     case RTD_BLACKHOLE:
     case RTD_UNREACHABLE:
     case RTD_PROHIBIT:
@@ -653,20 +653,16 @@ nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int new)
   if (ea = ea_find(eattrs, EA_KRT_REALM))
     nl_add_attr_u32(&r.h, sizeof(r), RTA_FLOW, ea->u.data);
 
+  /* a->iface != NULL checked in krt_capable() for router and device routes */
+
   switch (a->dest)
     {
     case RTD_ROUTER:
       r.r.rtm_type = RTN_UNICAST;
+      nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
       nl_add_attr_ipa(&r.h, sizeof(r), RTA_GATEWAY, a->gw);
-
-      /* a->iface != NULL checked in krt_capable() */
-      if (ipa_has_link_scope(a->gw))
-       nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
-
       break;
     case RTD_DEVICE:
-      if (!a->iface)
-       return -1;
       r.r.rtm_type = RTN_UNICAST;
       nl_add_attr_u32(&r.h, sizeof(r), RTA_OIF, a->iface->index);
       break;