Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/roy]: src/external/bsd/dhcpcd/dist Import dhcpcd-7.0.7 with the followin...



details:   https://anonhg.NetBSD.org/src/rev/b73fb4b06aaf
branches:  roy
changeset: 324852:b73fb4b06aaf
user:      roy <roy%NetBSD.org@localhost>
date:      Tue Jul 24 07:58:31 2018 +0000

description:
Import dhcpcd-7.0.7 with the following changes:
  *  host routes work correctly again
  *  vlanid is also used to calculate slaac stable private addresses

diffstat:

 external/bsd/dhcpcd/dist/configure      |  24 ++++++++++++------------
 external/bsd/dhcpcd/dist/src/defs.h     |   2 +-
 external/bsd/dhcpcd/dist/src/if-linux.c |   6 +++---
 external/bsd/dhcpcd/dist/src/ipv6.c     |  11 ++++++++++-
 external/bsd/dhcpcd/dist/src/route.c    |  23 ++++++++++++++++++-----
 5 files changed, 44 insertions(+), 22 deletions(-)

diffs (254 lines):

diff -r 01a5a945592e -r b73fb4b06aaf external/bsd/dhcpcd/dist/configure
--- a/external/bsd/dhcpcd/dist/configure        Thu Jun 21 11:55:19 2018 +0000
+++ b/external/bsd/dhcpcd/dist/configure        Tue Jul 24 07:58:31 2018 +0000
@@ -713,7 +713,7 @@
 fi
 if [ "$ARC4RANDOM" = no ]; then
        echo "COMPAT_SRCS+=     compat/arc4random.c" >>$CONFIG_MK
-       echo "#include          \"compat/arc4random.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/arc4random.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$ARC4RANDOM_UNIFORM" ]; then
@@ -735,7 +735,7 @@
 fi
 if [ "$ARC4RANDOM_UNIFORM" = no ]; then
        echo "COMPAT_SRCS+=     compat/arc4random_uniform.c" >>$CONFIG_MK
-       echo "#include          \"compat/arc4random_uniform.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/arc4random_uniform.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$STRLCPY" ]; then
@@ -759,7 +759,7 @@
 fi
 if [ "$STRLCPY" = no ]; then
        echo "COMPAT_SRCS+=     compat/strlcpy.c" >>$CONFIG_MK
-       echo "#include          \"compat/strlcpy.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/strlcpy.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$PIDFILE_LOCK" ]; then
@@ -791,7 +791,7 @@
 fi
 if [ "$PIDFILE_LOCK" = no ]; then
        echo "COMPAT_SRCS+=     compat/pidfile.c" >>$CONFIG_MK
-       echo "#include          \"compat/pidfile.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/pidfile.h\"" >>$CONFIG_H
 else
        echo "#define   HAVE_UTIL_H" >>$CONFIG_H
        if [ -n "$LIBUTIL" ]; then
@@ -842,7 +842,7 @@
 fi
 if [ "$STRTOI" = no ]; then
        echo "COMPAT_SRCS+=     compat/strtoi.c compat/strtou.c" >>$CONFIG_MK
-       echo "#include          \"compat/strtoi.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/strtoi.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$DPRINTF" ]; then
@@ -863,7 +863,7 @@
 fi
 if [ "$DPRINTF" = no ]; then
        echo "COMPAT_SRCS+=     compat/dprintf.c" >>$CONFIG_MK
-       echo "#include          \"compat/dprintf.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/dprintf.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$TAILQ_FOREACH_SAFE" ]; then
@@ -937,7 +937,7 @@
        if [ "$TAILQ_FOREACH" = yes ]; then
                echo "#include          <sys/queue.h>">>$CONFIG_H
        fi
-       echo "#include          \"compat/queue.h\"">>$CONFIG_H
+       echo "#include                  \"compat/queue.h\"">>$CONFIG_H
 else
        echo "#define   HAVE_SYS_QUEUE_H" >>$CONFIG_H
 fi
@@ -962,7 +962,7 @@
 fi
 if [ "$REALLOCARRAY" = no ]; then
        echo "COMPAT_SRCS+=     compat/reallocarray.c" >>$CONFIG_MK
-       echo "#include          \"compat/reallocarray.h\"">>$CONFIG_H
+       echo "#include                  \"compat/reallocarray.h\"">>$CONFIG_H
 fi
 # Set this for eloop
 echo "#define  HAVE_REALLOCARRAY" >>$CONFIG_H
