Index: a/common/conflex.c =================================================================== --- a/common/conflex.c (revision 1053) +++ b/common/conflex.c (working copy) @@ -555,6 +555,8 @@ } 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")) Index: common/lpf.c =================================================================== --- a/common/lpf.c (revision 1053) +++ b/common/lpf.c (working copy) @@ -301,6 +301,10 @@ 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. */ Index: a/includes/dhctoken.h =================================================================== --- a/includes/dhctoken.h (revision 1053) +++ b/includes/dhctoken.h (working copy) @@ -309,7 +309,8 @@ DO_FORWARD_UPDATE = 614, KNOWN_CLIENTS = 615, ATSFP = 616, - BOOTP_BROADCAST_ALWAYS=617 + BOOTP_BROADCAST_ALWAYS=617, + ANYCAST_MAC = 618 }; #define is_identifier(x) ((x) >= FIRST_TOKEN && \ Index: a/includes/site.h =================================================================== --- a/includes/site.h (revision 1053) +++ b/includes/site.h (working copy) @@ -177,3 +177,5 @@ traces. */ #define TRACING + +#define USE_LPF Index: a/includes/dhcpd.h =================================================================== --- a/includes/dhcpd.h (revision 1053) +++ b/includes/dhcpd.h (working copy) @@ -804,6 +804,7 @@ int dlpi_sap_length; struct hardware dlpi_broadcast_addr; # endif /* DLPI_SEND || DLPI_RECEIVE */ + struct hardware anycast_mac_addr; }; struct hardware_link { Index: a/client/clparse.c =================================================================== --- a/client/clparse.c (revision 1053) +++ b/client/clparse.c (working copy) @@ -402,6 +402,17 @@ } return; + case ANYCAST_MAC: + token = next_token (&val, (unsigned *)0, cfile); + if (ip) { + parse_hardware_param (cfile, &ip -> anycast_mac_addr); + } else { + parse_warn (cfile, "anycast mac address parameter %s", + "not allowed here."); + skip_to_semi (cfile); + } + return; + case REQUEST: token = next_token (&val, (unsigned *)0, cfile); if (config -> requested_options == default_requested_options)