]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Minor fixes to previous patches.
authorOndrej Zajicek <santiago@crfreenet.org>
Fri, 2 Apr 2010 09:31:20 +0000 (11:31 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Fri, 2 Apr 2010 09:31:20 +0000 (11:31 +0200)
aclocal.m4
configure.in
proto/ospf/iface.c
proto/ospf/packet.c
sysdep/bsd/sysio.h
sysdep/linux/sysio.h
sysdep/unix/io.c

index e98a4139a812b7d3326b5ab80737f625b9d39336..34a0511d0f193520a558397cb85a75050fbef72a 100644 (file)
@@ -158,6 +158,7 @@ if $CC -Wall -Wno-pointer-sign conftest.c >&AS_MESSAGE_LOG_FD 2>&1 ; then
 else
        bird_cv_c_option_no_pointer_sign=no
 fi
+rm -rf conftest* a.out
 ])])
 
 # BIRD_CHECK_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE])
index 3c988b1657d0eae24bce51980edc07d76faec010..9e82735d67836854e7bf938f31c221401ed5029a 100644 (file)
@@ -66,11 +66,11 @@ if test -z "$GCC" ; then
 fi
 
 AC_MSG_CHECKING([what CFLAGS should we use])
-if test "$bird_cflags_default" == yes ; then
+if test "$bird_cflags_default" = yes ; then
        BIRD_CHECK_GCC_OPTIONS
 
        CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wno-parentheses"
-       if test "$bird_cv_c_option_no_pointer_sign" == yes ; then
+       if test "$bird_cv_c_option_no_pointer_sign" = yes ; then
                CFLAGS="$CFLAGS -Wno-pointer-sign"
        fi
 fi
index 83d591b48839ec6f8b9d6bf5e450db498d38f755..041635539dd45b19d2dd064d29da62aaa1277c30 100644 (file)
@@ -662,31 +662,31 @@ ospf_ifa_notify(struct proto *p, unsigned flags, struct ifa *a)
       WALK_LIST(ac, cf->area_list)
       {
        u32 found_new[8] = {};
-       struct iface_patt *p;
+       struct iface_patt *pt;
 
-       WALK_LIST(p, ac->patt_list)
+       WALK_LIST(pt, ac->patt_list)
        {
-         if (iface_patt_match(p, i, a))
+         if (iface_patt_match(pt, a->iface, a))
          {
-           struct ospf_iface_patt *ip = (struct ospf_iface_patt *) p;
+           struct ospf_iface_patt *ipt = (struct ospf_iface_patt *) pt;
 
            /* If true, we already assigned that IID and we skip
               this to implement first-match behavior */
-           if (iflag_test(found_new, ip->instance_id))
+           if (iflag_test(found_new, ipt->instance_id))
              continue;
 
            /* If true, we already assigned that in a different area,
               we log collision */
-           if (iflag_test(found_all, ip->instance_id))
+           if (iflag_test(found_all, ipt->instance_id))
            {
              log(L_WARN "%s: Interface %s (IID %d) matches for multiple areas",
-                 p->name,  a->iface->name, ip->instance_id);
+                 p->name,  a->iface->name, ipt->instance_id);
              continue;
            }
 
-           iflag_set(found_all, ip->instance_id);
-           iflag_set(found_new, ip->instance_id);
-           ospf_iface_new(po, a->iface, a, ac, ip);
+           iflag_set(found_all, ipt->instance_id);
+           iflag_set(found_new, ipt->instance_id);
+           ospf_iface_new(po, a->iface, a, ac, ipt);
          }
        }
       }
