diff options
author | Geoff Lywood | 2010-05-04 23:31:46 +0200 |
---|---|---|
committer | Michael Brown | 2010-05-29 09:51:46 +0200 |
commit | 6514d6430d97effafa6c534e939053628ee783b0 (patch) | |
tree | 9e04c8773f3908f509a87b20e3ba8d2b80815590 /src | |
parent | [iscsi] Allow base64 encoding in large binary values (diff) | |
download | ipxe-6514d6430d97effafa6c534e939053628ee783b0.tar.gz ipxe-6514d6430d97effafa6c534e939053628ee783b0.tar.xz ipxe-6514d6430d97effafa6c534e939053628ee783b0.zip |
[dhcp] Use correct DHCP options on EFI systems
See RFC 4578 for details.
Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.housekeeping | 1 | ||||
-rw-r--r-- | src/arch/i386/include/efi/ipxe/dhcp_arch.h | 40 | ||||
-rw-r--r-- | src/arch/i386/include/pcbios/ipxe/dhcp_arch.h | 40 | ||||
-rw-r--r-- | src/arch/x86_64/include/efi/ipxe/dhcp_arch.h | 40 | ||||
-rw-r--r-- | src/net/udp/dhcp.c | 13 |
5 files changed, 126 insertions, 8 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index a48dd01b..2562e623 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -295,6 +295,7 @@ endif # Include architecture-specific include path ifdef ARCH INCDIRS += arch/$(ARCH)/include +INCDIRS += arch/$(ARCH)/include/$(PLATFORM) endif ############################################################################### diff --git a/src/arch/i386/include/efi/ipxe/dhcp_arch.h b/src/arch/i386/include/efi/ipxe/dhcp_arch.h new file mode 100644 index 00000000..902caff9 --- /dev/null +++ b/src/arch/i386/include/efi/ipxe/dhcp_arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2010 VMware, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _DHCP_ARCH_H +#define _DHCP_ARCH_H + +/** @file + * + * Architecture-specific DHCP options + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/dhcp.h> + +#define DHCP_ARCH_VENDOR_CLASS_ID \ + DHCP_STRING ( 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', \ + 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '6', ':', \ + 'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0' ) + +#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 6 ) + +#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ ) + +#endif diff --git a/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h b/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h new file mode 100644 index 00000000..822b3eba --- /dev/null +++ b/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2010 VMware, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _DHCP_ARCH_H +#define _DHCP_ARCH_H + +/** @file + * + * Architecture-specific DHCP options + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/dhcp.h> + +#define DHCP_ARCH_VENDOR_CLASS_ID \ + DHCP_STRING ( 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', \ + 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '0', ':', \ + 'U', 'N', 'D', 'I', ':', '0', '0', '2', '0', '0', '1' ) + +#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 0 ) + +#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 2, 1 /* v2.1 */ ) + +#endif diff --git a/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h b/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h new file mode 100644 index 00000000..af41b195 --- /dev/null +++ b/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2010 VMware, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _DHCP_ARCH_H +#define _DHCP_ARCH_H + +/** @file + * + * Architecture-specific DHCP options + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/dhcp.h> + +#define DHCP_ARCH_VENDOR_CLASS_ID \ + DHCP_STRING ( 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', \ + 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '7', ':', \ + 'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0' ) + +#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 7 ) + +#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ ) + +#endif diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index a092a27e..31e420c4 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -40,6 +40,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/dhcp.h> #include <ipxe/dhcpopts.h> #include <ipxe/dhcppkt.h> +#include <ipxe/dhcp_arch.h> #include <ipxe/features.h> /** @file @@ -74,14 +75,10 @@ static uint8_t dhcp_request_options_data[] = { DHCP_MESSAGE_TYPE, DHCP_BYTE ( 0 ), DHCP_MAX_MESSAGE_SIZE, DHCP_WORD ( ETH_MAX_MTU - 20 /* IP header */ - 8 /* UDP header */ ), - DHCP_CLIENT_ARCHITECTURE, DHCP_WORD ( 0 ), - DHCP_CLIENT_NDI, DHCP_OPTION ( 1 /* UNDI */ , 2, 1 /* v2.1 */ ), - DHCP_VENDOR_CLASS_ID, - DHCP_STRING ( 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', - 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '0', ':', - 'U', 'N', 'D', 'I', ':', '0', '0', '2', '0', '0', '1' ), - DHCP_USER_CLASS_ID, - DHCP_STRING ( 'g', 'P', 'X', 'E' ), + DHCP_CLIENT_ARCHITECTURE, DHCP_ARCH_CLIENT_ARCHITECTURE, + DHCP_CLIENT_NDI, DHCP_ARCH_CLIENT_NDI, + DHCP_VENDOR_CLASS_ID, DHCP_ARCH_VENDOR_CLASS_ID, + DHCP_USER_CLASS_ID, DHCP_STRING ( 'i', 'P', 'X', 'E' ), DHCP_PARAMETER_REQUEST_LIST, DHCP_OPTION ( DHCP_SUBNET_MASK, DHCP_ROUTERS, DHCP_DNS_SERVERS, DHCP_LOG_SERVERS, DHCP_HOST_NAME, DHCP_DOMAIN_NAME, |