Module Name: src Committed By: roy Date: Wed Jul 30 15:47:32 UTC 2014
Modified Files: src/external/bsd/dhcpcd/dist: dhcp.c dhcpcd.c dhcpcd.conf.5.in if-options.c ipv6nd.c Log Message: Sync To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/external/bsd/dhcpcd/dist/dhcp.c cvs rdiff -u -r1.6 -r1.7 src/external/bsd/dhcpcd/dist/dhcpcd.c cvs rdiff -u -r1.9 -r1.10 src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in \ src/external/bsd/dhcpcd/dist/ipv6nd.c cvs rdiff -u -r1.10 -r1.11 src/external/bsd/dhcpcd/dist/if-options.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/dhcpcd/dist/dhcp.c diff -u src/external/bsd/dhcpcd/dist/dhcp.c:1.14 src/external/bsd/dhcpcd/dist/dhcp.c:1.15 --- src/external/bsd/dhcpcd/dist/dhcp.c:1.14 Mon Jul 14 11:49:48 2014 +++ src/external/bsd/dhcpcd/dist/dhcp.c Wed Jul 30 15:47:32 2014 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcp.c,v 1.14 2014/07/14 11:49:48 roy Exp $"); + __RCSID("$NetBSD: dhcp.c,v 1.15 2014/07/30 15:47:32 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -58,6 +58,7 @@ #include <syslog.h> #include <unistd.h> +#define ELOOP_QUEUE 2 #include "config.h" #include "arp.h" #include "common.h" @@ -205,9 +206,12 @@ get_option(struct dhcpcd_ctx *ctx, goto exit; break; case DHO_OPTIONSOVERLOADED: - /* Ensure we only get this option once */ + /* Ensure we only get this option once by setting + * the last bit as well as the value. + * This is valid because only the first two bits + * actually mean anything in RFC2132 Section 9.3 */ if (!overl) - overl = p[1]; + overl = 0x80 | p[1]; break; } l = *p++; Index: src/external/bsd/dhcpcd/dist/dhcpcd.c diff -u src/external/bsd/dhcpcd/dist/dhcpcd.c:1.6 src/external/bsd/dhcpcd/dist/dhcpcd.c:1.7 --- src/external/bsd/dhcpcd/dist/dhcpcd.c:1.6 Mon Jul 14 11:49:48 2014 +++ src/external/bsd/dhcpcd/dist/dhcpcd.c Wed Jul 30 15:47:32 2014 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcpcd.c,v 1.6 2014/07/14 11:49:48 roy Exp $"); + __RCSID("$NetBSD: dhcpcd.c,v 1.7 2014/07/30 15:47:32 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -345,8 +345,6 @@ configure_interface1(struct interface *i ifo->options &= ~(DHCPCD_ARP | DHCPCD_IPV4LL); if (!(ifp->flags & (IFF_POINTOPOINT | IFF_LOOPBACK | IFF_MULTICAST))) ifo->options &= ~DHCPCD_IPV6RS; - if (ifo->options & DHCPCD_LINK && ifp->carrier == LINK_UNKNOWN) - ifo->options &= ~DHCPCD_LINK; if (ifo->metric != -1) ifp->metric = (unsigned int)ifo->metric; @@ -613,14 +611,33 @@ dhcpcd_startinterface(void *arg) struct if_options *ifo = ifp->options; size_t i; char buf[DUID_LEN * 3]; + struct timeval tv; pre_start(ifp); if (if_up(ifp) == -1) syslog(LOG_ERR, "%s: if_up: %m", ifp->name); - if (ifp->carrier == LINK_DOWN && ifo->options & DHCPCD_LINK) { - syslog(LOG_INFO, "%s: waiting for carrier", ifp->name); - return; + if (ifo->options & DHCPCD_LINK) { +link_retry: + switch (ifp->carrier) { + case LINK_UP: + break; + case LINK_DOWN: + syslog(LOG_INFO, "%s: waiting for carrier", ifp->name); + return; + case LINK_UNKNOWN: + /* No media state available, so we loop until + * IFF_UP and IFF_RUNNING are set. */ + ifp->carrier = if_carrier(ifp); + if (ifp->carrier != LINK_UNKNOWN) + goto link_retry; + syslog(LOG_INFO, "%s: unknown carrier", ifp->name); + tv.tv_sec = 0; + tv.tv_usec = 100; + eloop_timeout_add_tv(ifp->ctx->eloop, &tv, + dhcpcd_startinterface, ifp); + return; + } } if (ifo->options & (DHCPCD_DUID | DHCPCD_IPV6)) { Index: src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in diff -u src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in:1.9 src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in:1.10 --- src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in:1.9 Mon Jul 14 11:49:48 2014 +++ src/external/bsd/dhcpcd/dist/dhcpcd.conf.5.in Wed Jul 30 15:47:32 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: dhcpcd.conf.5.in,v 1.9 2014/07/14 11:49:48 roy Exp $ +.\" $NetBSD: dhcpcd.conf.5.in,v 1.10 2014/07/30 15:47:32 roy Exp $ .\" Copyright (c) 2006-2014 Roy Marples .\" All rights reserved .\" @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 7, 2014 +.Dd July 14, 2014 .Dt DHCPCD.CONF 5 .Os .Sh NAME @@ -264,7 +264,7 @@ of 64 is assumed, unless the maximum does not fit. In this case .Ar prefix_len -is increased to the highest multiple of 8 that can accomodate the +is increased to the highest multiple of 8 that can accommodate the .Ar sla_id . .Ar sla_id is an integer and is added to the prefix which must fit inside @@ -653,7 +653,7 @@ This option cannot be requested, regardl .It Ic index The option can appear more than once and will be indexed. .It Ic array -The option data is split into a space seperated array, each element being +The option data is split into a space separated array, each element being the same type. .El .Ss Types to define Index: src/external/bsd/dhcpcd/dist/ipv6nd.c diff -u src/external/bsd/dhcpcd/dist/ipv6nd.c:1.9 src/external/bsd/dhcpcd/dist/ipv6nd.c:1.10 --- src/external/bsd/dhcpcd/dist/ipv6nd.c:1.9 Mon Jul 14 11:49:48 2014 +++ src/external/bsd/dhcpcd/dist/ipv6nd.c Wed Jul 30 15:47:32 2014 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: ipv6nd.c,v 1.9 2014/07/14 11:49:48 roy Exp $"); + __RCSID("$NetBSD: ipv6nd.c,v 1.10 2014/07/30 15:47:32 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -49,7 +49,7 @@ #include <syslog.h> #include <unistd.h> -#define ELOOP_QUEUE 2 +#define ELOOP_QUEUE 3 #include "common.h" #include "dhcpcd.h" #include "dhcp6.h" @@ -606,9 +606,14 @@ ipv6nd_dadcallback(void *arg) * Because ap->dadcounter is always increamented, * a different address is generated. */ /* XXX Cache DAD counter per prefix/id/ssid? */ - if (ifp->options->options & DHCPCD_SLAACPRIVATE && - ap->dadcounter < IDGEN_RETRIES) - { + if (ifp->options->options & DHCPCD_SLAACPRIVATE) { + if (ap->dadcounter >= IDGEN_RETRIES) { + syslog(LOG_ERR, + "%s: unable to obtain a" + " stable private address", + ifp->name); + goto try_script; + } syslog(LOG_INFO, "%s: deleting address %s", ifp->name, ap->saddr); if (if_deladdress6(ap) == -1 && @@ -645,6 +650,7 @@ ipv6nd_dadcallback(void *arg) } } +try_script: if (!wascompleted) { TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { if (rap->iface != ifp) Index: src/external/bsd/dhcpcd/dist/if-options.c diff -u src/external/bsd/dhcpcd/dist/if-options.c:1.10 src/external/bsd/dhcpcd/dist/if-options.c:1.11 --- src/external/bsd/dhcpcd/dist/if-options.c:1.10 Mon Jul 14 11:49:48 2014 +++ src/external/bsd/dhcpcd/dist/if-options.c Wed Jul 30 15:47:32 2014 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: if-options.c,v 1.10 2014/07/14 11:49:48 roy Exp $"); + __RCSID("$NetBSD: if-options.c,v 1.11 2014/07/30 15:47:32 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -2065,11 +2065,11 @@ read_config(struct dhcpcd_ctx *ctx, for (e = dhcpcd_embedded_conf; *e; e++) { ol = strlen(*e) + 1; if (ol > buflen) { - free(buf); buflen = ol; - buf = malloc(buflen); + buf = realloc(buf, buflen); if (buf == NULL) { syslog(LOG_ERR, "%s: %m", __func__); + free(buf); return NULL; } }