Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src Pull up the following, requested by roy in ticket # 661:
details: https://anonhg.NetBSD.org/src/rev/c1bb4a16bfe4
branches: netbsd-9
changeset: 744251:c1bb4a16bfe4
user: martin <martin%NetBSD.org@localhost>
date: Tue Jan 28 09:48:33 2020 +0000
description:
Pull up the following, requested by roy in ticket # 661:
external/bsd/dhcpcd/dist/src/defs.h up to 1.1.1.37
external/bsd/dhcpcd/dist/src/dhcp.c up to 1.32
external/bsd/dhcpcd/dist/src/if-bsd.c up to 1.16
external/bsd/dhcpcd/dist/src/ipv6.c up to 1.8
external/bsd/dhcpcd/dist/src/ipv6.h up to 1.8
external/bsd/dhcpcd/dist/src/ipv6nd.c up to 1.16
external/bsd/dhcpcd/dist/src/script.c up to 1.2
doc/3RDPARTY manually edited
Update to dhcpcd-8.1.6 with the following changes:
* INET6: Support a /128 prefix advertised via RA
* BSD: More address validation from route(4) messages
* DHCP: Fix a potential segfault on DaD failure
* IPv4LL: Fix a potential segfault when dropping IPv4LL addresses
diffstat:
doc/3RDPARTY | 8 +-
external/bsd/dhcpcd/dist/src/defs.h | 2 +-
external/bsd/dhcpcd/dist/src/dhcp.c | 7 +-
external/bsd/dhcpcd/dist/src/if-bsd.c | 129 ++++++++++++++-------------------
external/bsd/dhcpcd/dist/src/ipv6.c | 9 +-
external/bsd/dhcpcd/dist/src/ipv6.h | 3 +
external/bsd/dhcpcd/dist/src/ipv6nd.c | 3 +-
external/bsd/dhcpcd/dist/src/script.c | 2 +-
8 files changed, 76 insertions(+), 87 deletions(-)
diffs (truncated from 324 to 300 lines):
diff -r b780f2e81b14 -r c1bb4a16bfe4 doc/3RDPARTY
--- a/doc/3RDPARTY Tue Jan 28 09:10:10 2020 +0000
+++ b/doc/3RDPARTY Tue Jan 28 09:48:33 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: 3RDPARTY,v 1.1640.2.11 2020/01/27 07:26:41 martin Exp $
+# $NetBSD: 3RDPARTY,v 1.1640.2.12 2020/01/28 09:48:33 martin Exp $
#
# This file contains a list of the software that has been integrated into
# NetBSD where we are not the primary maintainer.
@@ -341,12 +341,12 @@
Use the dhcp2netbsd script.
Package: dhcpcd
-Version: 8.1.5
-Current Vers: 8.1.5
+Version: 8.1.6
+Current Vers: 8.1.6
Maintainer: roy
Archive Site: ftp://roy.marples.name/pub/dhcpcd/
Home Page: http://roy.marples.name/projects/dhcpcd/
-Date: 2020-01-03
+Date: 2020-01-27
Mailing List: dhcpcd-discuss%marples.name@localhost
License: BSD (2-clause)
Location: external/bsd/dhcpcd/dist
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/defs.h
--- a/external/bsd/dhcpcd/dist/src/defs.h Tue Jan 28 09:10:10 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/defs.h Tue Jan 28 09:48:33 2020 +0000
@@ -29,7 +29,7 @@
#define CONFIG_H
#define PACKAGE "dhcpcd"
-#define VERSION "8.1.5"
+#define VERSION "8.1.6"
#ifndef CONFIG
# define CONFIG SYSCONFDIR "/" PACKAGE ".conf"
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/dhcp.c
--- a/external/bsd/dhcpcd/dist/src/dhcp.c Tue Jan 28 09:10:10 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp.c Tue Jan 28 09:48:33 2020 +0000
@@ -2335,9 +2335,10 @@
static void
dhcp_arp_defend_failed(struct arp_state *astate)
{
-
- dhcp_drop(astate->iface, "EXPIRED");
- dhcp_start1(astate->iface);
+ struct interface *ifp = astate->iface;
+
+ dhcp_drop(ifp, "EXPIRED");
+ dhcp_start1(ifp);
}
#endif
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/if-bsd.c
--- a/external/bsd/dhcpcd/dist/src/if-bsd.c Tue Jan 28 09:10:10 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-bsd.c Tue Jan 28 09:48:33 2020 +0000
@@ -860,8 +860,6 @@
return r;
}
-
-
#if !(defined(HAVE_IFADDRS_ADDRFLAGS) && defined(HAVE_IFAM_ADDRFLAGS))
int
if_addrflags(const struct interface *ifp, const struct in_addr *addr,
@@ -1194,7 +1192,7 @@
{
struct interface *ifp;
const struct sockaddr *rti_info[RTAX_MAX];
- int addrflags;
+ int flags;
pid_t pid;
if (ifam->ifam_msglen < sizeof(*ifam)) {
@@ -1216,9 +1214,6 @@
pid = 0;
#endif
-#ifdef HAVE_IFAM_ADDRFLAGS
- addrflags = ifam->ifam_addrflags;
-#endif
switch (rti_info[RTAX_IFA]->sa_family) {
case AF_LINK:
{
@@ -1252,78 +1247,70 @@
bcast.s_addr = sin != NULL && sin->sin_family == AF_INET ?
sin->sin_addr.s_addr : INADDR_ANY;
-#if defined(__NetBSD_Version__) && __NetBSD_Version__ < 800000000
/*
* NetBSD-7 and older send an invalid broadcast address.
* So we need to query the actual address to get
* the right one.
+ * We can also use this to test if the address
+ * has really been added or deleted.
*/
- {
-#else
- /*
- * If the address was deleted, lets check if it's
- * a late message and it still exists (maybe modified).
- * If so, ignore it as deleting an address causes
- * dhcpcd to drop any lease to which it belongs.
- */
- if (ifam->ifam_type == RTM_DELADDR) {
-#endif
#ifdef SIOCGIFALIAS
- struct in_aliasreq ifra;
+ struct in_aliasreq ifra;
- memset(&ifra, 0, sizeof(ifra));
- strlcpy(ifra.ifra_name, ifp->name,
- sizeof(ifra.ifra_name));
- ifra.ifra_addr.sin_family = AF_INET;
- ifra.ifra_addr.sin_len = sizeof(ifra.ifra_addr);
- ifra.ifra_addr.sin_addr = addr;
- if (ioctl(ctx->pf_inet_fd, SIOCGIFALIAS, &ifra) == -1) {
- if (errno != ENXIO && errno != EADDRNOTAVAIL)
- logerr("%s: SIOCGIFALIAS", __func__);
- if (ifam->ifam_type != RTM_DELADDR)
- break;
- }
+ memset(&ifra, 0, sizeof(ifra));
+ strlcpy(ifra.ifra_name, ifp->name, sizeof(ifra.ifra_name));
+ ifra.ifra_addr.sin_family = AF_INET;
+ ifra.ifra_addr.sin_len = sizeof(ifra.ifra_addr);
+ ifra.ifra_addr.sin_addr = addr;
+ if (ioctl(ctx->pf_inet_fd, SIOCGIFALIAS, &ifra) == -1) {
+ if (errno != ENXIO && errno != EADDRNOTAVAIL)
+ logerr("%s: SIOCGIFALIAS", __func__);
+ if (ifam->ifam_type != RTM_DELADDR)
+ break;
+ } else {
+ if (ifam->ifam_type == RTM_DELADDR)
+ break;
#if defined(__NetBSD_Version__) && __NetBSD_Version__ < 800000000
- else
- bcast = ifra.ifra_broadaddr.sin_addr;
+ bcast = ifra.ifra_broadaddr.sin_addr;
#endif
+ }
#else
#warning No SIOCGIFALIAS support
- /*
- * No SIOCGIFALIAS? That sucks!
- * This makes this call very heavy weight, but we
- * really need to know if the message is late or not.
- */
- const struct sockaddr *sa;
- struct ifaddrs *ifaddrs = NULL, *ifa;
+ /*
+ * No SIOCGIFALIAS? That sucks!
+ * This makes this call very heavy weight, but we
+ * really need to know if the message is late or not.
+ */
+ const struct sockaddr *sa;
+ struct ifaddrs *ifaddrs = NULL, *ifa;
- sa = rti_info[RTAX_IFA];
- getifaddrs(&ifaddrs);
- for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
- if (ifa->ifa_addr == NULL)
- continue;
- if (sa_cmp(ifa->ifa_addr, sa) == 0 &&
- strcmp(ifa->ifa_name, ifp->name) == 0)
- break;
- }
- freeifaddrs(ifaddrs);
+ sa = rti_info[RTAX_IFA];
+ getifaddrs(&ifaddrs);
+ for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
+ if (ifa->ifa_addr == NULL)
+ continue;
+ if (sa_cmp(ifa->ifa_addr, sa) == 0 &&
+ strcmp(ifa->ifa_name, ifp->name) == 0)
+ break;
+ }
+ freeifaddrs(ifaddrs);
+ if (ifam->ifam_type == RTM_DELADDR) {
if (ifa != NULL)
- return 0;
-#endif
- }
-
-#ifndef HAVE_IFAM_ADDRFLAGS
- if (ifam->ifam_type == RTM_DELADDR)
- addrflags = 0 ;
- else if ((addrflags = if_addrflags(ifp, &addr, NULL)) == -1) {
- if (errno != EADDRNOTAVAIL)
- logerr("%s: if_addrflags", __func__);
- break;
+ break;
+ } else {
+ if (ifa == NULL)
+ break;
}
#endif
+#ifdef HAVE_IFAM_ADDRFLAGS
+ flags = ifam->ifam_addrflags;
+#else
+ flags = 0;
+#endif
+
ipv4_handleifa(ctx, ifam->ifam_type, NULL, ifp->name,
- &addr, &mask, &bcast, addrflags, pid);
+ &addr, &mask, &bcast, flags, pid);
break;
}
#endif
@@ -1332,7 +1319,6 @@
{
struct in6_addr addr6, mask6;
const struct sockaddr_in6 *sin6;
- int flags;
sin6 = (const void *)rti_info[RTAX_IFA];
addr6 = sin6->sin6_addr;
@@ -1344,20 +1330,17 @@
* a late message and it still exists (maybe modified).
* If so, ignore it as deleting an address causes
* dhcpcd to drop any lease to which it belongs.
+ * Also check an added address was really added.
*/
- if (ifam->ifam_type == RTM_DELADDR) {
- flags = if_addrflags6(ifp, &addr6, NULL);
- if (flags != -1)
- break;
- addrflags = 0;
- }
-#ifndef HAVE_IFAM_ADDRFLAGS
- else if ((addrflags = if_addrflags6(ifp, &addr6, NULL)) == -1) {
+ flags = if_addrflags6(ifp, &addr6, NULL);
+ if (flags == -1) {
if (errno != EADDRNOTAVAIL)
logerr("%s: if_addrflags6", __func__);
+ if (ifam->ifam_type != RTM_DELADDR)
+ break;
+ flags = 0;
+ } else if (ifam->ifam_type == RTM_DELADDR)
break;
- }
-#endif
#ifdef __KAME__
if (IN6_IS_ADDR_LINKLOCAL(&addr6))
@@ -1366,7 +1349,7 @@
#endif
ipv6_handleifa(ctx, ifam->ifam_type, NULL,
- ifp->name, &addr6, ipv6_prefixlen(&mask6), addrflags, pid);
+ ifp->name, &addr6, ipv6_prefixlen(&mask6), flags, pid);
break;
}
#endif
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/ipv6.c
--- a/external/bsd/dhcpcd/dist/src/ipv6.c Tue Jan 28 09:10:10 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv6.c Tue Jan 28 09:48:33 2020 +0000
@@ -1565,7 +1565,9 @@
tempaddr = false;
#endif
- if (ia->flags & IPV6_AF_AUTOCONF && !tempaddr) {
+ if (prefix_len == 128)
+ goto makepfx;
+ else if (ia->flags & IPV6_AF_AUTOCONF && !tempaddr) {
ia->prefix = *addr;
ia->dadcounter = ipv6_makeaddr(&ia->addr, ifp,
&ia->prefix,
@@ -1581,13 +1583,12 @@
#else
return ia;
#endif
- } else if (ia->flags & (IPV6_AF_REQUEST | IPV6_AF_DELEGATEDPFX) &&
- prefix_len != 128)
- {
+ } else if (ia->flags & (IPV6_AF_REQUEST | IPV6_AF_DELEGATEDPFX)) {
ia->prefix = *addr;
cbp = inet_ntop(AF_INET6, &ia->prefix, buf, sizeof(buf));
goto paddr;
} else {
+makepfx:
ia->addr = *addr;
if (ipv6_makeprefix(&ia->prefix,
&ia->addr, ia->prefix_len) == -1)
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/ipv6.h
--- a/external/bsd/dhcpcd/dist/src/ipv6.h Tue Jan 28 09:10:10 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/ipv6.h Tue Jan 28 09:48:33 2020 +0000
@@ -67,6 +67,9 @@
#define IDGEN_RETRIES 3
#define IDGEN_DELAY 1 /* second */
+/* Interface identifier length. Prefix + this == 128 for autoconf */
+#define ipv6_ifidlen(ifp) 64
+
#ifndef IN6_ARE_MASKED_ADDR_EQUAL
#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \
(((d)->s6_addr32[0] ^ (a)->s6_addr32[0]) & (m)->s6_addr32[0]) == 0 && \
diff -r b780f2e81b14 -r c1bb4a16bfe4 external/bsd/dhcpcd/dist/src/ipv6nd.c
Home |
Main Index |
Thread Index |
Old Index