[DHCP] Fix RFC4390 client identifier constructions.
authorMichael Brown <mcb30@etherboot.org>
Wed, 27 Feb 2008 16:55:46 +0000 (16:55 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 27 Feb 2008 16:55:46 +0000 (16:55 +0000)
RFC 4390 provides for the DHCP client identifier to contain the link-layer
hardware type and MAC address when the MAC address exceeds 16 bytes.
However, the hardware type field is only 8 bits; we were assuming 16 bits.

src/net/udp/dhcp.c

index 2521f9a..081fa84 100644 (file)
@@ -610,7 +610,7 @@ int create_dhcp_request ( struct net_device *netdev, int msgtype,
        /* Add DHCP client identifier.  Required for Infiniband, and
         * doesn't hurt other link layers.
         */
        /* Add DHCP client identifier.  Required for Infiniband, and
         * doesn't hurt other link layers.
         */
-       client_id.ll_proto = netdev->ll_protocol->ll_proto;
+       client_id.ll_proto = ntohs ( netdev->ll_protocol->ll_proto );
        ll_addr_len = netdev->ll_protocol->ll_addr_len;
        assert ( ll_addr_len <= sizeof ( client_id.ll_addr ) );
        memcpy ( client_id.ll_addr, netdev->ll_addr, ll_addr_len );
        ll_addr_len = netdev->ll_protocol->ll_addr_len;
        assert ( ll_addr_len <= sizeof ( client_id.ll_addr ) );
        memcpy ( client_id.ll_addr, netdev->ll_addr, ll_addr_len );