We like to be able to reinstall machines easily, and our OS X boxes are no exception. Apple provides a 'NetBoot' server, but that runs on OS X Server systems, and we don't have any of those. Fortunately, the Wikipedia BSDP page has some useful references - Apple's Specification being particularly key.
The script below consists of a few perl modules and implements a BSDP server. Of particular note are the two lists of 'callback' functions, so one gets to tinker a little with the choices presented to the client. As an example, we use the callback functions to query a database to determine which image a machine should boot based on which version of the OS we believe it should run and whether we think its hard disk would benefit from being completely wiped.
How to install it?
Get the bsdpd.tgz file, un-gzip and un-tar (tar -xzf bsdpd.tgz), then run 'bsdpd.pl' with perl. You may need to satisfy perl's module dependencies. You'll almost certainly want to edit bsdpd.pl to include your own boot image paths and descriptions. If you prefer not to leave everything up to the client, you'll want to tinker with the two callback functions too. (For what it's worth, bsdpd.pl is only ~150 lines of perl - a couple of screens full. It ought to be easy enough to follow what's going on, and if you read in conjunction with the BSDP documentation above you'll be an expert in no time.)
How to debug it?
A lua plugin (bsdp.lua) for wireshark is available to help diagnose BSDP packets. It isn't neat, but it should be functional - or, at least, it functions for me on Wireshark 2.0.2.