index dd8fa5f03b53dcd2e0d4043558f8cd4d34f35ab9..b47cbfc7b0ee3438f09b65ee3b15b894eabed837 100644 (file)
@@ -348,7 +348,7 @@ ospf_rx_hook(sock *sk, int size)
 
   if ((areaid == ifa->oa->areaid)
 #ifdef OSPFv3
-      && (ps->instance_id != ifa->instance_id)
+      && (ps->instance_id == ifa->instance_id)
 #endif
       )
   {
index 9ee4ade3e38e508f91a5a1bd145a83455408c090..87c78fb3ed0ae18ca89be58f15567645b17b83e1 100644 (file)
@@ -150,18 +150,18 @@ sysio_process_rx_cmsgs(sock *s, struct msghdr *msg)
   // log(L_WARN "RX %I %d", s->laddr, s->lifindex);
 }
 
-
-void
-sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg)
+/* Unfortunately, IP_SENDSRCADDR does not work for raw IP sockets on BSD kernels */
+static void
+sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen)
 {
   struct cmsghdr *cm;
   struct in_addr *sa;
 
   if (!(s->flags & SKF_LADDR_TX))
-    {
-      msg->msg_controllen = 0;
-      return;
-    }
+    return;
+
+  msg->msg_control = cbuf;
+  msg->msg_controllen = cbuflen;
 
   if (s->iface)
     {
index 91cbdcd8d567c591b0fce6de10ec7c4f55225f3e..1cfbcc4b626eb133602d624f351f95fd72444fcb 100644 (file)
@@ -272,17 +272,17 @@ sysio_process_rx_cmsgs(sock *s, struct msghdr *msg)
 }
 
 
-void
-sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg)
+static void
+sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen)
 {
   struct cmsghdr *cm;
   struct in_pktinfo *pi;
 
   if (!(s->flags & SKF_LADDR_TX))
-    {
-      msg->msg_controllen = 0;
-      return;
-    }
+    return;
+
+  msg->msg_control = cbuf;
+  msg->msg_controllen = cbuflen;
 
   cm = CMSG_FIRSTHDR(msg);
   cm->cmsg_level = IPPROTO_IP;
index e9d78b61a546bd3866c2ca9c56cbe4d028be1ba3..abfa5c264cc42147916c75d5ea452dbfea33328a 100644 (file)
@@ -660,6 +660,77 @@ get_sockaddr(struct sockaddr_in *sa, ip_addr *a, unsigned *port, int check)
 
 #endif
 
+
+#ifdef IPV6
+
+/* PKTINFO handling is also standardized in IPv6 */
+#define CMSG_RX_SPACE CMSG_SPACE(sizeof(struct in6_pktinfo))
+#define CMSG_TX_SPACE CMSG_SPACE(sizeof(struct in6_pktinfo))
+
+static char *
+sysio_register_cmsgs(sock *s)
+{
+  int ok = 1;
+  if ((s->flags & SKF_LADDR_RX) &&
+      setsockopt(s->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &ok, sizeof(ok)) < 0)
+    return "IPV6_RECVPKTINFO";
+
+  return NULL;
+}
+
+static void
+sysio_process_rx_cmsgs(sock *s, struct msghdr *msg)
+{
+  struct cmsghdr *cm;
+  struct in6_pktinfo *pi = NULL;
+
+  if (!(s->flags & SKF_LADDR_RX))
+    return;
+
+  for (cm = CMSG_FIRSTHDR(msg); cm != NULL; cm = CMSG_NXTHDR(msg, cm))
+    {
+      if (cm->cmsg_level == IPPROTO_IPV6 && cm->cmsg_type == IPV6_PKTINFO)
+       pi = (struct in6_pktinfo *) CMSG_DATA(cm);
+    }
+
+  if (!pi)
+    {
+      s->laddr = IPA_NONE;
+      s->lifindex = 0;
+      return;
+    }
+
+  get_inaddr(&s->laddr, &pi->ipi6_addr);
+  s->lifindex = pi->ipi6_ifindex;
+  return;
+}
+
+static void
+sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen)
+{
+  struct cmsghdr *cm;
+  struct in6_pktinfo *pi;
+
+  if (!(s->flags & SKF_LADDR_TX))
+    return;
+
+  msg->msg_control = cbuf;
+  msg->msg_controllen = cbuflen;
+
+  cm = CMSG_FIRSTHDR(msg);
+  cm->cmsg_level = IPPROTO_IPV6;
+  cm->cmsg_type = IPV6_PKTINFO;
+  cm->cmsg_len = CMSG_LEN(sizeof(*pi));
+
+  pi = (struct in6_pktinfo *) CMSG_DATA(cm);
+  set_inaddr(&pi->ipi6_addr, s->saddr);
+  pi->ipi6_ifindex = s->iface ? s->iface->index : 0;
+
+  msg->msg_controllen = cm->cmsg_len;
+  return;
+}
+#endif
+
 static char *
 sk_set_ttl_int(sock *s)
 {
@@ -856,71 +927,6 @@ sk_leave_group(sock *s, ip_addr maddr)
   return 0;
 }
 
