[ipxe-devel] DHCPDISCOVER announcement of capabilities?

Michael Brown mbrown at fensystems.co.uk
Mon Nov 15 17:11:08 UTC 2010


On Monday 15 Nov 2010 12:54:05 Jarrod Johnson wrote:
> One problem I have as many iPXE implementations start appearing in vendor
> firmware is that I can't tell at DHCP transaction time whether the
>  requester has CONFIG_*BLAH* set.  For example, I usually have a
>  conditional to say something like 'if not iPXE, chainload iPXE, else http
>  boot', and then a vendor nic has iPXE, but not HTTP enabled.  My
>  workaround is basically to have my own build and burn it on adapters as
>  needed with a different vendor id to match on.  Any ideas on how iPXE
>  might be able to announce what features it has (kinda like how the banner
>  advertises on-screen, but in DISCOVER in a way that can be examined by
>  dhcpd).  I'm thinking a bitfield with each CONFIG option mapped to a bit
>  position.

Happily, this is already possible.  iPXE uses feature-specific DHCP options to 
indicate to the DHCP server the exact same list that appears on-screen in the 
"Features:" portion of the start-up banner.

For example, to test for HTTP support:

  option space ipxe;
  option ipxe-encap-opts code 175 = encapsulate ipxe;
  option ipxe.http code 19 = unsigned integer 8;

  if exists ipxe.http {
   ...
  }

I've updated http://ipxe.org/howto/dhcpd to document this.

In more detail: each feature number in include/ipxe/features.h represents a 
DHCP option encapsulated within option 175.  For example,

  #define DHCP_EB_FEATURE_HTTP 19

means that option 175.19 will indicate the presence of HTTP support.  The 
option value is intended to be a feature-specific version number, which is 
controlled by the FEATURE() macro.  For example, in net/tcp/http.c:

  FEATURE ( FEATURE_PROTOCOL, "HTTP", DHCP_EB_FEATURE_HTTP, 1 );

means that the banner will include "HTTP" as a displayed feature, and 
DHCPDISCOVER/DHCPOFFER will include option 175.19 with a value of 1.

Michael



More information about the ipxe-devel mailing list