Module Name: src Committed By: roy Date: Fri Sep 4 12:25:01 UTC 2015
Modified Files: src/external/bsd/dhcpcd/dist: defs.h dhcp.c dhcpcd.c if-options.c if-options.h if.c script.c Log Message: Sync To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/external/bsd/dhcpcd/dist/defs.h cvs rdiff -u -r1.34 -r1.35 src/external/bsd/dhcpcd/dist/dhcp.c cvs rdiff -u -r1.27 -r1.28 src/external/bsd/dhcpcd/dist/dhcpcd.c cvs rdiff -u -r1.26 -r1.27 src/external/bsd/dhcpcd/dist/if-options.c cvs rdiff -u -r1.13 -r1.14 src/external/bsd/dhcpcd/dist/if-options.h cvs rdiff -u -r1.15 -r1.16 src/external/bsd/dhcpcd/dist/if.c cvs rdiff -u -r1.22 -r1.23 src/external/bsd/dhcpcd/dist/script.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/defs.h diff -u src/external/bsd/dhcpcd/dist/defs.h:1.20 src/external/bsd/dhcpcd/dist/defs.h:1.21 --- src/external/bsd/dhcpcd/dist/defs.h:1.20 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/defs.h Fri Sep 4 12:25:01 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.20 2015/08/21 10:39:00 roy Exp $ */ +/* $NetBSD: defs.h,v 1.21 2015/09/04 12:25:01 roy Exp $ */ /* * dhcpcd - DHCP client daemon @@ -30,7 +30,7 @@ #define CONFIG_H #define PACKAGE "dhcpcd" -#define VERSION "6.9.2" +#define VERSION "6.9.3" #ifndef CONFIG # define CONFIG SYSCONFDIR "/" PACKAGE ".conf" Index: src/external/bsd/dhcpcd/dist/dhcp.c diff -u src/external/bsd/dhcpcd/dist/dhcp.c:1.34 src/external/bsd/dhcpcd/dist/dhcp.c:1.35 --- src/external/bsd/dhcpcd/dist/dhcp.c:1.34 Sat Aug 22 05:45:57 2015 +++ src/external/bsd/dhcpcd/dist/dhcp.c Fri Sep 4 12:25:01 2015 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcp.c,v 1.34 2015/08/22 05:45:57 christos Exp $"); + __RCSID("$NetBSD: dhcp.c,v 1.35 2015/09/04 12:25:01 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -713,8 +713,11 @@ uint16_t dhcp_get_mtu(const struct interface *ifp) { const struct dhcp_message *dhcp; - uint16_t mtu = 0; // XXX: gcc + uint16_t mtu; + if (ifp->options->mtu) + return (uint16_t)ifp->options->mtu; + mtu = 0; /* bogus gcc warning */ if ((dhcp = D_CSTATE(ifp)->new) == NULL || has_option_mask(ifp->options->nomask, DHO_MTU) || get_option_uint16(ifp->ctx, &mtu, dhcp, DHO_MTU) == -1) @@ -2022,7 +2025,8 @@ dhcp_arp_conflicted(struct arp_state *as astate->failed = astate->addr; arp_report_conflicted(astate, amsg); unlink(state->leasefile); - if (!state->lease.frominfo) + if (!(ifp->options->options & DHCPCD_STATIC) && + !state->lease.frominfo) dhcp_decline(ifp); #ifdef IN_IFF_DUPLICATED ia = ipv4_iffindaddr(ifp, &astate->addr, NULL); @@ -2186,6 +2190,61 @@ dhcp_message_new(const struct in_addr *a } static void +dhcp_arp_bind(struct interface *ifp) +{ + const struct dhcp_state *state; + struct in_addr addr; + struct ipv4_addr *ia; + struct arp_state *astate; + + eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp); + + state = D_CSTATE(ifp); + addr.s_addr = state->offer->yiaddr; + /* If the interface already has the address configured + * then we can't ARP for duplicate detection. */ + ia = ipv4_findaddr(ifp->ctx, &addr); + +#ifdef IN_IFF_TENTATIVE + if (ia == NULL || ia->addr_flags & IN_IFF_NOTUSEABLE) { + if ((astate = arp_new(ifp, &addr)) != NULL) { + astate->probed_cb = dhcp_arp_probed; + astate->conflicted_cb = dhcp_arp_conflicted; + astate->announced_cb = dhcp_arp_announced; + } + if (ia == NULL) { + struct dhcp_lease l; + + get_lease(ifp->ctx, &l, state->offer); + /* Add the address now, let the kernel handle DAD. */ + ipv4_addaddr(ifp, &l.addr, &l.net, &l.brd); + } else + logger(ifp->ctx, LOG_INFO, "%s: waiting for DAD on %s", + ifp->name, inet_ntoa(addr)); + return; + } +#else + if (ifp->options->options & DHCPCD_ARP && ia == NULL) { + struct dhcp_lease l; + + get_lease(ifp->ctx, &l, state->offer); + logger(ifp->ctx, LOG_INFO, "%s: probing static address %s/%d", + ifp->name, inet_ntoa(l.addr), inet_ntocidr(l.net)); + if ((astate = arp_new(ifp, &addr)) != NULL) { + astate->probed_cb = dhcp_arp_probed; + astate->conflicted_cb = dhcp_arp_conflicted; + astate->announced_cb = dhcp_arp_announced; + /* We need to handle DAD. */ + arp_probe(astate); + } + return; + } +#endif + + dhcp_bind(ifp); +} + +static void dhcp_static(struct interface *ifp) { struct if_options *ifo; @@ -2210,10 +2269,8 @@ dhcp_static(struct interface *ifp) state->offer = dhcp_message_new(ia ? &ia->addr : &ifo->req_addr, ia ? &ia->net : &ifo->req_mask); - if (state->offer) { - eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp); - dhcp_bind(ifp); - } + if (state->offer) + dhcp_arp_bind(ifp); } void @@ -2503,8 +2560,9 @@ dhcp_handledhcp(struct interface *ifp, s unsigned int i; size_t auth_len; char *msg; +#ifdef IN_IFF_DUPLICATED struct ipv4_addr *ia; - struct arp_state *astate; +#endif /* We may have found a BOOTP server */ if (get_option_uint8(ifp->ctx, &type, dhcp, DHO_MESSAGETYPE) == -1) @@ -2797,43 +2855,7 @@ dhcp_handledhcp(struct interface *ifp, s lease->frominfo = 0; eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp); - addr.s_addr = state->offer->yiaddr; - /* If the interface already has the address configured - * then we can't ARP for duplicate detection. */ - ia = ipv4_findaddr(ifp->ctx, &addr); - -#ifdef IN_IFF_TENTATIVE - if (ia == NULL || ia->addr_flags & IN_IFF_NOTUSEABLE) { - if ((astate = arp_new(ifp, &addr)) != NULL) { - astate->probed_cb = dhcp_arp_probed; - astate->conflicted_cb = dhcp_arp_conflicted; - astate->announced_cb = dhcp_arp_announced; - } - if (ia == NULL) { - struct dhcp_lease l; - - get_lease(ifp->ctx, &l, state->offer); - /* Add the address now, let the kernel handle DAD. */ - ipv4_addaddr(ifp, &l.addr, &l.net, &l.brd); - } - return; - } -#else - if (ifo->options & DHCPCD_ARP) { - if (ia == NULL) { - if ((astate = arp_new(ifp, &addr)) != NULL) { - astate->probed_cb = dhcp_arp_probed; - astate->conflicted_cb = dhcp_arp_conflicted; - astate->announced_cb = dhcp_arp_announced; - /* We need to handle DAD. */ - arp_probe(astate); - } - return; - } - } -#endif - - dhcp_bind(ifp); + dhcp_arp_bind(ifp); } static size_t Index: src/external/bsd/dhcpcd/dist/dhcpcd.c diff -u src/external/bsd/dhcpcd/dist/dhcpcd.c:1.27 src/external/bsd/dhcpcd/dist/dhcpcd.c:1.28 --- src/external/bsd/dhcpcd/dist/dhcpcd.c:1.27 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/dhcpcd.c Fri Sep 4 12:25:01 2015 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: dhcpcd.c,v 1.27 2015/08/21 10:39:00 roy Exp $"); + __RCSID("$NetBSD: dhcpcd.c,v 1.28 2015/09/04 12:25:01 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -436,7 +436,7 @@ configure_interface1(struct interface *i ifo->options |= DHCPCD_STATIC; if (ifp->flags & IFF_NOARP || ifo->options & (DHCPCD_INFORM | DHCPCD_STATIC)) - ifo->options &= ~(DHCPCD_ARP | DHCPCD_IPV4LL); + ifo->options &= ~DHCPCD_IPV4LL; if (ifp->flags & (IFF_POINTOPOINT | IFF_LOOPBACK) || !(ifp->flags & IFF_MULTICAST)) ifo->options &= ~DHCPCD_IPV6RS; Index: src/external/bsd/dhcpcd/dist/if-options.c diff -u src/external/bsd/dhcpcd/dist/if-options.c:1.26 src/external/bsd/dhcpcd/dist/if-options.c:1.27 --- src/external/bsd/dhcpcd/dist/if-options.c:1.26 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/if-options.c Fri Sep 4 12:25:01 2015 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: if-options.c,v 1.26 2015/08/21 10:39:00 roy Exp $"); + __RCSID("$NetBSD: if-options.c,v 1.27 2015/09/04 12:25:01 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -813,7 +813,7 @@ parse_option(struct dhcpcd_ctx *ctx, con ifo->req_mask.s_addr = 0; } ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT; - ifo->options &= ~(DHCPCD_ARP | DHCPCD_STATIC); + ifo->options &= ~DHCPCD_STATIC; break; case 't': ifo->timeout = (time_t)strtoi(arg, NULL, 0, 0, INT32_MAX, &e); @@ -1101,6 +1101,16 @@ parse_option(struct dhcpcd_ctx *ctx, con return -1; } TAILQ_INSERT_TAIL(ifo->routes, rt, next); + } else if (strncmp(arg, "interface_mtu=", + strlen("interface_mtu=")) == 0 || + strncmp(arg, "mtu=", strlen("mtu=")) == 0) + { + ifo->mtu = (unsigned int)strtou(p, NULL, 0, + MTU_MIN, MTU_MAX, &e); + if (e) { + logger(ctx, LOG_ERR, "invalid MTU %s", p); + return -1; + } } else { dl = 0; if (ifo->config != NULL) { Index: src/external/bsd/dhcpcd/dist/if-options.h diff -u src/external/bsd/dhcpcd/dist/if-options.h:1.13 src/external/bsd/dhcpcd/dist/if-options.h:1.14 --- src/external/bsd/dhcpcd/dist/if-options.h:1.13 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/if-options.h Fri Sep 4 12:25:01 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if-options.h,v 1.13 2015/08/21 10:39:00 roy Exp $ */ +/* $NetBSD: if-options.h,v 1.14 2015/09/04 12:25:01 roy Exp $ */ /* * dhcpcd - DHCP client daemon @@ -174,6 +174,7 @@ struct if_options { struct in_addr req_addr; struct in_addr req_mask; struct rt_head *routes; + unsigned int mtu; char **config; char **environ; Index: src/external/bsd/dhcpcd/dist/if.c diff -u src/external/bsd/dhcpcd/dist/if.c:1.15 src/external/bsd/dhcpcd/dist/if.c:1.16 --- src/external/bsd/dhcpcd/dist/if.c:1.15 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/if.c Fri Sep 4 12:25:01 2015 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: if.c,v 1.15 2015/08/21 10:39:00 roy Exp $"); + __RCSID("$NetBSD: if.c,v 1.16 2015/09/04 12:25:01 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -679,7 +679,7 @@ xsocket(int domain, int type, int protoc if ((s = socket(domain, type, protocol)) == -1) return -1; if ((flags & O_CLOEXEC) && (xflags = fcntl(s, F_GETFD, 0)) == -1 || - fcntl(s, F_SETFD, xlags | FD_CLOEXEC) == -1) + fcntl(s, F_SETFD, xflags | FD_CLOEXEC) == -1) goto out; if ((flags & O_NONBLOCK) && (xflags = fcntl(s, F_GETFL, 0)) == -1 || fcntl(s, F_SETFL, xflags | O_NONBLOCK) == -1) Index: src/external/bsd/dhcpcd/dist/script.c diff -u src/external/bsd/dhcpcd/dist/script.c:1.22 src/external/bsd/dhcpcd/dist/script.c:1.23 --- src/external/bsd/dhcpcd/dist/script.c:1.22 Fri Aug 21 10:39:00 2015 +++ src/external/bsd/dhcpcd/dist/script.c Fri Sep 4 12:25:01 2015 @@ -1,5 +1,5 @@ #include <sys/cdefs.h> - __RCSID("$NetBSD: script.c,v 1.22 2015/08/21 10:39:00 roy Exp $"); + __RCSID("$NetBSD: script.c,v 1.23 2015/09/04 12:25:01 roy Exp $"); /* * dhcpcd - DHCP client daemon @@ -134,8 +134,7 @@ make_var(struct dhcpcd_ctx *ctx, const c char *v; len = strlen(prefix) + strlen(var) + 2; - v = malloc(len); - if (v == NULL) { + if ((v = malloc(len)) == NULL) { logger(ctx, LOG_ERR, "%s: %m", __func__); return NULL; } @@ -161,8 +160,10 @@ append_config(struct dhcpcd_ctx *ctx, ch eq = strchr(config[i], '='); e1 = (size_t)(eq - config[i] + 1); for (j = 0; j < *len; j++) { - if (strncmp(ne[j] + strlen(prefix) + 1, - config[i], e1) == 0) + if (strncmp(ne[j], prefix, strlen(prefix)) == 0 && + ne[j][strlen(prefix)] == '_' && + strncmp(ne[j] + strlen(prefix) + 1, + config[i], e1) == 0) { p = make_var(ctx, prefix, config[i]); if (p == NULL) {