Ady,
There are at least 3 ways to set up your DHCP server to
differentiate between std DHCP, BIOS PXE and UEFI PXE.
Option 93 (arch) is one way.
In ISC syntax, here's 3 ways:
1. Match on VCI
class "pxe-clients" {
match if substring (option vendor-class-identifier, 0, 9)
"PXEClient";
set vendor-string = substring ( option vendor-class-identifier, 0, 9);
set vendor-class option vendor-class-identifier;
option tftp-server-name "192.168.0.100";
next-server 192.168.0.100;
if option vendor-class-identifier =
"PXEClient:Arch:00000:UNDI:002001"
{
option bootfile-name "bios/pxelinux.0";
} elsif option vendor-class-identifier
"PXEClient:Arch:0007:UNDI:003016" {
option bootfile-name "efi.x64/syslinux.efi";
} else {
option bootfile-name "UNKNOWN_VCI";
}
}
2. Match on arch.
?
# In initial DHCP DISCOVER packet, PXE client sets option 93 to its arch.
# 0000 == IA x86 PC (BIOS boot)
# 0006 == x86 EFI boot
# 0007 == x64 EFI boot
option arch code 93 = unsigned integer 16;
class "pxe-clients" {
match if substring (option vendor-class-identifier, 0, 9)
"PXEClient";
...
if option arch = 00:00 {
filename "bios/pxelinux.0";
} elsif option arch = 00:07 {
filename "efi.x64/syslinux.efi";
} else {
filename "UNKNOWN_VCI";
option bootfile-name "UNKNOWN_VCI";
}
3. Subclasses
class "pxe-clients" {
match option vendor-class-identifier;
?
option tftp-server-name "192.168.0.100";
?
next-server 192.168.0.100;
}
subclass "pxe-clients" "PXEClient:Arch:00000:UNDI:002001" {
option bootfile-name "bios/pxelinux.0";
}
subclass "pxe-clients" "PXEClient:Arch:0007:UNDI:003016" {
option bootfile-name "efi.x86/syslinux.efi";
}
Every UEFI boot client I've ever seen reports 00:07 for VCI & ARCH.
Which
agrees w/ RFC 4578. I have never tried DHCPv6 however.
Spike
>Message: 1
>Date: Thu, 2 Oct 2014 04:33:31 +0300
>From: Ady <ady-sf at hotmail.com>
>To: syslinux at zytor.com
>Subject: [syslinux] DHCP option 93 for UEFI
>Message-ID: <BLU436-SMTP29576A0456664C18857768BB90 at phx.gbl>
>Content-Type: text/plain; charset="US-ASCII"
>
>This is slightly off-topic for the Syslinux mailing list, but I think
>
>it is still pertinent and it might be helpful anyway.
>
>I am confused about some conflicting information regarding DHCP
>option
>93, Architecture Type.
>
>The UEFI specification v.2.4 Errata B, Table 179, "PXE Tag
>Definitions
>for EFI", makes reference to a table in:
>
><http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.x
>ml#processor-architecture>
>
>which in turn makes reference (among others) to another table in:
> <http://tools.ietf.org/html/rfc4578#section-2.1>
>
>
>These two tables contain conflicting information:
>
>RFC 4578 - DHCPv6
> 7 EFI BC - 7 x64 UEFI
> 9 EFI x86-64 - 9 EBC
>
>In addition, there is a PDF _from the UEFI Group_,
> "IPv6 Remote Boot Requirements From UEFI Forum", IETF 72, year
2008,
>
>
>which correctly reproduces the RFC 4578 (no conflict), and adds:
> 6 EFI IA32 <- used by many vendors for legacy boot of x64 machine
> 7 EFI BC <- used by many vendors for EFI x64 boot
>
>So, I have some questions:
>
>1_ Which Architecture Type value "should" correspond to
> (U)EFI (x86_)x64?
>
>2_ Isn't this conflicting information "messing" what vendors
are
> supposed to set/follow?
>
>3_ Is there older (U)EFI hardware following one convention and newer
> (U)EFI hardware following another?
>
>4_ In practical terms, what would be an "adequate" way to solve
this
> matter in the DHCP configuration file for option 93,
> Architecture Type?
>
>5_ Can/should other options be used instead of option 93 for UEFI
> clients (e.g. "Class Identifier", option 60)?
> Is this a practical solution for every conflicting case?
>
>6_ Since the DHCPv6 (RFC 5970) and UEFI specs claim "to be in
parity"
>
> with RFC 4578 and the PXE specs, is this some kind of typo in
>anyone
> of the aforementioned documents?
>
>TIA,
>Ady.