]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[dhcp] Use PXE byte ordering for UUID in DHCP option 97
authorMichael Brown <mcb30@ipxe.org>
Wed, 20 Mar 2013 00:54:42 +0000 (00:54 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 20 Mar 2013 00:54:42 +0000 (00:54 +0000)
The PXE spec does not specify a byte ordering for UUIDs, but RFC4578
suggests that it follows the EFI spec, in which the first three fields
are little-endian.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/udp/dhcp.c

index e63c3e4224195831f2b5dd98044b676dd794d19e..3f2c451e12e4ffa36888fe15c72e7b178569a840 100644 (file)
@@ -1041,10 +1041,17 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
                return rc;
        }
 
-       /* Add client UUID, if we have one.  Required for PXE. */
+       /* Add client UUID, if we have one.  Required for PXE.  The
+        * PXE spec does not specify a byte ordering for UUIDs, but
+        * RFC4578 suggests that it follows the EFI spec, in which the
+        * first three fields are little-endian.
+        */
        client_uuid.type = DHCP_CLIENT_UUID_TYPE;
        if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,
                                          &client_uuid.uuid ) ) >= 0 ) {
+               __bswap_32s ( &client_uuid.uuid.canonical.a );
+               __bswap_16s ( &client_uuid.uuid.canonical.b );
+               __bswap_16s ( &client_uuid.uuid.canonical.c );
                if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_UUID,
                                            &client_uuid,
                                            sizeof ( client_uuid ) ) ) != 0 ) {