summaryrefslogtreecommitdiffstats
path: root/dhcpcd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2014-07-04 11:53:56 +0000
committerRoy Marples <roy@marples.name>2014-07-04 11:53:56 +0000
commitfb8a0db7c059a10447185153812c253cba27744c (patch)
treea59187465bc4e1ec19211c936e9565360d69ae30 /dhcpcd.c
parentee8a3b3428999c2e01fb1dac4caefb42d0b32c9b (diff)
downloaddhcpcd-fb8a0db7c059a10447185153812c253cba27744c.tar.xz
Add --pfxdlgonly and --nopfxdlg options to spawn separate dhcpcd instances
to allow for RFC conformance when you need to configure a Prefix Delegation and a Normal Address for DHCPv6 on the same interface.
Diffstat (limited to 'dhcpcd.c')
-rw-r--r--dhcpcd.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/dhcpcd.c b/dhcpcd.c
index 3ed932b1..5d71d3a8 100644
--- a/dhcpcd.c
+++ b/dhcpcd.c
@@ -648,7 +648,7 @@ dhcpcd_startinterface(void *arg)
if (ifo->options & DHCPCD_IPV6) {
if (ifo->options & DHCPCD_IPV6RS &&
- !(ifo->options & DHCPCD_INFORM))
+ !(ifo->options & (DHCPCD_INFORM | DHCPCD_PFXDLGONLY)))
ipv6nd_startrs(ifp);
if (!(ifo->options & DHCPCD_IPV6RS) ||
@@ -680,6 +680,8 @@ dhcpcd_startinterface(void *arg)
"%s: dhcp6_start: %m", ifp->name);
}
}
+ if (ifo->options & DHCPCD_PFXDLGONLY)
+ return;
if (ifo->options & DHCPCD_IPV4)
dhcp_start(ifp);
@@ -1370,9 +1372,10 @@ main(int argc, char **argv)
}
snprintf(pidfile, sizeof(pidfile),
PIDFILE, "-", argv[optind], per);
- }
- else {
- snprintf(pidfile, sizeof(pidfile), PIDFILE, "", "", "");
+ } else {
+ snprintf(pidfile, sizeof(pidfile), PIDFILE,
+ ctx.options & DHCPCD_PFXDLGONLY ? ".pd" : "",
+ "", "");
ctx.options |= DHCPCD_MASTER;
}
}
@@ -1425,7 +1428,7 @@ main(int argc, char **argv)
}
#ifdef USE_SIGNALS
- if (!(ctx.options & DHCPCD_TEST) &&
+ if (!(ctx.options & (DHCPCD_TEST | DHCPCD_PFXDLGONLY)) &&
(sig == 0 || ctx.ifc != 0))
{
#endif
@@ -1541,7 +1544,7 @@ main(int argc, char **argv)
}
- if (ctx.options & DHCPCD_MASTER) {
+ if (ctx.options & DHCPCD_MASTER && !(ctx.options & DHCPCD_PFXDLGONLY)) {
if (control_start(&ctx, NULL) == -1)
syslog(LOG_ERR, "control_start: %m");
}