Module Name: src Committed By: roy Date: Wed Jan 20 19:42:33 UTC 2016
Modified Files: src/external/bsd/dhcpcd/dist: defs.h dhcp6.c dhcpcd.8.in dhcpcd.c dhcpcd.h if-options.c if-options.h Log Message: Sync To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/external/bsd/dhcpcd/dist/defs.h cvs rdiff -u -r1.17 -r1.18 src/external/bsd/dhcpcd/dist/dhcp6.c cvs rdiff -u -r1.46 -r1.47 src/external/bsd/dhcpcd/dist/dhcpcd.8.in cvs rdiff -u -r1.30 -r1.31 src/external/bsd/dhcpcd/dist/dhcpcd.c cvs rdiff -u -r1.14 -r1.15 src/external/bsd/dhcpcd/dist/dhcpcd.h cvs rdiff -u -r1.29 -r1.30 src/external/bsd/dhcpcd/dist/if-options.c cvs rdiff -u -r1.16 -r1.17 src/external/bsd/dhcpcd/dist/if-options.h 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/defs.h diff -u src/external/bsd/dhcpcd/dist/defs.h:1.23 src/external/bsd/dhcpcd/dist/defs.h:1.24 --- src/external/bsd/dhcpcd/dist/defs.h:1.23 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/defs.h Wed Jan 20 19:42:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.23 2016/01/07 20:09:43 roy Exp $ */ +/* $NetBSD: defs.h,v 1.24 2016/01/20 19:42:33 roy Exp $ */ /* * dhcpcd - DHCP client daemon @@ -30,7 +30,7 @@ #define CONFIG_H #define PACKAGE "dhcpcd" -#define VERSION "6.10.0" +#define VERSION "6.10.1" #ifndef CONFIG # define CONFIG SYSCONFDIR "/" PACKAGE ".conf" Index: src/external/bsd/dhcpcd/dist/dhcp6.c diff -u src/external/bsd/dhcpcd/dist/dhcp6.c:1.17 src/external/bsd/dhcpcd/dist/dhcp6.c:1.18 --- src/external/bsd/dhcpcd/dist/dhcp6.c:1.17 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/dhcp6.c Wed Jan 20 19:42:33 2016 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcp6.c,v 1.17 2016/01/07 20:09:43 roy Exp $"); + __RCSID("$NetBSD: dhcp6.c,v 1.18 2016/01/20 19:42:33 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -2485,14 +2485,20 @@ dhcp6_delegate_prefix(struct interface * for (k = 0; k < i; j++) if (strcmp(sla->ifname, ia->sla[j].ifname) == 0) break; - if (j >= i && - ((ifd = if_find(ifp->ctx->ifaces, - sla->ifname)) == NULL || - !ifd->active)) - logger(ifp->ctx, LOG_ERR, - "%s: interface does not exist" - " for delegation", - sla->ifname); + if (j >= i) { + ifd = if_find(ifp->ctx->ifaces, sla->ifname); + if (ifd == NULL) + logger(ifp->ctx, LOG_ERR, + "%s: interface does not exist" + " for delegation", + sla->ifname); + else if (!ifd->active) { + logger(ifp->ctx, LOG_INFO, + "%s: activating for delegation", + sla->ifname); + dhcpcd_activateinterface(ifd); + } + } } } Index: src/external/bsd/dhcpcd/dist/dhcpcd.8.in diff -u src/external/bsd/dhcpcd/dist/dhcpcd.8.in:1.46 src/external/bsd/dhcpcd/dist/dhcpcd.8.in:1.47 --- src/external/bsd/dhcpcd/dist/dhcpcd.8.in:1.46 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/dhcpcd.8.in Wed Jan 20 19:42:33 2016 @@ -1,4 +1,4 @@ -.\" $NetBSD: dhcpcd.8.in,v 1.46 2016/01/07 20:09:43 roy Exp $ +.\" $NetBSD: dhcpcd.8.in,v 1.47 2016/01/20 19:42:33 roy Exp $ .\" Copyright (c) 2006-2016 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 January 7, 2016 +.Dd January 14, 2016 .Dt DHCPCD 8 .Os .Sh NAME @@ -31,7 +31,7 @@ .Nd a DHCP client .Sh SYNOPSIS .Nm -.Op Fl 46ABbDdEGgHJKLMNPpqTV +.Op Fl 146ABbDdEGgHJKLMNPpqTV .Op Fl C , Fl Fl nohook Ar hook .Op Fl c , Fl Fl script Ar script .Op Fl e , Fl Fl env Ar value @@ -570,6 +570,11 @@ However, there are sometimes situations configured exactly how the the DHCP server wants. Here are some options that deal with turning these bits off. .Bl -tag -width indent +.It Fl 1 , Fl Fl oneshot +Exit after configuring an interface. +Use the +.Fl w , Fl Fl waitip +option to specify which protocol(s) to configure before exiting. .It Fl 4 , Fl Fl ipv4only Configure IPv4 only. .It Fl 6 , Fl Fl ipv6only Index: src/external/bsd/dhcpcd/dist/dhcpcd.c diff -u src/external/bsd/dhcpcd/dist/dhcpcd.c:1.30 src/external/bsd/dhcpcd/dist/dhcpcd.c:1.31 --- src/external/bsd/dhcpcd/dist/dhcpcd.c:1.30 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/dhcpcd.c Wed Jan 20 19:42:33 2016 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcpcd.c,v 1.30 2016/01/07 20:09:43 roy Exp $"); + __RCSID("$NetBSD: dhcpcd.c,v 1.31 2016/01/20 19:42:33 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -321,6 +321,12 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx) return 0; } + if (ctx->options & DHCPCD_ONESHOT) { + logger(ctx, LOG_INFO, "exiting due to oneshot"); + eloop_exit(ctx->eloop, EXIT_SUCCESS); + return 0; + } + eloop_timeout_delete(ctx->eloop, handle_exit_timeout, ctx); if (ctx->options & DHCPCD_DAEMONISED || !(ctx->options & DHCPCD_DAEMONISE)) @@ -667,6 +673,41 @@ dhcpcd_pollup(void *arg) dhcpcd_handlecarrier(ifp->ctx, carrier, ifp->flags, ifp->name); } +static void +dhcpcd_initstate1(struct interface *ifp, int argc, char **argv, + unsigned long long options) +{ + struct if_options *ifo; + + configure_interface(ifp, argc, argv, options); + ifo = ifp->options; + + if (ifo->options & DHCPCD_IPV4 && ipv4_init(ifp->ctx) == -1) { + logger(ifp->ctx, LOG_ERR, "ipv4_init: %m"); + ifo->options &= ~DHCPCD_IPV4; + } + if (ifo->options & DHCPCD_IPV6 && ipv6_init(ifp->ctx) == NULL) { + logger(ifp->ctx, LOG_ERR, "ipv6_init: %m"); + ifo->options &= ~DHCPCD_IPV6RS; + } + + /* Add our link-local address before upping the interface + * so our RFC7217 address beats the hwaddr based one. + * This needs to happen before PREINIT incase a hook script + * inadvertently ups the interface. */ + if (ifo->options & DHCPCD_IPV6 && ipv6_start(ifp) == -1) { + logger(ifp->ctx, LOG_ERR, "%s: ipv6_start: %m", ifp->name); + ifo->options &= ~DHCPCD_IPV6; + } +} + +static void +dhcpcd_initstate(struct interface *ifp, unsigned long long options) +{ + + dhcpcd_initstate1(ifp, ifp->ctx->argc, ifp->ctx->argv, options); +} + void dhcpcd_handlecarrier(struct dhcpcd_ctx *ctx, int carrier, unsigned int flags, const char *ifname) @@ -944,67 +985,44 @@ dhcpcd_prestartinterface(void *arg) } static void -handle_link(void *arg) -{ - struct dhcpcd_ctx *ctx; - - ctx = arg; - if (if_managelink(ctx) == -1) { - logger(ctx, LOG_ERR, "if_managelink: %m"); - eloop_event_delete(ctx->eloop, ctx->link_fd); - close(ctx->link_fd); - ctx->link_fd = -1; - } -} - -static void -dhcpcd_initstate1(struct interface *ifp, int argc, char **argv, - unsigned long long options) +run_preinit(struct interface *ifp) { - struct if_options *ifo; - configure_interface(ifp, argc, argv, options); - ifo = ifp->options; + pre_start(ifp); + if (ifp->ctx->options & DHCPCD_TEST) + return; - if (ifo->options & DHCPCD_IPV4 && ipv4_init(ifp->ctx) == -1) { - logger(ifp->ctx, LOG_ERR, "ipv4_init: %m"); - ifo->options &= ~DHCPCD_IPV4; - } - if (ifo->options & DHCPCD_IPV6 && ipv6_init(ifp->ctx) == NULL) { - logger(ifp->ctx, LOG_ERR, "ipv6_init: %m"); - ifo->options &= ~DHCPCD_IPV6RS; - } + script_runreason(ifp, "PREINIT"); - /* Add our link-local address before upping the interface - * so our RFC7217 address beats the hwaddr based one. - * This needs to happen before PREINIT incase a hook script - * inadvertently ups the interface. */ - if (ifo->options & DHCPCD_IPV6 && ipv6_start(ifp) == -1) { - logger(ifp->ctx, LOG_ERR, "%s: ipv6_start: %m", ifp->name); - ifo->options &= ~DHCPCD_IPV6; - } + if (ifp->options->options & DHCPCD_LINK && ifp->carrier != LINK_UNKNOWN) + script_runreason(ifp, + ifp->carrier == LINK_UP ? "CARRIER" : "NOCARRIER"); } void -dhcpcd_initstate(struct interface *ifp, unsigned long long options) +dhcpcd_activateinterface(struct interface *ifp) { - dhcpcd_initstate1(ifp, ifp->ctx->argc, ifp->ctx->argv, options); + if (!ifp->active) { + ifp->active = 1; + dhcpcd_initstate(ifp, 0); + run_preinit(ifp); + dhcpcd_prestartinterface(ifp); + } } static void -run_preinit(struct interface *ifp) +handle_link(void *arg) { + struct dhcpcd_ctx *ctx; - pre_start(ifp); - if (ifp->ctx->options & DHCPCD_TEST) - return; - - script_runreason(ifp, "PREINIT"); - - if (ifp->options->options & DHCPCD_LINK && ifp->carrier != LINK_UNKNOWN) - script_runreason(ifp, - ifp->carrier == LINK_UP ? "CARRIER" : "NOCARRIER"); + ctx = arg; + if (if_managelink(ctx) == -1) { + logger(ctx, LOG_ERR, "if_managelink: %m"); + eloop_event_delete(ctx->eloop, ctx->link_fd); + close(ctx->link_fd); + ctx->link_fd = -1; + } } int @@ -1023,25 +1041,17 @@ dhcpcd_handleinterface(void *arg, int ac errno = ESRCH; return -1; } - if (ifp->active) + if (ifp->active) { logger(ctx, LOG_DEBUG, "%s: interface departed", ifp->name); - ifp->options->options |= DHCPCD_DEPARTED; - stop_interface(ifp); + ifp->options->options |= DHCPCD_DEPARTED; + stop_interface(ifp); + } TAILQ_REMOVE(ctx->ifaces, ifp, next); if_free(ifp); return 0; } - /* If running off an interface list, check it's in it. */ - if (ctx->ifc && action != 2) { - for (i = 0; i < ctx->ifc; i++) - if (strcmp(ctx->ifv[i], ifname) == 0) - break; - if (i >= ctx->ifc) - return 0; - } - i = -1; ifs = if_discover(ctx, -1, UNCONST(argv)); if (ifs == NULL) { @@ -1049,33 +1059,42 @@ dhcpcd_handleinterface(void *arg, int ac return -1; } TAILQ_FOREACH_SAFE(ifp, ifs, next, ifn) { - if (!ifp->active || strcmp(ifp->name, ifname) != 0) + if (strcmp(ifp->name, ifname) != 0) continue; + + /* If running off an interface list, check it's in it. */ + if (ctx->ifc) { + for (i = 0; i < ctx->ifc; i++) + if (strcmp(ctx->ifv[i], ifname) == 0) + break; + if (i >= ctx->ifc) + ifp->active = 0; + } + i = 0; /* Check if we already have the interface */ iff = if_find(ctx->ifaces, ifp->name); if (iff) { - logger(ctx, LOG_DEBUG, "%s: interface updated", iff->name); + if (iff->active) + logger(ctx, LOG_DEBUG, "%s: interface updated", + iff->name); /* The flags and hwaddr could have changed */ iff->flags = ifp->flags; iff->hwlen = ifp->hwlen; if (ifp->hwlen != 0) memcpy(iff->hwaddr, ifp->hwaddr, iff->hwlen); } else { - logger(ctx, LOG_DEBUG, "%s: interface added", ifp->name); TAILQ_REMOVE(ifs, ifp, next); TAILQ_INSERT_TAIL(ctx->ifaces, ifp, next); + if (!ifp->active) + continue; + logger(ctx, LOG_DEBUG, "%s: interface added", + ifp->name); dhcpcd_initstate(ifp, 0); run_preinit(ifp); iff = ifp; - iff->active = 0; - } - if (!iff->active) { - iff->active = 1; - dhcpcd_initstate(iff, 0); - run_preinit(iff); } - if (action > 0) + if (action > 0 && iff->active) dhcpcd_prestartinterface(iff); } Index: src/external/bsd/dhcpcd/dist/dhcpcd.h diff -u src/external/bsd/dhcpcd/dist/dhcpcd.h:1.14 src/external/bsd/dhcpcd/dist/dhcpcd.h:1.15 --- src/external/bsd/dhcpcd/dist/dhcpcd.h:1.14 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/dhcpcd.h Wed Jan 20 19:42:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: dhcpcd.h,v 1.14 2016/01/07 20:09:43 roy Exp $ */ +/* $NetBSD: dhcpcd.h,v 1.15 2016/01/20 19:42:33 roy Exp $ */ /* * dhcpcd - DHCP client daemon @@ -204,6 +204,6 @@ void dhcpcd_dropinterface(struct interfa int dhcpcd_selectprofile(struct interface *, const char *); void dhcpcd_startinterface(void *); -void dhcpcd_initstate(struct interface *, unsigned long long); +void dhcpcd_activateinterface(struct interface *); #endif Index: src/external/bsd/dhcpcd/dist/if-options.c diff -u src/external/bsd/dhcpcd/dist/if-options.c:1.29 src/external/bsd/dhcpcd/dist/if-options.c:1.30 --- src/external/bsd/dhcpcd/dist/if-options.c:1.29 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/if-options.c Wed Jan 20 19:42:33 2016 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: if-options.c,v 1.29 2016/01/07 20:09:43 roy Exp $"); + __RCSID("$NetBSD: if-options.c,v 1.30 2016/01/20 19:42:33 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -156,6 +156,9 @@ const struct option cf_options[] = { {"whitelist", required_argument, NULL, 'W'}, {"blacklist", required_argument, NULL, 'X'}, {"denyinterfaces", required_argument, NULL, 'Z'}, + {"oneshot", no_argument, NULL, '1'}, + {"ipv4only", no_argument, NULL, '4'}, + {"ipv6only", no_argument, NULL, '6'}, {"arping", required_argument, NULL, O_ARPING}, {"destination", required_argument, NULL, O_DESTINATION}, {"fallback", required_argument, NULL, O_FALLBACK}, @@ -167,8 +170,6 @@ const struct option cf_options[] = { {"ipv6ra_own", no_argument, NULL, O_IPV6RA_OWN}, {"ipv6ra_own_default", no_argument, NULL, O_IPV6RA_OWN_D}, {"ipv6ra_accept_nopublic", no_argument, NULL, O_IPV6RA_ACCEPT_NOPUBLIC}, - {"ipv4only", no_argument, NULL, '4'}, - {"ipv6only", no_argument, NULL, '6'}, {"ipv4", no_argument, NULL, O_IPV4}, {"noipv4", no_argument, NULL, O_NOIPV4}, {"ipv6", no_argument, NULL, O_IPV6}, @@ -1181,6 +1182,9 @@ parse_option(struct dhcpcd_ctx *ctx, con if (ifname == NULL) ctx->ifdv = splitv(ctx, &ctx->ifdc, ctx->ifdv, arg); break; + case '1': + ifo->options |= DHCPCD_ONESHOT; + break; case '4': ifo->options &= ~DHCPCD_IPV6; ifo->options |= DHCPCD_IPV4; @@ -2171,7 +2175,7 @@ read_config(struct dhcpcd_ctx *ctx, buflen = 0; /* Parse our embedded options file */ - if (ifname == NULL) { + if (ifname == NULL && !(ctx->options & DHCPCD_PRINT_PIDFILE)) { /* Space for initial estimates */ #if defined(INET) && defined(INITDEFINES) ifo->dhcp_override = Index: src/external/bsd/dhcpcd/dist/if-options.h diff -u src/external/bsd/dhcpcd/dist/if-options.h:1.16 src/external/bsd/dhcpcd/dist/if-options.h:1.17 --- src/external/bsd/dhcpcd/dist/if-options.h:1.16 Thu Jan 7 20:09:43 2016 +++ src/external/bsd/dhcpcd/dist/if-options.h Wed Jan 20 19:42:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if-options.h,v 1.16 2016/01/07 20:09:43 roy Exp $ */ +/* $NetBSD: if-options.h,v 1.17 2016/01/20 19:42:33 roy Exp $ */ /* * dhcpcd - DHCP client daemon @@ -43,7 +43,7 @@ /* Don't set any optional arguments here so we retain POSIX * compatibility with getopt */ -#define IF_OPTS "46bc:de:f:gh:i:j:kl:m:no:pqr:s:t:u:v:wxy:z:" \ +#define IF_OPTS "146bc:de:f:gh:i:j:kl:m:no:pqr:s:t:u:v:wxy:z:" \ "ABC:DEF:GHI:JKLMNO:PQ:S:TUVW:X:Z:" #define NOERR_IF_OPTS ":" IF_OPTS @@ -116,6 +116,7 @@ #define DHCPCD_BOOTP (1ULL << 57) #define DHCPCD_INITIAL_DELAY (1ULL << 58) #define DHCPCD_PRINT_PIDFILE (1ULL << 59) +#define DHCPCD_ONESHOT (1ULL << 60) #define DHCPCD_NODROP (DHCPCD_EXITING | DHCPCD_PERSISTENT)