Comment 2 for bug 927781

Revision history for this message
Jason Hobbs (jason-hobbs) wrote :

While I agree this would be a useful feature, I don't believe it's required to achieve what you want to achieve. U-Boot's pxe already supports a way to point different client classes at different areas of the tftp server.

U-boot doesn't need to download 'pxelinux.0' from the tftp server like normal PXE implementations do, but it still respects the bootfile option in dhcp responses. When you run 'dhcp' in U-boot it will attempt to download whatever was supplied as the bootfile in the dhcp response, and will set the 'bootfile' env variable accordingly.

Following the same convention as pxelinux, U-Boot's 'pxe get' will look for config/image files at paths relative to the directory the 'bootfile' location was given as.

So, given this dhcp config, highbank clients will be pointed at /arm/highbank, and x86 PXE clients will be pointed at /x86/

class "pxe" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}

class "uboot-highbank" {
    match if substring (option vendor-class-identifier, 0, 21) = "U-boot.armv7.highbank";
}

subnet 192.168.100.0 netmask 255.255.255.0 {
        server-name "192.168.100.1";
        option tftp-server-name "192.168.100.1";
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.100.255;
        option domain-name-servers 8.8.4.4;
        option routers 192.168.100.254;

        pool {
                range 192.168.100.100 192.168.100.149;
                allow members of "uboot-highbank";
                filename "/arm/highbank/empty";
        }

        pool {
                range 192.168.100.150 192.168.100.199;
                allow members of "pxe";
                filename "/x86/pxelinux.0";
        }
}

The 'empty' file can be empty; as long as it exists, U-Boot will be happy with the tftp request.

Here's some example output from highbank doing PXE:
Highbank #dhcp
BOOTP broadcast 1
*** Unhandled DHCP Option in OFFER/ACK: 28
*** Unhandled DHCP Option in OFFER/ACK: 28
DHCP client bound to address 192.168.100.100
Using xgmac0 device
TFTP from server 192.168.100.1; our IP address is 192.168.100.100
Filename '/arm/highbank/empty'.
Load address: 0x700000
Loading: #
done
Highbank #pxe get
missing environment variable: pxeuuid
Retrieving file: /arm/highbank/pxelinux.cfg/01-52-54-00-12-34-56
Using xgmac0 device
TFTP from server 192.168.100.1; our IP address is 192.168.100.100
Filename '/arm/highbank/pxelinux.cfg/01-52-54-00-12-34-56'.
Load address: 0x700000
Loading: *
TFTP error: 'File not found' (1)
Not retrying...
Retrieving file: /arm/highbank/pxelinux.cfg/C0A86464