@@ -1091,7 +1091,7 @@
        rm -f _be64enc.c _be64enc
 fi
 if [ "$BE64ENC" = no ]; then
-       echo "#include          \"compat/endian.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/endian.h\"" >>$CONFIG_H
 fi
 
 if [ -z "$FLS64" ]; then
@@ -1145,7 +1145,7 @@
        rm -f _md5.c _md5
 fi
 if [ "$MD5" = no ]; then
-       echo "#include          \"compat/crypt/md5.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/crypt/md5.h\"" >>$CONFIG_H
        echo "MD5_SRC=  compat/crypt/md5.c" >>$CONFIG_MK
 else
        echo "MD5_SRC=" >>$CONFIG_MK
@@ -1236,7 +1236,7 @@
        fi
 fi
 if [ "$SHA2" = no ]; then
-       echo "#include          \"compat/crypt/sha256.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/crypt/sha256.h\"" >>$CONFIG_H
        echo "SHA256_SRC=       compat/crypt/sha256.c" >>$CONFIG_MK
 else
        echo "SHA256_SRC=" >>$CONFIG_MK
@@ -1284,7 +1284,7 @@
        rm -f _hmac.c _hmac
 fi
 if [ "$HMAC" = no ]; then
-       echo "#include          \"compat/crypt/hmac.h\"" >>$CONFIG_H
+       echo "#include                  \"compat/crypt/hmac.h\"" >>$CONFIG_H
        echo "HMAC_SRC= compat/crypt/hmac.c" >>$CONFIG_MK
 else
        # echo "#define HAVE_HMAC_H" >>$CONFIG_H
diff -r 01a5a945592e -r b73fb4b06aaf external/bsd/dhcpcd/dist/src/defs.h
--- a/external/bsd/dhcpcd/dist/src/defs.h       Thu Jun 21 11:55:19 2018 +0000
+++ b/external/bsd/dhcpcd/dist/src/defs.h       Tue Jul 24 07:58:31 2018 +0000
@@ -28,7 +28,7 @@
 #define CONFIG_H
 
 #define PACKAGE                        "dhcpcd"
-#define VERSION                        "7.0.6"
+#define VERSION                        "7.0.7"
 
 #ifndef CONFIG
 # define CONFIG                        SYSCONFDIR "/" PACKAGE ".conf"
diff -r 01a5a945592e -r b73fb4b06aaf external/bsd/dhcpcd/dist/src/if-linux.c
--- a/external/bsd/dhcpcd/dist/src/if-linux.c   Thu Jun 21 11:55:19 2018 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-linux.c   Tue Jul 24 07:58:31 2018 +0000
@@ -430,8 +430,6 @@
        memset(rt, 0, sizeof(*rt));
        if (rtm->rtm_type == RTN_UNREACHABLE)
                rt->rt_flags |= RTF_REJECT;
-       if (rtm->rtm_scope == RT_SCOPE_HOST)
-               rt->rt_flags |= RTF_HOST;
 
        rta = (struct rtattr *)RTM_RTA(rtm);
        len = RTM_PAYLOAD(nlm);
@@ -491,6 +489,8 @@
 
        rt->rt_netmask.sa_family = rtm->rtm_family;
        sa_fromprefix(&rt->rt_netmask, rtm->rtm_dst_len);
