Mercurial > hg > dhcpcd
changeset 5411:c222e3e77e93 draft
options: open an address socket to detect if inet6 is available
This should silence dhcpcd warnings if IPv6 is compiled out.
Do the same for IPv4, although that's highly unlikely as
it's kind of required for some interface ioctls.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Sat, 25 Jul 2020 14:22:18 +0100 |
| parents | e7ca98611c22 |
| children | 10414d410d49 |
| files | src/if-options.c |
| diffstat | 1 files changed, 22 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/if-options.c Mon Jul 13 10:43:51 2020 +0200 +++ b/src/if-options.c Sat Jul 25 14:22:18 2020 +0100 @@ -59,6 +59,8 @@ #define SET_CONFIG_BLOCK(ifo) ((ifo)->options |= DHCPCD_FORKED) #define CLEAR_CONFIG_BLOCK(ifo) ((ifo)->options &= ~DHCPCD_FORKED) +static unsigned long long default_options; + const struct option cf_options[] = { {"background", no_argument, NULL, 'b'}, {"script", required_argument, NULL, 'c'}, @@ -2332,18 +2334,30 @@ /* Seed our default options */ if ((ifo = default_config(ctx)) == NULL) return NULL; - ifo->options |= DHCPCD_DAEMONISE | DHCPCD_GATEWAY; -#ifdef PLUGIN_DEV - ifo->options |= DHCPCD_DEV; -#endif + if (default_options == 0) { + default_options |= DHCPCD_DAEMONISE | DHCPCD_GATEWAY; #ifdef INET - ifo->options |= DHCPCD_IPV4 | DHCPCD_ARP | DHCPCD_DHCP | DHCPCD_IPV4LL; + skip = socket(PF_INET, SOCK_DGRAM, 0); + if (skip != -1) { + close(skip); + default_options |= DHCPCD_IPV4 | DHCPCD_ARP | + DHCPCD_DHCP | DHCPCD_IPV4LL; + } #endif #ifdef INET6 - ifo->options |= DHCPCD_IPV6 | DHCPCD_IPV6RS; - ifo->options |= DHCPCD_IPV6RA_AUTOCONF | DHCPCD_IPV6RA_REQRDNSS; - ifo->options |= DHCPCD_DHCP6; + skip = socket(PF_INET6, SOCK_DGRAM, 0); + if (skip != -1) { + close(skip); + default_options |= DHCPCD_IPV6 | DHCPCD_IPV6RS | + DHCPCD_IPV6RA_AUTOCONF | DHCPCD_IPV6RA_REQRDNSS | + DHCPCD_DHCP6; + } #endif +#ifdef PLUGIN_DEV + default_options |= DHCPCD_DEV; +#endif + } + ifo->options |= default_options; CLEAR_CONFIG_BLOCK(ifo);
