!(ifp->ctx->options & DHCPCD_TEST))
ifo->options |= DHCPCD_IPV6RA_OWN;
+ /* If we're a psuedo interface, ensure we disable as much as we can */
+ if (ifp->options->options & DHCPCD_PFXDLGONLY)
+ ifp->options->options &= ~(DHCPCD_IPV4 | DHCPCD_IPV6RS);
+
/* We want to disable kernel interface RA as early as possible. */
if (ifo->options & DHCPCD_IPV6RS) {
/* If not doing any DHCP, disable the RDNSS requirement. */
}
static void
-configure_interface(struct interface *ifp, int argc, char **argv)
+configure_interface(struct interface *ifp, int argc, char **argv,
+ unsigned long long options)
{
dhcpcd_selectprofile(ifp, NULL);
add_options(ifp->ctx, ifp->name, ifp->options, argc, argv);
+ ifp->options->options |= options;
configure_interface1(ifp);
}
#endif
if (ifp->wireless)
if_getssid(ifp);
- dhcpcd_initstate(ifp);
+ dhcpcd_initstate(ifp, 0);
script_runreason(ifp, "CARRIER");
/* RFC4941 Section 3.5 */
if (ifp->options->options & DHCPCD_IPV6RA_OWN)
if (ifo->options & DHCPCD_IPV6) {
if (ifo->options & DHCPCD_IPV6RS &&
- !(ifo->options & (DHCPCD_INFORM | DHCPCD_PFXDLGONLY)))
+ !(ifo->options & DHCPCD_INFORM))
ipv6nd_startrs(ifp);
if (ifo->options & DHCPCD_DHCP6)
"%s: dhcp6_start: %m", ifp->name);
}
}
- if (ifo->options & DHCPCD_PFXDLGONLY)
- return;
if (ifo->options & DHCPCD_IPV4)
dhcp_start(ifp);
}
static void
-dhcpcd_initstate1(struct interface *ifp, int argc, char **argv)
+dhcpcd_initstate1(struct interface *ifp, int argc, char **argv,
+ unsigned long long options)
{
struct if_options *ifo;
- configure_interface(ifp, argc, argv);
+ configure_interface(ifp, argc, argv, options);
ifo = ifp->options;
if (ifo->options & DHCPCD_IPV4 && ipv4_init(ifp->ctx) == -1) {
}
void
-dhcpcd_initstate(struct interface *ifp)
+dhcpcd_initstate(struct interface *ifp, unsigned long long options)
{
- dhcpcd_initstate1(ifp, ifp->ctx->argc, ifp->ctx->argv);
+ dhcpcd_initstate1(ifp, ifp->ctx->argc, ifp->ctx->argv, options);
}
static void
syslog(LOG_DEBUG, "%s: interface added", ifp->name);
TAILQ_REMOVE(ifs, ifp, next);
TAILQ_INSERT_TAIL(ctx->ifaces, ifp, next);
- dhcpcd_initstate(ifp);
+ dhcpcd_initstate(ifp, 0);
run_preinit(ifp);
iff = ifp;
}
oldopts = ifp->options->options;
script_runreason(ifp, "RECONFIGURE");
- dhcpcd_initstate1(ifp, argc, argv);
+ dhcpcd_initstate1(ifp, argc, argv, 0);
dhcp_reboot_newopts(ifp, oldopts);
dhcp6_reboot(ifp);
dhcpcd_prestartinterface(ifp);
if_free(ifp);
} else {
TAILQ_INSERT_TAIL(ctx->ifaces, ifp, next);
- dhcpcd_initstate1(ifp, argc, argv);
+ dhcpcd_initstate1(ifp, argc, argv, 0);
run_preinit(ifp);
dhcpcd_prestartinterface(ifp);
}
family = AF_INET;
}
}
- configure_interface(ifp, ctx.argc, ctx.argv);
+ configure_interface(ifp, ctx.argc, ctx.argv, 0);
if (ctx.options & DHCPCD_PFXDLGONLY)
ifp->options->options |= DHCPCD_PFXDLGONLY;
if (family == 0 || family == AF_INET) {
}
TAILQ_FOREACH(ifp, ctx.ifaces, next) {
- dhcpcd_initstate1(ifp, argc, argv);
+ dhcpcd_initstate1(ifp, argc, argv, 0);
}
if (ctx.options & DHCPCD_BACKGROUND && dhcpcd_daemonise(&ctx))