+       if (sa_is_allones(&rt->rt_netmask))
+               rt->rt_flags |= RTF_HOST;
 
        #if 0
        if (rt->rtp_ifp == NULL && rt->src.s_addr != INADDR_ANY) {
@@ -1228,7 +1228,7 @@
                        nlm.rt.rtm_protocol = RTPROT_BOOT;
                if (rt->rt_ifp->flags & IFF_LOOPBACK)
                        nlm.rt.rtm_scope = RT_SCOPE_HOST;
-               else if (gateway_unspec || sa_is_allones(&rt->rt_netmask))
+               else if (gateway_unspec)
                        nlm.rt.rtm_scope = RT_SCOPE_LINK;
                else
                        nlm.rt.rtm_scope = RT_SCOPE_UNIVERSE;
diff -r 01a5a945592e -r b73fb4b06aaf external/bsd/dhcpcd/dist/src/ipv6.c
--- a/external/bsd/dhcpcd/dist/src/ipv6.c       Thu Jun 21 11:55:19 2018 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv6.c       Tue Jul 24 07:58:31 2018 +0000
@@ -253,6 +253,7 @@
     const struct in6_addr *prefix, int prefix_len,
     const unsigned char *netiface, size_t netiface_len,
     const unsigned char *netid, size_t netid_len,
+    unsigned short vlanid,
     uint32_t *dad_counter,
     const unsigned char *secret, size_t secret_len)
 {
@@ -267,6 +268,8 @@
 
        l = (size_t)(ROUNDUP8(prefix_len) / NBBY);
        len = l + netiface_len + netid_len + sizeof(*dad_counter) + secret_len;
+       if (vlanid != 0)
+               len += sizeof(vlanid);
        if (len > sizeof(buf)) {
                errno = ENOBUFS;
                return -1;
@@ -281,6 +284,12 @@
                p += netiface_len;
                memcpy(p, netid, netid_len);
                p += netid_len;
+               /* Don't use a vlanid if not set.
+                * This ensures prior versions have the same unique address. */
+               if (vlanid != 0) {
+                       memcpy(p, &vlanid, sizeof(vlanid));
+                       p += sizeof(vlanid);
+               }
                memcpy(p, dad_counter, sizeof(*dad_counter));
                p += sizeof(*dad_counter);
                memcpy(p, secret, secret_len);
@@ -333,7 +342,7 @@
        r = ipv6_makestableprivate1(addr, prefix, prefix_len,
            ifp->hwaddr, ifp->hwlen,
            ifp->ssid, ifp->ssid_len,
-           &dad,
+           ifp->vlanid, &dad,
            ifp->ctx->secret, ifp->ctx->secret_len);
 
        if (r == 0)
diff -r 01a5a945592e -r b73fb4b06aaf external/bsd/dhcpcd/dist/src/route.c
--- a/external/bsd/dhcpcd/dist/src/route.c      Thu Jun 21 11:55:19 2018 +0000
+++ b/external/bsd/dhcpcd/dist/src/route.c      Tue Jul 24 07:58:31 2018 +0000
@@ -44,6 +44,21 @@
 #include "route.h"
 #include "sa.h"
 
+/*
+ * On some systems, host routes have no need for a netmask.
+ * However DHCP specifies host routes using an all-ones netmask.
+ * This handy function allows easy comparison when the two
+ * differ.
+ */
+static int
+rt_cmp_netmask(const struct rt *rt1, const struct rt *rt2)
+{
+
+       if (rt1->rt_flags & RTF_HOST && rt2->rt_flags & RTF_HOST)
+               return 0;
+       return sa_cmp(&rt1->rt_netmask, &rt2->rt_netmask);
+}
+
 void
 rt_init(struct dhcpcd_ctx *ctx)
 {
@@ -63,14 +78,12 @@
 
        assert(cmd != NULL);
        assert(rt != NULL);
-       assert(rt->rt_ifp != NULL);
 
-       ifname = rt->rt_ifp->name;
        sa_addrtop(&rt->rt_dest, dest, sizeof(dest));
        prefix = sa_toprefix(&rt->rt_netmask);
        sa_addrtop(&rt->rt_gateway, gateway, sizeof(gateway));
-
        gateway_unspec = sa_is_unspecified(&rt->rt_gateway);
+       ifname = rt->rt_ifp == NULL ? "(null)" : rt->rt_ifp->name;
 
        if (rt->rt_flags & RTF_HOST) {
                if (gateway_unspec)
@@ -236,7 +249,7 @@
                    (f->rt_ifp == NULL ||
                    rt->rt_ifp->metric == f->rt_ifp->metric) &&
 #endif
-                   sa_cmp(&rt->rt_netmask, &f->rt_netmask) == 0)
+                   rt_cmp_netmask(f, rt) == 0)
                        return rt;
        }
        return NULL;
@@ -345,7 +358,7 @@
            ort->rt_metric == nrt->rt_metric &&
 #endif
            sa_cmp(&ort->rt_dest, &nrt->rt_dest) == 0 &&
-           sa_cmp(&ort->rt_netmask, &nrt->rt_netmask) == 0 &&
+           rt_cmp_netmask(ort, nrt) == 0 &&
            sa_cmp(&ort->rt_gateway, &nrt->rt_gateway) == 0)
        {
                if (ort->rt_mtu == nrt->rt_mtu)



Home | Main Index | Thread Index | Old Index