Source-Changes-HG archive

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

[src/trunk]: src/external/bsd/dhcpcd/dist Import dhcpcd-8.0.2 with the follow...



details:   https://anonhg.NetBSD.org/src/rev/ffdf489a7c08
branches:  trunk
changeset: 452987:ffdf489a7c08
user:      roy <roy%NetBSD.org@localhost>
date:      Tue Jul 30 10:23:01 2019 +0000

description:
Import dhcpcd-8.0.2 with the following changes:

  *  NetBSD: Can be build without ARP support but listen to kernel DaD
  *  ND6: Removed NA support from SMALL builds
  *  DHCP: Avoid duplicate read of UDP socket when BPF is also open
  *  IP: Avoid adding address if already exists on OS other than Linux
  *  route: Fixed a NULL de-reference error on static routes
  *  DHCP6: Move to REQUEST if any IA has no-binding in REWNEW/REBIND
  *  IP: Accept packets with IP header options

diffstat:

 external/bsd/dhcpcd/dist/BUILDING.md             |   5 ++-
 external/bsd/dhcpcd/dist/configure               |   3 +-
 external/bsd/dhcpcd/dist/hooks/10-wpa_supplicant |   8 +++--
 external/bsd/dhcpcd/dist/src/defs.h              |   2 +-
 external/bsd/dhcpcd/dist/src/dhcp6.h             |   1 +
 external/bsd/dhcpcd/dist/src/if.h                |   3 --
 external/bsd/dhcpcd/dist/src/ipv4.c              |  35 ++++++++++++++++++++---
 external/bsd/dhcpcd/dist/src/ipv4.h              |   6 ++++
 external/bsd/dhcpcd/dist/src/route.c             |   6 ++-
 external/bsd/dhcpcd/dist/src/script.c            |   7 ++--
 10 files changed, 55 insertions(+), 21 deletions(-)

diffs (198 lines):

diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/BUILDING.md
--- a/external/bsd/dhcpcd/dist/BUILDING.md      Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/BUILDING.md      Tue Jul 30 10:23:01 2019 +0000
@@ -8,8 +8,9 @@
 size is a concern, you can use the `--small` configure option to enable
 a reduced feature set within dhcpcd.
 Currently this just removes non important options out of
-`dhcpcd-definitions.conf`, the logfile option and
-support for DHCPv6 Prefix Delegation.
+`dhcpcd-definitions.conf`, the logfile option,
+DHCPv6 Prefix Delegation and IPv6 address announcement *(to prefer an
+address on another interface)*.
 Other features maybe dropped as and when required.
 dhcpcd can also be made smaller by removing the IPv4 or IPv6 stack:
   *  `--disable-inet`
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/configure
--- a/external/bsd/dhcpcd/dist/configure        Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/configure        Tue Jul 30 10:23:01 2019 +0000
@@ -747,8 +747,7 @@
        cat <<EOF >_open_memstream.c
 #include <stdio.h>
 int main(void) {
-       open_memstream(NULL, NULL);
-       return 0;
+       return open_memstream(NULL, NULL) != NULL ? 0 : 1;
 }
 EOF
        if $XCC _open_memstream.c -o _open_memstream 2>&3; then
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/hooks/10-wpa_supplicant
--- a/external/bsd/dhcpcd/dist/hooks/10-wpa_supplicant  Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/10-wpa_supplicant  Tue Jul 30 10:23:01 2019 +0000
@@ -1,7 +1,9 @@
 # Start, reconfigure and stop wpa_supplicant per wireless interface.
-# This is needed because wpa_supplicant lacks hotplugging of any kind
-# and the user should not be expected to have to wire it into their system
-# if the base system doesn't do this itself.
+#
+# This is only needed when using wpa_supplicant-2.5 or older, OR
+# when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR
+# wpa_supplicant was launched without the -M flag to activate
+# interface matching.
 
 if [ -z "$wpa_supplicant_conf" ]; then
        for x in \
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/defs.h
--- a/external/bsd/dhcpcd/dist/src/defs.h       Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/defs.h       Tue Jul 30 10:23:01 2019 +0000
@@ -29,7 +29,7 @@
 #define CONFIG_H
 
 #define PACKAGE                        "dhcpcd"
-#define VERSION                        "8.0.1"
+#define VERSION                        "8.0.2"
 
 #ifndef CONFIG
 # define CONFIG                        SYSCONFDIR "/" PACKAGE ".conf"
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/dhcp6.h
--- a/external/bsd/dhcpcd/dist/src/dhcp6.h      Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp6.h      Tue Jul 30 10:23:01 2019 +0000
@@ -208,6 +208,7 @@
        char leasefile[sizeof(LEASEFILE6) + IF_NAMESIZE + (IF_SSIDLEN * 4) +3];
        const char *reason;
        uint16_t lerror; /* Last error received from DHCPv6 reply. */
+       bool has_no_binding;
        struct authstate auth;
 };
 
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/if.h
--- a/external/bsd/dhcpcd/dist/src/if.h Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/if.h Tue Jul 30 10:23:01 2019 +0000
@@ -91,9 +91,6 @@
            ((addr & IN_CLASSB_NET) == 0xc0a80000))
 #endif
 
