return;
/* No point in delaying a static configuration */
+ if (ifp->options->options & DHCPCD_STATIC ||
+ !(ifp->options->options & DHCPCD_INITIAL_DELAY))
+ {
+ dhcp_start1(ifp);
+ return;
+ }
+
tv.tv_sec = DHCP_MIN_DELAY;
tv.tv_nsec = (suseconds_t)arc4random_uniform(
(DHCP_MAX_DELAY - DHCP_MIN_DELAY) * NSEC_PER_SEC);
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd May 15, 2015
+.Dd June 3, 2015
.Dt DHCPCD.CONF 5
.Os
.Sh NAME
This also disables IPv4LL.
.It Ic noauthrequired
Don't require authentication even though we requested it.
+.It Ic nodelay
+Don't delay for an initial randomised time when starting protocols.
.It Ic nodev
Don't load
.Pa /dev
#define O_IPV6RA_ACCEPT_NOPUBLIC O_BASE + 41
#define O_BOOTP O_BASE + 42
#define O_DEFINEND O_BASE + 43
+#define O_NODELAY O_BASE + 44
const struct option cf_options[] = {
{"background", no_argument, NULL, 'b'},
{"ia_pd_mix", no_argument, NULL, O_PFXDLGMIX},
{"reject", required_argument, NULL, O_REJECT},
{"bootp", no_argument, NULL, O_BOOTP},
+ {"nodelay", no_argument, NULL, O_NODELAY},
{NULL, 0, NULL, '\0'}
};
case O_BOOTP:
ifo->options |= DHCPCD_BOOTP;
break;
+ case O_NODELAY:
+ ifo->options &= ~DHCPCD_INITIAL_DELAY;
+ break;
default:
return 0;
}
logger(ctx, LOG_ERR, "%s: %m", __func__);
return NULL;
}
- ifo->options |= DHCPCD_DAEMONISE | DHCPCD_LINK;
+ ifo->options |= DHCPCD_DAEMONISE | DHCPCD_LINK | DHCPCD_INITIAL_DELAY;
#ifdef PLUGIN_DEV
ifo->options |= DHCPCD_DEV;
#endif
#define DHCPCD_ROUTER_HOST_ROUTE_WARNED (1ULL << 55)
#define DHCPCD_IPV6RA_ACCEPT_NOPUBLIC (1ULL << 56)
#define DHCPCD_BOOTP (1ULL << 57)
+#define DHCPCD_INITIAL_DELAY (1ULL << 58)
#define DHCPCD_WAITOPTS (DHCPCD_WAITIP | DHCPCD_WAITIP4 | DHCPCD_WAITIP6)
struct timespec tv;
eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp);
+ if (!(ifp->options->options & DHCPCD_INITIAL_DELAY)) {
+ ipv6nd_startrs1(ifp);
+ return;
+ }
+
tv.tv_sec = 0;
tv.tv_nsec = (suseconds_t)arc4random_uniform(
MAX_RTR_SOLICITATION_DELAY * NSEC_PER_SEC);