]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[dhcp] Allow for variable encapsulation of architecture-specific options
authorMichael Brown <mcb30@ipxe.org>
Mon, 4 Jul 2016 12:15:05 +0000 (13:15 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 4 Jul 2016 12:15:05 +0000 (13:15 +0100)
DHCPv4 and DHCPv6 share some values in common for the architecture-
specific options (such as the client system architecture type), but
use different encapsulations: DHCPv4 has a single byte for the option
length while DHCPv6 has a 16-bit field for the option length.

Move the containing DHCP_OPTION() and related wrappers from the
individual dhcp_arch.h files to dhcp.c, thus allowing for the
architecture-specific values to be reused in dhcpv6.c.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/arm32/include/efi/ipxe/dhcp_arch.h
src/arch/arm64/include/efi/ipxe/dhcp_arch.h
src/arch/i386/include/efi/ipxe/dhcp_arch.h
src/arch/i386/include/pcbios/ipxe/dhcp_arch.h
src/arch/x86_64/include/efi/ipxe/dhcp_arch.h
src/arch/x86_64/include/pcbios/ipxe/dhcp_arch.h
src/net/udp/dhcp.c

index f9baab4fa36ee9e2e5f7773bd8403b3650aa0a99..e971955badbc6d88638ffe34c9018e06ac97ad03 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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_VENDOR_CLASS_ID                              \
+       '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 ( DHCP_CLIENT_ARCHITECTURE_ARM32 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_ARM32
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 3, 10 /* v3.10 */
 
 #endif
index 48a36d0521f76c783b6e84e547c5f4fcaccc73e7..4ffea7f44a8a2d75895b1502c258fb646319ab5a 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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_VENDOR_CLASS_ID                              \
+       '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 ( DHCP_CLIENT_ARCHITECTURE_ARM64 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_ARM64
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 3, 10 /* v3.10 */
 
 #endif
index c17c1ea5ee84df42a32376c6c3e27218b45984d8..74027928d30e969bbe55fb685e146fdf0467aa58 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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_VENDOR_CLASS_ID                              \
+       '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 ( DHCP_CLIENT_ARCHITECTURE_IA32 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_IA32
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 3, 10 /* v3.10 */
 
 #endif
index e07e4c1929baf52e787b37b2f0bd5bc8bff33d84..0a7a2f7cd99c11d0e54f2c33a82ef43719313764 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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_VENDOR_CLASS_ID                              \
+       '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 ( DHCP_CLIENT_ARCHITECTURE_X86 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_X86
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 2, 1 /* v2.1 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 2, 1 /* v2.1 */
 
 #endif
index 6511c1ad33c6e4edfb6e2ccb72cc1c4c1ec021fc..b35818efdd4fc34339cd854494658bfd1cdca362 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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', '9', ':', \
-                     'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0' )
+#define DHCP_ARCH_VENDOR_CLASS_ID                              \
+       'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':',       \
+       'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '9', ':',  \
+       'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0'
 
-#define DHCP_ARCH_CLIENT_ARCHITECTURE \
-       DHCP_WORD ( DHCP_CLIENT_ARCHITECTURE_X86_64 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_X86_64
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 3, 10 /* v3.10 */
 
 #endif
index e07e4c1929baf52e787b37b2f0bd5bc8bff33d84..0a7a2f7cd99c11d0e54f2c33a82ef43719313764 100644 (file)
@@ -33,14 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
 #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_VENDOR_CLASS_ID                              \
+       '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 ( DHCP_CLIENT_ARCHITECTURE_X86 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_CLIENT_ARCHITECTURE_X86
 
-#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 2, 1 /* v2.1 */ )
+#define DHCP_ARCH_CLIENT_NDI 1 /* UNDI */ , 2, 1 /* v2.1 */
 
 #endif
index 9342ad21e492b20957250cd5e603471be23407f8..0c6cea0f15213a028fcd5a3626c1df951e06ed5d 100644 (file)
@@ -82,9 +82,9 @@ 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_ARCH_CLIENT_ARCHITECTURE,
-       DHCP_CLIENT_NDI, DHCP_ARCH_CLIENT_NDI,
-       DHCP_VENDOR_CLASS_ID, DHCP_ARCH_VENDOR_CLASS_ID,
+       DHCP_CLIENT_ARCHITECTURE, DHCP_WORD ( DHCP_ARCH_CLIENT_ARCHITECTURE ),
+       DHCP_CLIENT_NDI, DHCP_OPTION ( DHCP_ARCH_CLIENT_NDI ),
+       DHCP_VENDOR_CLASS_ID, DHCP_STRING ( 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,