[pxebs] Correct endianness of PXE type
authorJoshua Oreman <oremanj@rwcr.net>
Sun, 18 Oct 2009 22:59:19 +0000 (18:59 -0400)
committerMichael Brown <mcb30@etherboot.org>
Sat, 24 Oct 2009 18:34:35 +0000 (19:34 +0100)
The PXE type field is canonically little-endian, but the pxebs command
treats it as big-endian in converting the type number passed on the
command line to a field value to search against. Fix, to prevent the
necessity of incantations like "pxebs net0 1536" to select menu item #6.

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

index 5f74137..2483ec2 100644 (file)
@@ -693,7 +693,7 @@ static int dhcp_pxebs_tx ( struct dhcp_session *dhcp,
 
        DBGC ( dhcp, "DHCP %p PXEBS REQUEST to %s:%d for type %d\n",
               dhcp, inet_ntoa ( peer->sin_addr ), ntohs ( peer->sin_port ),
-              ntohs ( dhcp->pxe_type ) );
+              le16_to_cpu ( dhcp->pxe_type ) );
 
        /* Set boot menu item */
        menu_item.type = dhcp->pxe_type;
@@ -1363,7 +1363,7 @@ int start_pxebs ( struct job_interface *job, struct net_device *netdev,
        fetch_ipv4_setting ( netdev_settings ( netdev ), &ip_setting,
                             &dhcp->local.sin_addr );
        dhcp->local.sin_port = htons ( BOOTPC_PORT );
-       dhcp->pxe_type = htons ( pxe_type );
+       dhcp->pxe_type = cpu_to_le16 ( pxe_type );
        dhcp->timer.expired = dhcp_timer_expired;
 
        /* Construct PXE boot server IP address lists */