[DHCP] FIXME: quick temporary settings fix, needs update for new API
[people/andreif/gpxe.git] / src / net / udp / dhcp.c
index 624532d..2c1e76d 100644 (file)
@@ -160,6 +160,10 @@ static int create_dhcp_packet ( struct dhcp_packet *dhcppkt,
                return -ENOSPC;
 
        /* Initialise DHCP packet content */
+
+        /* FIXME: wrong place to fix this. */
+        memset ( dhcppkt, 0, sizeof ( *dhcppkt ) );
+
        memset ( dhcphdr, 0, max_len );
        dhcphdr->xid = dhcp_xid ( netdev );
        dhcphdr->magic = htonl ( DHCP_MAGIC_COOKIE );
@@ -175,7 +179,7 @@ static int create_dhcp_packet ( struct dhcp_packet *dhcppkt,
        }
        dhcphdr->hlen = hlen;
        memcpy ( dhcphdr->chaddr, netdev->ll_addr, hlen );
-       memcpy ( dhcphdr->options, options, options_len );
+       memcpy ( dhcphdr->options, options->data, options_len );
 
        /* Initialise DHCP packet structure and settings interface */
        dhcppkt_init ( dhcppkt, NULL, data, max_len );
@@ -258,9 +262,10 @@ int create_dhcp_request ( struct dhcp_packet *dhcppkt,
                              "option: %s\n", strerror ( rc ) );
                        return rc;
                }
-               if ( ( rc = copy_setting ( &dhcppkt->settings, DHCP_EB_YIADDR,
+               if ( ( rc = copy_setting ( &dhcppkt->settings,
+                                          DHCP_REQUESTED_ADDRESS,
                                           offer_settings,
-                                          DHCP_REQUESTED_ADDRESS ) ) != 0 ) {
+                                          DHCP_EB_YIADDR ) ) != 0 ) {
                        DBG ( "DHCP could not set requested address "
                              "option: %s\n", strerror ( rc ) );
                        return rc;