-/* PKTINFO handling is also standardized in IPv6 */
-#define CMSG_RX_SPACE CMSG_SPACE(sizeof(struct in6_pktinfo))
-
-static char *
-sysio_register_cmsgs(sock *s)
-{
-  int ok = 1;
-  if ((s->flags & SKF_LADDR_RX) &&
-      setsockopt(s->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &ok, sizeof(ok)) < 0)
-    return "IPV6_RECVPKTINFO";
-
-  return NULL;
-}
-
-void
-sysio_process_rx_cmsgs(sock *s, struct msghdr *msg)
-{
-  struct cmsghdr *cm;
-  struct in6_pktinfo *pi = NULL;
-
-  if (!(s->flags & SKF_LADDR_RX))
-    return;
-
-  for (cm = CMSG_FIRSTHDR(msg); cm != NULL; cm = CMSG_NXTHDR(msg, cm))
-    {
-      if (cm->cmsg_level == IPPROTO_IPV6 && cm->cmsg_type == IPV6_PKTINFO)
-       pi = (struct in6_pktinfo *) CMSG_DATA(cm);
-    }
-
-  if (!pi)
-    {
-      s->laddr = IPA_NONE;
-      s->lifindex = 0;
-      return;
-    }
-
-  get_inaddr(&s->laddr, &pi->ipi6_addr);
-  s->lifindex = pi->ipi6_ifindex;
-  return;
-}
-
-void
-sysio_prepare_tx_cmsgs(sock *s, struct msghdr *msg)
-{
-  struct cmsghdr *cm;
-  struct in6_pktinfo *pi;
-
-  if (!(s->flags & SKF_LADDR_TX))
-    {
-      msg->msg_controllen = 0;
-      return;
-    }
-
-  cm = CMSG_FIRSTHDR(msg);
-  cm->cmsg_level = IPPROTO_IPV6;
-  cm->cmsg_type = PIV6_PKTINFO;
-  cm->cmsg_len = CMSG_LEN(sizeof(*pi));
-
-  pi = (struct in6_pktinfo *) CMSG_DATA(cm);
-  set_inaddr(&pi->ipi6_addr, s->saddr);
-  pi->ipi6_ifindex = s->iface ? s->iface->index : 0;
-
-  msg->msg_controllen = cmsg->cmsg_len;
-  return;
-}
 
 #else /* IPV4 */
 
@@ -1216,12 +1222,9 @@ sk_maybe_write(sock *s)
          .msg_name = &sa,
          .msg_namelen = sizeof(sa),
          .msg_iov = &iov,
-         .msg_iovlen = 1,
-         .msg_control = cmsg_buf,
-         .msg_controllen = sizeof(cmsg_buf),
-         .msg_flags = 0};
+         .msg_iovlen = 1};
 
-       sysio_prepare_tx_cmsgs(s, &msg);
+       sysio_prepare_tx_cmsgs(s, &msg, cmsg_buf, sizeof(cmsg_buf));
        e = sendmsg(s->fd, &msg, 0);
 
        if (e < 0)