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.
}
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)
-.\" $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
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
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
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";
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,
}
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"))
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... */
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));
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. */
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]) -
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,
int dlpi_sap_length;
struct hardware dlpi_broadcast_addr;
# endif /* DLPI_SEND || DLPI_RECEIVE */
+ struct hardware anycast_mac_addr;
};
struct hardware_link {
ZEROLEN = 655,
TEMPORARY = 656,
PREFIX6 = 657,
- FIXED_PREFIX6 = 658
+ FIXED_PREFIX6 = 658,
+ ANYCAST_MAC = 659
+
};
#define is_identifier(x) ((x) >= FIRST_TOKEN && \