mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-22 18:07:25 +00:00
pull up rt19436: client -D option
This commit is contained in:
parent
350576c5d4
commit
a41d7a251e
2
RELNOTES
2
RELNOTES
@ -49,6 +49,8 @@ work on other platforms. Please report any problems and suggested fixes to
|
|||||||
- Added client support for setting interface MTU and metric, thanks to
|
- Added client support for setting interface MTU and metric, thanks to
|
||||||
Roy "UberLord" Marples <roy@marples.name>.
|
Roy "UberLord" Marples <roy@marples.name>.
|
||||||
|
|
||||||
|
- Added client -D option to specify DUID type to send.
|
||||||
|
|
||||||
Changes since 4.1.0 (bug fixes)
|
Changes since 4.1.0 (bug fixes)
|
||||||
|
|
||||||
- Remove infinite loop in token_print_indent_concat().
|
- Remove infinite loop in token_print_indent_concat().
|
||||||
|
@ -143,15 +143,18 @@ form_duid(struct data_string *duid, const char *file, int line)
|
|||||||
(ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
|
(ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
|
||||||
log_fatal("Impossible hardware address length at %s:%d.", MDL);
|
log_fatal("Impossible hardware address length at %s:%d.", MDL);
|
||||||
|
|
||||||
|
if (duid_type == 0)
|
||||||
|
duid_type = stateless ? DUID_LL : DUID_LLT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 2 bytes for the 'duid type' field.
|
* 2 bytes for the 'duid type' field.
|
||||||
* 2 bytes for the 'htype' field.
|
* 2 bytes for the 'htype' field.
|
||||||
* (not stateless) 4 bytes for the 'current time'.
|
* (DUID_LLT) 4 bytes for the 'current time'.
|
||||||
* enough bytes for the hardware address (note that hw_address has
|
* enough bytes for the hardware address (note that hw_address has
|
||||||
* the 'htype' on byte zero).
|
* the 'htype' on byte zero).
|
||||||
*/
|
*/
|
||||||
len = 4 + (ip->hw_address.hlen - 1);
|
len = 4 + (ip->hw_address.hlen - 1);
|
||||||
if (!stateless)
|
if (duid_type == DUID_LLT)
|
||||||
len += 4;
|
len += 4;
|
||||||
if (!buffer_allocate(&duid->buffer, len, MDL))
|
if (!buffer_allocate(&duid->buffer, len, MDL))
|
||||||
log_fatal("no memory for default DUID!");
|
log_fatal("no memory for default DUID!");
|
||||||
@ -159,7 +162,7 @@ form_duid(struct data_string *duid, const char *file, int line)
|
|||||||
duid->len = len;
|
duid->len = len;
|
||||||
|
|
||||||
/* Basic Link Local Address type of DUID. */
|
/* Basic Link Local Address type of DUID. */
|
||||||
if (!stateless) {
|
if (duid_type == DUID_LLT) {
|
||||||
putUShort(duid->buffer->data, DUID_LLT);
|
putUShort(duid->buffer->data, DUID_LLT);
|
||||||
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
|
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
|
||||||
putULong(duid->buffer->data + 4, cur_time - DUID_TIME_EPOCH);
|
putULong(duid->buffer->data + 4, cur_time - DUID_TIME_EPOCH);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $Id: dhclient.8,v 1.30 2008/11/20 14:55:14 jreed Exp $
|
.\" $Id: dhclient.8,v 1.31 2009/05/27 20:11:38 pselkirk Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2004,2007-2008 by Internet Systems Consortium, Inc. ("ISC")
|
.\" Copyright (c) 2004,2007-2008 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
.\" Copyright (c) 1996-2003 by Internet Software Consortium
|
.\" Copyright (c) 1996-2003 by Internet Software Consortium
|
||||||
@ -56,6 +56,10 @@ dhclient - Dynamic Host Configuration Protocol Client
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
|
.B -D
|
||||||
|
.I LL|LLT
|
||||||
|
]
|
||||||
|
[
|
||||||
.B -p
|
.B -p
|
||||||
.I port
|
.I port
|
||||||
]
|
]
|
||||||
@ -138,10 +142,14 @@ important details about the network to which it is attached, such as
|
|||||||
the location of a default router, the location of a name server, and
|
the location of a default router, the location of a name server, and
|
||||||
so on.
|
so on.
|
||||||
.PP
|
.PP
|
||||||
If given the -4 command line argument (default), dhclient will use the
|
If given the
|
||||||
|
.B -4
|
||||||
|
command line argument (default), dhclient will use the
|
||||||
DHCPv4 protocol to obtain an IPv4 address and configuration parameters.
|
DHCPv4 protocol to obtain an IPv4 address and configuration parameters.
|
||||||
.PP
|
.PP
|
||||||
If given the -6 command line argument, dhclient will use the DHCPv6
|
If given the
|
||||||
|
.B -6
|
||||||
|
command line argument, dhclient will use the DHCPv6
|
||||||
protocol to obtain whatever IPv6 addresses are available along with
|
protocol to obtain whatever IPv6 addresses are available along with
|
||||||
configuration parameters. But with
|
configuration parameters. But with
|
||||||
.B -S
|
.B -S
|
||||||
@ -161,7 +169,17 @@ address query,
|
|||||||
restores it. Note it is not recommended to mix queries of different types
|
restores it. Note it is not recommended to mix queries of different types
|
||||||
together, or even to share the lease file between them.
|
together, or even to share the lease file between them.
|
||||||
.PP
|
.PP
|
||||||
If given the --version command line argument, dhclient will print its
|
By default, DHCPv6 dhclient creates an identifier based on the
|
||||||
|
link-layer address (DUID-LL) if it is running in stateless mode (with
|
||||||
|
-S, not requesting an address), or it creates an identifier based on
|
||||||
|
the link-layer address plus a timestamp (DUID-LLT) if it is running in
|
||||||
|
stateful mode (without -S, requesting an address).
|
||||||
|
.B -D
|
||||||
|
overrides this default, with a value of either "LL" or "LLT".
|
||||||
|
.PP
|
||||||
|
If given the
|
||||||
|
.B --version
|
||||||
|
command line argument, dhclient will print its
|
||||||
version number and exit.
|
version number and exit.
|
||||||
.PP
|
.PP
|
||||||
On startup, dhclient reads the
|
On startup, dhclient reads the
|
||||||
|
@ -57,6 +57,7 @@ struct in_addr inaddr_any;
|
|||||||
struct sockaddr_in sockaddr_broadcast;
|
struct sockaddr_in sockaddr_broadcast;
|
||||||
struct in_addr giaddr;
|
struct in_addr giaddr;
|
||||||
struct data_string default_duid;
|
struct data_string default_duid;
|
||||||
|
int duid_type = 0;
|
||||||
|
|
||||||
/* ASSERT_STATE() does nothing now; it used to be
|
/* ASSERT_STATE() does nothing now; it used to be
|
||||||
assert (state_is == state_shouldbe). */
|
assert (state_is == state_shouldbe). */
|
||||||
@ -268,6 +269,21 @@ main(int argc, char **argv) {
|
|||||||
wanted_ia_na = 0;
|
wanted_ia_na = 0;
|
||||||
}
|
}
|
||||||
wanted_ia_pd++;
|
wanted_ia_pd++;
|
||||||
|
} else if (!strcmp(argv[i], "-D")) {
|
||||||
|
if (local_family_set && (local_family == AF_INET)) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
local_family_set = 1;
|
||||||
|
local_family = AF_INET6;
|
||||||
|
if (++i == argc)
|
||||||
|
usage();
|
||||||
|
if (!strcasecmp(argv[i], "LL")) {
|
||||||
|
duid_type = DUID_LL;
|
||||||
|
} else if (!strcasecmp(argv[i], "LLT")) {
|
||||||
|
duid_type = DUID_LLT;
|
||||||
|
} else {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
#endif /* DHCPv6 */
|
#endif /* DHCPv6 */
|
||||||
} else if (!strcmp(argv[i], "-v")) {
|
} else if (!strcmp(argv[i], "-v")) {
|
||||||
quiet = 0;
|
quiet = 0;
|
||||||
@ -651,7 +667,7 @@ static void usage()
|
|||||||
|
|
||||||
log_error("Usage: dhclient %s %s",
|
log_error("Usage: dhclient %s %s",
|
||||||
#ifdef DHCPv6
|
#ifdef DHCPv6
|
||||||
"[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>]",
|
"[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>] [-D LL|LLT]",
|
||||||
#else /* DHCPv6 */
|
#else /* DHCPv6 */
|
||||||
"[-1dvrx] [-nw] [-p <port>]",
|
"[-1dvrx] [-nw] [-p <port>]",
|
||||||
#endif /* DHCPv6 */
|
#endif /* DHCPv6 */
|
||||||
|
@ -2471,6 +2471,7 @@ extern const char *path_dhclient_pid;
|
|||||||
extern char *path_dhclient_script;
|
extern char *path_dhclient_script;
|
||||||
extern int interfaces_requested;
|
extern int interfaces_requested;
|
||||||
extern struct data_string default_duid;
|
extern struct data_string default_duid;
|
||||||
|
extern int duid_type;
|
||||||
|
|
||||||
extern struct client_config top_level_config;
|
extern struct client_config top_level_config;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user