.Op Fl r , Fl Fl request Ar address
.Op Fl S , Fl Fl static Ar value
.Op Fl s , Fl Fl inform Ar address Ns Op Ar /cidr
+.Op Fl Fl inform6
.Op Fl t , Fl Fl timeout Ar seconds
.Op Fl u , Fl Fl userclass Ar class
.Op Fl v , Fl Fl vendor Ar code , Ar value
.Nm
fails to contact a DHCP server then it returns a failure instead of falling
back on IPv4LL.
+.It Fl Fl inform6
+Performs a DHCPv6 Information Request.
+No address is requested or specified, but all other DHCPv6 options are allowed.
+This is normally performed automatically when the IPv6 Router Advertises
+that the client should perform this operation.
+This option is only needed when
+.Nm
+is not processing IPv6RA messages and the need for DHCPv6 Information Request
+exists.
.It Fl S, Fl Fl static Ar value
Configures a static DHCP
.Ar value .
}
if (ifo->options & DHCPCD_IPV6) {
- if (ifo->options & DHCPCD_IPV6RS &&
- !(ifo->options & DHCPCD_INFORM))
+ if (ifo->options & DHCPCD_IPV6RS)
ipv6nd_startrs(ifp);
if (ifo->options & DHCPCD_DHCP6)
dhcp6_find_delegates(ifp);
if (!(ifo->options & DHCPCD_IPV6RS) ||
- ifo->options & DHCPCD_IA_FORCED)
+ ifo->options & (DHCPCD_IA_FORCED | DHCPCD_INFORM6))
{
ssize_t nolease;
if (ifo->options & DHCPCD_IA_FORCED)
nolease = dhcp6_start(ifp, DH6S_INIT);
+ else if (ifo->options & DHCPCD_INFORM6)
+ nolease = dhcp6_start(ifp, DH6S_INFORM);
else {
nolease = 0;
/* Enabling the below doesn't really make
#define O_BOOTP O_BASE + 42
#define O_DEFINEND O_BASE + 43
#define O_NODELAY O_BASE + 44
+#define O_INFORM6 O_BASE + 45
const struct option cf_options[] = {
{"background", no_argument, NULL, 'b'},
{"quiet", no_argument, NULL, 'q'},
{"request", optional_argument, NULL, 'r'},
{"inform", optional_argument, NULL, 's'},
+ {"inform6", optional_argument, NULL, O_INFORM6},
{"timeout", required_argument, NULL, 't'},
{"userclass", required_argument, NULL, 'u'},
{"vendor", required_argument, NULL, 'v'},
ifo->req_mask.s_addr = 0;
break;
case 's':
- if (ifo->options & DHCPCD_IPV6 &&
- !(ifo->options & DHCPCD_IPV4))
- {
- ifo->options |= DHCPCD_INFORM;
- break;
- }
if (arg && *arg != '\0') {
if (parse_addr(ctx,
&ifo->req_addr, &ifo->req_mask, arg) != 0)
ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT;
ifo->options &= ~DHCPCD_STATIC;
break;
+ case O_INFORM6:
+ ifo->options |= DHCPCD_INFORM6;
+ break;
case 't':
ifo->timeout = (time_t)strtoi(arg, NULL, 0, 0, INT32_MAX, &e);
if (e) {
#define DHCPCD_DHCP (1ULL << 49)
#define DHCPCD_DHCP6 (1ULL << 50)
#define DHCPCD_IF_UP (1ULL << 51)
-// unassigned (1ULL << 52)
+#define DHCPCD_INFORM6 (1ULL << 52)
// unassinged (1ULL << 53)
#define DHCPCD_IPV6RA_AUTOCONF (1ULL << 54)
#define DHCPCD_ROUTER_HOST_ROUTE_WARNED (1ULL << 55)