Mercurial > hg > dhcpcd
changeset 2564:670bab91dd10 draft
Stop restoring kernel flags to their state before dhcpcd ran.
As multiple dhcpcd daemons could be in use to facilitate separate sessions
per DHCPv6 IA resetting them at exist could break the others.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 02 Jul 2014 13:15:18 +0000 |
| parents | 51820d3bf476 |
| children | 4fcda038fb87 |
| files | dhcpcd.c dhcpcd.h if-bsd.c if-linux.c if.h |
| diffstat | 5 files changed, 2 insertions(+), 114 deletions(-) [+] |
line wrap: on
line diff
--- a/dhcpcd.c Wed Jul 02 12:57:50 2014 +0000 +++ b/dhcpcd.c Wed Jul 02 13:15:18 2014 +0000 @@ -1666,7 +1666,6 @@ free_options(ifo); free_globals(&ctx); - if_rarestore(&ctx); ipv4_ctxfree(&ctx); ipv6_ctxfree(&ctx); dev_stop(&ctx, !(ctx.options & DHCPCD_FORKED));
--- a/dhcpcd.h Wed Jul 02 12:57:50 2014 +0000 +++ b/dhcpcd.h Wed Jul 02 13:15:18 2014 +0000 @@ -123,11 +123,8 @@ struct dhcp_opt *dhcp6_opts; size_t dhcp6_opts_len; struct ipv6_ctx *ipv6; - char **ra_restore; - size_t ra_restore_len; #ifndef __linux__ int ra_global; - int ra_kernel_set; #endif #endif /* INET6 */
--- a/if-bsd.c Wed Jul 02 12:57:50 2014 +0000 +++ b/if-bsd.c Wed Jul 02 13:15:18 2014 +0000 @@ -1019,47 +1019,6 @@ return flags; } -void -if_rarestore(struct dhcpcd_ctx *ctx) -{ - - if (ctx->options & DHCPCD_FORKED) - return; - - for (; ctx->ra_restore_len > 0; ctx->ra_restore_len--) { -#ifdef ND6_IFF_ACCEPT_RTADV - if (!(ctx->options & DHCPCD_FORKED)) { - syslog(LOG_DEBUG, - "%s: restoring kernel IPv6 RA support", - ctx->ra_restore[ctx->ra_restore_len - 1]); - if (set_if_nd6_flag( - ctx->ra_restore[ctx->ra_restore_len -1], - ND6_IFF_ACCEPT_RTADV) == -1 && - errno != ENXIO) - syslog(LOG_ERR, "%s: set_if_nd6_flag: %m", - ctx->ra_restore[ctx->ra_restore_len - 1]); -#ifdef ND6_IFF_OVERRIDE_RTADV - if (ctx->ra_kernel_set == 0 && del_if_nd6_flag( - ctx->ra_restore[ctx->ra_restore_len -1], - ND6_IFF_OVERRIDE_RTADV) == -1 && - errno != ENXIO) - syslog(LOG_ERR, "%s: del_if_nd6_flag: %m", - ctx->ra_restore[ctx->ra_restore_len - 1]); -#endif - } -#endif - free(ctx->ra_restore[ctx->ra_restore_len - 1]); - } - free(ctx->ra_restore); - ctx->ra_restore = NULL; - - if (ctx->ra_kernel_set) { - syslog(LOG_DEBUG, "restoring kernel IPv6 RA support"); - if (set_inet6_sysctl(IPV6CTL_ACCEPT_RTADV, 1) == -1) - syslog(LOG_ERR, "IPV6CTL_ACCEPT_RTADV: %m"); - } -} - static int if_raflush(void) { @@ -1087,10 +1046,6 @@ #ifdef ND6_IFF_OVERRIDE_RTADV int override; #endif -#ifdef ND6_IFF_ACCEPT_RTADV - size_t i; - char *p, **nrest; -#endif #ifdef ND6_IFF_IFDISABLED if (del_if_nd6_flag(ifname, ND6_IFF_IFDISABLED) == -1) { @@ -1179,25 +1134,6 @@ return ra; } #endif - for (i = 0; i < ctx->ra_restore_len; i++) - if (strcmp(ctx->ra_restore[i], ifname) == 0) - break; - if (i == ctx->ra_restore_len) { - p = strdup(ifname); - if (p == NULL) { - syslog(LOG_ERR, "%s: %m", __func__); - return 0; - } - nrest = realloc(ctx->ra_restore, - (ctx->ra_restore_len + 1) * sizeof(char *)); - if (nrest == NULL) { - syslog(LOG_ERR, "%s: %m", __func__); - free(p); - return 0; - } - ctx->ra_restore = nrest; - ctx->ra_restore[ctx->ra_restore_len++] = p; - } return 0; } return ra; @@ -1219,7 +1155,6 @@ return ra; } ra = 0; - ctx->ra_kernel_set = 1; /* Flush the kernel knowledge of advertised routers * and prefixes so the kernel does not expire prefixes
--- a/if-linux.c Wed Jul 02 12:57:50 2014 +0000 +++ b/if-linux.c Wed Jul 02 13:15:18 2014 +0000 @@ -1223,33 +1223,11 @@ static const char *prefix = "/proc/sys/net/ipv6/conf"; -void -if_rarestore(struct dhcpcd_ctx *ctx) -{ - char path[256]; - - for (; ctx->ra_restore_len > 0; ctx->ra_restore_len--) { - if (!(ctx->options & DHCPCD_FORKED)) { - syslog(LOG_DEBUG, - "%s: restoring kernel IPv6 RA support", - ctx->ra_restore[ctx->ra_restore_len - 1]); - snprintf(path, sizeof(path), "%s/%s/accept_ra", - prefix, ctx->ra_restore[ctx->ra_restore_len - 1]); - if (write_path(path, "1") == -1 && errno != ENOENT) - syslog(LOG_ERR, "write_path: %s: %m", path); - } - free(ctx->ra_restore[ctx->ra_restore_len - 1]); - } - free(ctx->ra_restore); - ctx->ra_restore = NULL; -} - int -if_checkipv6(struct dhcpcd_ctx *ctx, const char *ifname, int own) +if_checkipv6(__unused struct dhcpcd_ctx *ctx, const char *ifname, int own) { int ra; - size_t i; - char path[256], *p, **nrest; + char path[256]; if (ifname == NULL) ifname = "all"; @@ -1283,25 +1261,6 @@ syslog(LOG_ERR, "write_path: %s: %m", path); return ra; } - for (i = 0; i < ctx->ra_restore_len; i++) - if (strcmp(ctx->ra_restore[i], ifname) == 0) - break; - if (i == ctx->ra_restore_len) { - p = strdup(ifname); - if (p == NULL) { - syslog(LOG_ERR, "%s: %m", __func__); - return 0; - } - nrest = realloc(ctx->ra_restore, - (ctx->ra_restore_len + 1) * sizeof(char *)); - if (nrest == NULL) { - syslog(LOG_ERR, "%s: %m", __func__); - free(p); - return 0; - } - ctx->ra_restore = nrest; - ctx->ra_restore[ctx->ra_restore_len++] = p; - } return 0; }
--- a/if.h Wed Jul 02 12:57:50 2014 +0000 +++ b/if.h Wed Jul 02 13:15:18 2014 +0000 @@ -132,7 +132,6 @@ #ifdef INET6 int if_checkipv6(struct dhcpcd_ctx *ctx, const char *, int); -void if_rarestore(struct dhcpcd_ctx *); int if_nd6reachable(const char *ifname, struct in6_addr *addr); int if_address6(const struct ipv6_addr *, int); @@ -146,7 +145,6 @@ #define if_delroute6(rt) if_route6(rt, -1) #else #define if_checkipv6(a, b, c) (-1) -#define if_rarestore(a) #endif int if_machinearch(char *, size_t);
