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/src Sync
details: https://anonhg.NetBSD.org/src/rev/f4bb61217df3
branches: trunk
changeset: 838564:f4bb61217df3
user: roy <roy%NetBSD.org@localhost>
date: Tue Jan 22 15:20:21 2019 +0000
description:
Sync
diffstat:
external/bsd/dhcpcd/dist/src/bpf.c | 2 +-
external/bsd/dhcpcd/dist/src/dhcp.c | 8 +-
external/bsd/dhcpcd/dist/src/dhcp6.c | 54 ++++--
external/bsd/dhcpcd/dist/src/dhcpcd.c | 24 +-
external/bsd/dhcpcd/dist/src/if-bsd.c | 235 ++++++++++++++---------------
external/bsd/dhcpcd/dist/src/if-options.c | 4 +-
external/bsd/dhcpcd/dist/src/ipv6nd.c | 160 ++++++++++++++++++--
7 files changed, 313 insertions(+), 174 deletions(-)
diffs (truncated from 876 to 300 lines):
diff -r b70ccf5e736f -r f4bb61217df3 external/bsd/dhcpcd/dist/src/bpf.c
--- a/external/bsd/dhcpcd/dist/src/bpf.c Tue Jan 22 15:17:33 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/bpf.c Tue Jan 22 15:20:21 2019 +0000
@@ -1,6 +1,6 @@
/*
* dhcpcd: BPF arp and bootp filtering
- * Copyright (c) 2006-2018 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
diff -r b70ccf5e736f -r f4bb61217df3 external/bsd/dhcpcd/dist/src/dhcp.c
--- a/external/bsd/dhcpcd/dist/src/dhcp.c Tue Jan 22 15:17:33 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp.c Tue Jan 22 15:20:21 2019 +0000
@@ -1,6 +1,6 @@
/*
* dhcpcd - DHCP client daemon
- * Copyright (c) 2006-2018 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
@@ -1604,11 +1604,6 @@
n = 1;
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)) == -1)
goto eexit;
-#ifdef SO_RERROR
- n = 1;
- if (setsockopt(s, SOL_SOCKET, SO_RERROR, &n, sizeof(n)) == -1)
- goto eexit;
-#endif
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(BOOTPC);
@@ -2636,6 +2631,7 @@
* interface gets the reply. */
ia = ipv4_iffindaddr(ifp, &state->lease.addr, NULL);
if (ia != NULL &&
+ !(ifp->ctx->options & DHCPCD_TEST) &&
#ifdef IN_IFF_NOTUSEABLE
!(ia->addr_flags & IN_IFF_NOTUSEABLE) &&
#endif
diff -r b70ccf5e736f -r f4bb61217df3 external/bsd/dhcpcd/dist/src/dhcp6.c
--- a/external/bsd/dhcpcd/dist/src/dhcp6.c Tue Jan 22 15:17:33 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp6.c Tue Jan 22 15:20:21 2019 +0000
@@ -1,6 +1,6 @@
/*
* dhcpcd - DHCP client daemon
- * Copyright (c) 2006-2018 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
@@ -1516,6 +1516,7 @@
if (valid)
dhcpcd_daemonise(ifp->ctx);
}
+ ipv6nd_advertise(ia);
}
}
}
@@ -3194,7 +3195,7 @@
ctx = ifp->ctx;
state = D6_STATE(ifp);
if (state == NULL || state->send == NULL) {
- logdebug("%s: DHCPv6 reply received but not running",
+ logdebugx("%s: DHCPv6 reply received but not running",
ifp->name);
return;
}
@@ -3299,14 +3300,24 @@
if (dhcp6_validatelease(ifp, r, len,
ctx->sfrom, NULL) == -1)
{
-#ifndef SMALL
- /* PD doesn't use CONFIRM, so REBIND could
- * throw up an invalid prefix if we
- * changed link */
- if (state->state == DH6S_REBIND &&
- dhcp6_hasprefixdelegation(ifp))
+ /*
+ * If we can't use the lease, fallback to
+ * DISCOVER and try and get a new one.
+ *
+ * This is needed become some servers
+ * renumber the prefix or address
+ * and deny the current one before it expires
+ * rather than sending it back with a zero
+ * lifetime along with the new prefix or
+ * address to use.
+ * This behavior is wrong, but moving to the
+ * DISCOVER phase works around it.
+ *
+ * The currently held lease is still valid
+ * until a new one is found.
+ */
+ if (state->state != DH6S_DISCOVER)
dhcp6_startdiscover(ifp);
-#endif
return;
}
if (state->state == DH6S_DISCOVER)
@@ -3538,11 +3549,12 @@
}
if (r->type == DHCP6_RECONFIGURE) {
- logdebugx("%s: RECONFIGURE recv from %s,"
+ logdebugx("%s: RECONFIGURE6 recv from %s,"
" sending to all interfaces",
ifp->name, ctx->sfrom);
TAILQ_FOREACH(ifp, ctx->ifaces, next) {
- if (D6_CSTATE(ifp) != NULL)
+ state = D6_CSTATE(ifp);
+ if (state != NULL && state->send != NULL)
dhcp6_recvif(ifp, r, len);
}
return;
@@ -3620,11 +3632,6 @@
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &n, sizeof(n)) == -1)
goto errexit;
-#ifdef SO_RERROR
- n = 1;
- if (setsockopt(s, SOL_SOCKET, SO_RERROR, &n, sizeof(n)) == -1)
- goto errexit;
-#endif
memset(&sa, 0, sizeof(sa));
sa.sin6_family = AF_INET6;
sa.sin6_port = htons(DHCP6_CLIENT_PORT);
@@ -3947,6 +3954,21 @@
}
void
+dhcp6_abort(struct interface *ifp)
+{
+ struct dhcp6_state *state;
+ struct ipv6_addr *ia;
+
+ eloop_timeout_delete(ifp->ctx->eloop, dhcp6_start1, ifp);
+ state = D6_STATE(ifp);
+ if (state == NULL)
+ return;
+ TAILQ_FOREACH(ia, &state->addrs, next) {
+ ipv6nd_advertise(ia);
+ }
+}
+
+void
dhcp6_handleifa(int cmd, struct ipv6_addr *ia, pid_t pid)
{
struct dhcp6_state *state;
diff -r b70ccf5e736f -r f4bb61217df3 external/bsd/dhcpcd/dist/src/dhcpcd.c
--- a/external/bsd/dhcpcd/dist/src/dhcpcd.c Tue Jan 22 15:17:33 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcpcd.c Tue Jan 22 15:20:21 2019 +0000
@@ -1,6 +1,6 @@
/*
* dhcpcd - DHCP client daemon
- * Copyright (c) 2006-2018 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,7 @@
* SUCH DAMAGE.
*/
-const char dhcpcd_copyright[] = "Copyright (c) 2006-2018 Roy Marples";
+const char dhcpcd_copyright[] = "Copyright (c) 2006-2019 Roy Marples";
#include <sys/file.h>
#include <sys/socket.h>
@@ -314,13 +314,6 @@
return 0;
}
- /* Store the pid and routing message seq number so we can identify
- * the last message successfully sent to the kernel.
- * This allows us to ignore all messages we sent after forking
- * and detaching. */
- ctx->ppid = getpid();
- ctx->pseq = ctx->sseq;
-
switch (pid = fork()) {
case -1:
logerr("%s: fork", __func__);
@@ -451,6 +444,10 @@
ifo->options &=
~(DHCPCD_IPV6RS | DHCPCD_DHCP6 | DHCPCD_WAITIP6);
+ if (!(ifo->options & DHCPCD_IPV6RS))
+ ifo->options &=
+ ~(DHCPCD_IPV6RA_AUTOCONF | DHCPCD_IPV6RA_REQRDNSS);
+
/* We want to setup INET6 on the interface as soon as possible. */
if (ifp->active == IF_ACTIVE_USER &&
ifo->options & DHCPCD_IPV6 &&
@@ -738,6 +735,7 @@
#endif
dhcp_abort(ifp);
ipv6nd_expire(ifp, 0);
+ dhcp6_abort(ifp);
#else
dhcpcd_drop(ifp, 0);
#endif
@@ -754,19 +752,21 @@
#endif
if (ifp->wireless) {
uint8_t ossid[IF_SSIDLEN];
-#ifdef NOCARRIER_PRESERVE_IP
size_t olen;
olen = ifp->ssid_len;
-#endif
memcpy(ossid, ifp->ssid, ifp->ssid_len);
if_getssid(ifp);
-#ifdef NOCARRIER_PRESERVE_IP
+
/* If we changed SSID network, drop leases */
if (ifp->ssid_len != olen ||
memcmp(ifp->ssid, ossid, ifp->ssid_len))
+ {
+#ifdef NOCARRIER_PRESERVE_IP
dhcpcd_drop(ifp, 0);
#endif
+ ipv4ll_reset(ifp);
+ }
}
dhcpcd_initstate(ifp, 0);
script_runreason(ifp, "CARRIER");
diff -r b70ccf5e736f -r f4bb61217df3 external/bsd/dhcpcd/dist/src/if-bsd.c
--- a/external/bsd/dhcpcd/dist/src/if-bsd.c Tue Jan 22 15:17:33 2019 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-bsd.c Tue Jan 22 15:20:21 2019 +0000
@@ -1,6 +1,6 @@
/*
* BSD interface driver for dhcpcd
- * Copyright (c) 2006-2018 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
@@ -125,6 +125,7 @@
if_opensockets_os(struct dhcpcd_ctx *ctx)
{
struct priv *priv;
+ int n;
#if defined(RO_MSGFILTER) || defined(ROUTE_MSGFILTER)
unsigned char msgfilter[] = {
RTM_IFINFO,
@@ -161,12 +162,14 @@
if (ctx->link_fd == -1)
return -1;
-#ifdef SO_RERROR
- int n = 1;
- if (setsockopt(ctx->link_fd, SOL_SOCKET, SO_RERROR,
+ /* Ignore our own route(4) messages.
+ * Sadly there is no way of doing this for route(4) messages
+ * generated from addresses we add/delete. */
+ n = 0;
+ if (setsockopt(ctx->link_fd, SOL_SOCKET, SO_USELOOPBACK,
&n, sizeof(n)) == -1)
- logerr(__func__);
-#endif
+ logerr("%s: SO_USELOOPBACK", __func__);
+
#if defined(RO_MSGFILTER)
if (setsockopt(ctx->link_fd, PF_ROUTE, RO_MSGFILTER,
&msgfilter, sizeof(msgfilter)) == -1)
@@ -471,11 +474,6 @@
assert(rt != NULL);
ctx = rt->rt_ifp->ctx;
- if ((cmd == RTM_ADD || cmd == RTM_DELETE || cmd == RTM_CHANGE) &&
- ctx->options & DHCPCD_DAEMONISE &&
- !(ctx->options & DHCPCD_DAEMONISED))
- ctx->options |= DHCPCD_RTM_PPID;
-
#define ADDSA(sa) do { \
memcpy(bp, (sa), (sa)->sa_len); \
bp += RT_ROUNDUP((sa)->sa_len); \
@@ -506,8 +504,10 @@
!sa_is_loopback(&rt->rt_gateway))
{
rtm->rtm_index = (unsigned short)rt->rt_ifp->index;
- if (!gateway_unspec)
- rtm->rtm_addrs |= RTA_IFP;
+#ifdef __OpenBSD__
+ if (!gateway_unspec || rt->rt_dest.sa_family!=AF_INET6)
+#endif
+ rtm->rtm_addrs |= RTA_IFP;
if (!sa_is_unspecified(&rt->rt_ifa))
rtm->rtm_addrs |= RTA_IFA;
}
@@ -590,7 +590,6 @@
rtm->rtm_msglen = (unsigned short)(bp - (char *)rtm);
if (write(ctx->link_fd, rtm, rtm->rtm_msglen) == -1)
return -1;
- ctx->sseq = ctx->seq;
return 0;
}
Home |
Main Index |
Thread Index |
Old Index