[syslinux] Suggested update to the Wiki page on PXElinux (UEFI-related stuff in ISC dhcpd.conf)

Frantisek Rysanek Frantisek.Rysanek at post.cz
Thu Nov 7 14:40:36 PST 2019

Dear gentlemen,

here goes the documentation fix I was talking about :-)

The Wiki page on PXElinux, specifically the chapter on UEFI at the 
end of that page:
...contains a few examples of ISC DHCPd configuration.

The stumbling block for me was the syntax of these "if" scopes:

if option architecture-type = 9 {
	filename "path/to/EFIx64/syslinux.efi";

That "if" clause just never matched in my case.
I'm running ISC dhcpd v4.3.5-3+deb9u1 .
I later found out that it's the "integer literal" that is spelled 
wrong. What works is the following syntax:

if option architecture-type = 00:09 {
	filename "path/to/EFIx64/syslinux.efi";

I.e., specified as two bytes.


And you don't even need to use classes in dhcpd.conf.
You can just nest these "if scopes" directly into a subnet, or even 
configure them global.

if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
	ignore-client-uids true;
	if option architecture-type = 00:09 {
		filename "pxelinux/6.git/efi64/syslinux.efi";
I have included the "ignore-client-uids" option for the PXE clients. 
This is because a large number of HW models from different TW vendors 
leave the DMI UUID = GUID = CID at the BIOS maker default, typically 
0:0:2:0:3:0:4:0:5:0:6:0:7:0:8:0:9 (AMI). If we need to diskless-boot 
several such machines in a lab, e.g. for OS deployment, we would 
otherwise have bad luck (IP address collision).

Back to the topic: note that apart from the architecture-type DHCP 
option (#93 = 16b integer), the client architecture tends to also be 
mentioned by the PXE client stacks in the vendor-class-identifier 
option (#60 = string).
Example from tcpdump:

Vendor-Class Option 60, length 32: "PXEClient:Arch:00007:UNDI:003016"

That option is a "string" type - and indeed you can try to search for 
the particular architecture as a substring, like this:

if substring (option vendor-class-identifier, 15, 5) = "00007" {
	filename "pxelinux/6.git/efi64/syslinux.efi";


I hope this helps someone who comes after me...

Frank Rysanek

More information about the Syslinux mailing list