-#define RAW_EOF                        1 << 0
-#define RAW_PARTIALCSUM                2 << 0
-
 #ifndef CLLADDR
 #ifdef AF_LINK
 #  define CLLADDR(sdl) (const void *)((sdl)->sdl_data + (sdl)->sdl_nlen)
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/ipv4.c
--- a/external/bsd/dhcpcd/dist/src/ipv4.c       Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv4.c       Tue Jul 30 10:23:01 2019 +0000
@@ -659,8 +659,13 @@
 
        ia->mask = *mask;
        ia->brd = *bcast;
+#ifdef IP_LIFETIME
        ia->vltime = vltime;
        ia->pltime = pltime;
+#else
+       UNUSED(vltime);
+       UNUSED(pltime);
+#endif
        snprintf(ia->saddr, sizeof(ia->saddr), "%s/%d",
            inet_ntoa(*addr), inet_ntocidr(*mask));
 
@@ -746,16 +751,36 @@
                return;
        }
 
-#if __linux__
-       /* If the netmask or broadcast is different, re-add the addresss */
        ia = ipv4_iffindaddr(ifp, &lease->addr, NULL);
+       /* If the netmask or broadcast is different, re-add the addresss.
+        * If IP addresses do not have lifetimes, there is a very real chance
+        * that re-adding them will scrub the subnet route temporarily
+        * which is a bad thing, so avoid it. */
        if (ia != NULL &&
-           (ia->mask.s_addr != lease->mask.s_addr ||
-           ia->brd.s_addr != lease->brd.s_addr))
-               ipv4_deladdr(ia, 0);
+           ia->mask.s_addr == lease->mask.s_addr &&
+           ia->brd.s_addr == lease->brd.s_addr)
+       {
+#ifndef IP_LIFETIME
+               logdebugx("%s: IP address %s already exists",
+                   ifp->name, ia->saddr);
 #endif
+       } else {
+#ifdef __linux__
+               /* Linux does not change netmask/broadcast address
+                * for re-added addresses, so we need to delete the old one
+                * first. */
+               if (ia != NULL)
+                       ipv4_deladdr(ia, 0);
+#endif
+#ifndef IP_LIFETIME
+               if (ipv4_daddaddr(ifp, lease) == -1 && errno != EEXIST)
+                       return;
+#endif
+       }
+#ifdef IP_LIFETIME
        if (ipv4_daddaddr(ifp, lease) == -1 && errno != EEXIST)
                return;
+#endif
 
        ia = ipv4_iffindaddr(ifp, &lease->addr, NULL);
        if (ia == NULL) {
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/ipv4.h
--- a/external/bsd/dhcpcd/dist/src/ipv4.h       Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv4.h       Tue Jul 30 10:23:01 2019 +0000
@@ -75,6 +75,10 @@
 #define IN_ARE_ADDR_EQUAL(a, b)                ((a)->s_addr == (b)->s_addr)
 #define IN_IS_ADDR_UNSPECIFIED(a)      ((a)->s_addr == INADDR_ANY)
 
+#ifdef __linux__
+#define IP_LIFETIME
+#endif
+
 struct ipv4_addr {
        TAILQ_ENTRY(ipv4_addr) next;
        struct in_addr addr;
@@ -83,8 +87,10 @@
        struct interface *iface;
        int addr_flags;
        unsigned int flags;
+#ifdef IP_LIFETIME
        uint32_t vltime;
        uint32_t pltime;
+#endif
        char saddr[INET_ADDRSTRLEN + 3];
 #ifdef ALIAS_ADDR
        char alias[IF_NAMESIZE];
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/route.c
--- a/external/bsd/dhcpcd/dist/src/route.c      Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/route.c      Tue Jul 30 10:23:01 2019 +0000
@@ -392,8 +392,10 @@
        struct dhcpcd_ctx *ctx;
 
        assert(rt != NULL);
-       assert(rt->rt_ifp != NULL);
-       assert(rt->rt_ifp->ctx != NULL);
+       if (rt->rt_ifp == NULL) {
+               free(rt);
+               return;
+       }
 
        ctx = rt->rt_ifp->ctx;
        rb_tree_insert_node(&ctx->froutes, rt);
diff -r ff500c7400ea -r ffdf489a7c08 external/bsd/dhcpcd/dist/src/script.c
--- a/external/bsd/dhcpcd/dist/src/script.c     Tue Jul 30 08:44:28 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/script.c     Tue Jul 30 10:23:01 2019 +0000
@@ -213,10 +213,11 @@
        if (tmpfd == -1)
                goto eexit;
        unlink(tmpfile);
-       fp = fopen(tmpfile, "w+");
-       close(tmpfd);
-       if (fp == NULL)
+       fp = fdopen(tmpfd, "w+");
+       if (fp == NULL) {
+               close(tmpfd);
                goto eexit;
+       }
 #endif
 
 #ifdef INET



Home | Main Index | Thread Index | Old Index