Generating multiple responses to a client bootp request

Lester Barrows Lester.M.Barrows at nasa.gov
Thu Jan 26 19:52:22 UTC 2012


We've been using the ISC dhcp server to support network booting for PC and Mac 
systems. This has worked well up until recently when Apple modified the way 
the newest Macintosh systems respond to the DHCP service, the MacBookPro8,3 
and MacMini5,3 systems being examples. Merely feeding the client the ID of the 
boot image in response to the first client BSDP request (which lives in DHCP 
option 42, vendor encapsulated options) was sufficient to allow previous 
clients to boot.

I've dumped the entire exchange from both ISC dhcpd and Apple's bootpd on an 
OS X server, and written a parser for the BSDP protocol so I could trace it 
effectively. A configuration has been crafted such that the protocol exchange 
between client and server is as identical as I know how to make it. The thing 
which is stumping me is the final part of the exchange.

Apple's bootpd sends two packets in response to the final BSDP SELECT packet  
(which is inside a DHCP INFORM packet) before a network boot occurs. The first 
packet contains the needed boot information for the client, the second seems 
to contain only the sname of the server; the sname is not set in any of the 
other packets in an exchange when using Apple's bootpd, and setting the sname 
in the same packet as the boot information doesn't appear to satisfy the Mac 
client's boot requirements.

I can detect the final BSDP SELECT and send a single response by testing 
vendor-encapsulated-options and setting the appropriate BSDP response as such:

if (option vendor-encapsulated-options = 
01:01:02:02:02:01:01:03:04:00:00:00:00:08:04:00:00:00:00) {
        option vendor-encapsulated-options 
01:01:02:03:04:AC:14:00:01:08:04:81:00:00:B5:82:0A:4E:65:74:42:6F:6F:74:30:30:31; 
}

BSDP parse of the vendor client options:

Client request:
01:01:02:02:02:01:01:03:04:00:00:00:00:08:04:00:00:00:00
BSDP Message Type:			SELECT
BSDP Version Number:			1.1
Server Identifier:			0.0.0.0
Selected Boot Image:			0

Server response:
 01:01:02:08:04:81:00:00:B5:82:0A:4E:65:74:42:6F:6F:74:30:30:31
BSDP Message Type:				SELECT
Selected Boot Image:			8454325
Machine name:					NetBoot001

(Note that Apple's bootpd doesn't provide an IP address at this point, just 
the "Machine Name" NetBoot001 string. I've tried adding the IP with the BDSP 
Server Identifier field but that doesn't help.)

I'm not certain how to generate the second packet which contains only the 
sname field. As far as I can tell from tcpdump, this final response is the 
only protocol difference between the client exchanges between our ISC DHCP 
server and Apple's bootpd. The Mac clients chat with the ISC dhcp server up 
until this last packet, then they ignore the rest and boot locally. Older 
systems are still booting.

TIA for any and all ideas!

Regards,

Lester Barrows
Asani Solutions, LLC
Code TI Systems Group
NASA Ames Research Center




More information about the dhcp-users mailing list