mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-22 18:07:25 +00:00
- If configured, dhclient may now transmit to an anycast MAC address,
rather than using a broadcast address. Thanks to a patch from David Cantrell at Red Hat. [ISC-Bugs #17740]
This commit is contained in:
parent
4b97eaff2f
commit
0829d595f8
4
RELNOTES
4
RELNOTES
@ -42,6 +42,10 @@ work on other platforms. Please report any problems and suggested fixes to
|
||||
described in the -12 revision of the Failover draft (and assigned by
|
||||
IANA). Thanks in part to a patch from David Cantrell at Red Hat.
|
||||
|
||||
- If configured, dhclient may now transmit to an anycast MAC address,
|
||||
rather than using a broadcast address. Thanks to a patch from David
|
||||
Cantrell at Red Hat.
|
||||
|
||||
Changes since 4.1.0 (bug fixes)
|
||||
|
||||
- Validate the argument to the -p option.
|
||||
|
@ -541,6 +541,17 @@ void parse_client_statement (cfile, ip, config)
|
||||
}
|
||||
return;
|
||||
|
||||
case ANYCAST_MAC:
|
||||
token = next_token(&val, NULL, cfile);
|
||||
if (ip != NULL) {
|
||||
parse_hardware_param(cfile, &ip->anycast_mac_addr);
|
||||
} else {
|
||||
parse_warn(cfile, "anycast mac address parameter "
|
||||
"not allowed here.");
|
||||
skip_to_semi (cfile);
|
||||
}
|
||||
return;
|
||||
|
||||
case REQUEST:
|
||||
token = next_token (&val, (unsigned *)0, cfile);
|
||||
if (config -> requested_options == default_requested_options)
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $Id: dhclient.conf.5,v 1.23 2009/01/22 21:22:42 dhankins Exp $
|
||||
.\" $Id: dhclient.conf.5,v 1.24 2009/03/13 21:41:45 dhankins Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
|
||||
.\" Copyright (c) 1996-2003 by Internet Software Consortium
|
||||
@ -583,7 +583,6 @@ the subnet, counting the number of significant bits in the netmask starting
|
||||
from the leftmost end. Example configuration syntax:
|
||||
.PP
|
||||
.I \fIreject\fR 192.168.0.0\fB/\fR16\fB,\fR 10.0.0.5\fB;\fR
|
||||
.RE
|
||||
.PP
|
||||
The above example would cause offers from any server identifier in the
|
||||
entire RFC 1918 "Class C" network 192.168.0.0/16, or the specific
|
||||
@ -659,6 +658,30 @@ database and will record the media type used to acquire the address.
|
||||
Whenever the client tries to renew the lease, it will use that same
|
||||
media type. The lease must expire before the client will go back to
|
||||
cycling through media types.
|
||||
.PP
|
||||
\fBhardware\fR \fIlink-type mac-address\fR\fB;\fR
|
||||
.PP
|
||||
The
|
||||
.B hardware
|
||||
statement defines the hardware MAC address to use for this interface,
|
||||
for DHCP servers or relays to direct their replies. dhclient will determine
|
||||
the interface's MAC address automatically, so use of this parameter
|
||||
is not recommended. The \fIlink-type\fR corresponds to the interface's
|
||||
link layer type (example: 'ethernet'), while the \fImac-address\fR is
|
||||
a string of colon-separated hexadecimal values for octets.
|
||||
.PP
|
||||
\fBanycast-mac\fR \fIlink-type mac-address\fR\fB;\fR
|
||||
.PP
|
||||
The
|
||||
.B anycast-mac
|
||||
statement over-rides the all-ones broadcast MAC address dhclient will use
|
||||
when it is transmitting packets to the all-ones limited broadcast IPv4
|
||||
address. This configuration parameter is useful to reduce the number of
|
||||
broadcast packets transmitted by DHCP clients, but is only useful if you
|
||||
know the DHCP service(s) anycast MAC address prior to configuring your
|
||||
client. The \fIlink-type\fR and \fImac-address\fR parameters are configured
|
||||
in a similar manner to the \fBhardware\fR statement.
|
||||
.PP
|
||||
.SH SAMPLE
|
||||
The following configuration file is used on a laptop running NetBSD
|
||||
1.3. The laptop has an IP alias of 192.5.5.213, and has one
|
||||
@ -678,6 +701,7 @@ reject 192.33.137.209;
|
||||
|
||||
interface "ep0" {
|
||||
send host-name "andare.fugue.com";
|
||||
hardware ethernet 00:a0:24:ab:fb:9c;
|
||||
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
|
||||
send dhcp-lease-time 3600;
|
||||
supersede domain-name "fugue.com rc.vix.com home.vix.com";
|
||||
|
@ -362,6 +362,9 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
hto = &interface->anycast_mac_addr;
|
||||
|
||||
/* Assemble the headers... */
|
||||
assemble_hw_header (interface, (unsigned char *)hw, &hbufp, hto);
|
||||
assemble_udp_ip_header (interface,
|
||||
|
@ -720,6 +720,8 @@ intern(char *atom, enum dhcp_token dfv) {
|
||||
}
|
||||
if (!strcasecmp (atom + 1, "nd"))
|
||||
return AND;
|
||||
if (!strcasecmp(atom + 1, "nycast-mac"))
|
||||
return ANYCAST_MAC;
|
||||
if (!strcasecmp (atom + 1, "ppend"))
|
||||
return APPEND;
|
||||
if (!strcasecmp (atom + 1, "llow"))
|
||||
|
@ -538,6 +538,9 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
hto = &interface->anycast_mac_addr;
|
||||
|
||||
dbuflen = 0;
|
||||
|
||||
/* Assemble the headers... */
|
||||
@ -593,7 +596,7 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
else
|
||||
memcpy ( phys, interface -> dlpi_broadcast_addr.hbuf,
|
||||
interface -> dlpi_broadcast_addr.hlen);
|
||||
|
||||
|
||||
if (sap_len < 0) {
|
||||
memcpy ( dstaddr, phys, phys_len);
|
||||
memcpy ( (char *) &dstaddr [phys_len], sap, ABS (sap_len));
|
||||
|
@ -302,6 +302,9 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
hto = &interface->anycast_mac_addr;
|
||||
|
||||
/* Assemble the headers... */
|
||||
assemble_hw_header (interface, (unsigned char *)hh, &hbufp, hto);
|
||||
fudge = hbufp % 4; /* IP header must be word-aligned. */
|
||||
|
@ -298,6 +298,9 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
hto = &interface->anycast_mac_addr;
|
||||
|
||||
/* Start with the sockaddr struct... */
|
||||
junk = (struct sockaddr *)&hh [0];
|
||||
hbufp = (((unsigned char *)&junk -> sa_data [0]) -
|
||||
|
@ -260,6 +260,9 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
hto = &interface->anycast_mac_addr;
|
||||
|
||||
/* Assemble the headers... */
|
||||
assemble_hw_header (interface, (unsigned char *)hw, &hbufp, hto);
|
||||
assemble_udp_ip_header (interface,
|
||||
|
@ -1156,6 +1156,7 @@ struct interface_info {
|
||||
int dlpi_sap_length;
|
||||
struct hardware dlpi_broadcast_addr;
|
||||
# endif /* DLPI_SEND || DLPI_RECEIVE */
|
||||
struct hardware anycast_mac_addr;
|
||||
};
|
||||
|
||||
struct hardware_link {
|
||||
|
@ -352,7 +352,9 @@ enum dhcp_token {
|
||||
ZEROLEN = 655,
|
||||
TEMPORARY = 656,
|
||||
PREFIX6 = 657,
|
||||
FIXED_PREFIX6 = 658
|
||||
FIXED_PREFIX6 = 658,
|
||||
ANYCAST_MAC = 659
|
||||
|
||||
};
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||
|
Loading…
x
Reference in New Issue
Block a user