|
@@ -146,10 +146,7 @@ static int check_reply_packet(uchar *pkt, unsigned dest, unsigned src,
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Copy parameters of interest from BOOTP_REPLY/DHCP_OFFER packet
|
|
|
- */
|
|
|
-static void store_net_params(struct bootp_hdr *bp)
|
|
|
+static void store_bootp_params(struct bootp_hdr *bp)
|
|
|
{
|
|
|
#if !defined(CONFIG_BOOTP_SERVERIP)
|
|
|
struct in_addr tmp_ip;
|
|
@@ -182,6 +179,16 @@ static void store_net_params(struct bootp_hdr *bp)
|
|
|
*/
|
|
|
if (*net_boot_file_name)
|
|
|
env_set("bootfile", net_boot_file_name);
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Copy parameters of interest from BOOTP_REPLY/DHCP_OFFER packet
|
|
|
+ */
|
|
|
+static void store_net_params(struct bootp_hdr *bp)
|
|
|
+{
|
|
|
+#if !defined(CONFIG_SERVERIP_FROM_PROXYDHCP)
|
|
|
+ store_bootp_params(bp);
|
|
|
#endif
|
|
|
net_copy_ip(&net_ip, &bp->bp_yiaddr);
|
|
|
}
|
|
@@ -1055,8 +1062,12 @@ static void dhcp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
|
|
|
debug("DHCPHandler: got DHCP packet: (src=%d, dst=%d, len=%d) state: "
|
|
|
"%d\n", src, dest, len, dhcp_state);
|
|
|
|
|
|
- if (net_read_ip(&bp->bp_yiaddr).s_addr == 0)
|
|
|
+ if (net_read_ip(&bp->bp_yiaddr).s_addr == 0) {
|
|
|
+#if defined(CONFIG_SERVERIP_FROM_PROXYDHCP)
|
|
|
+ store_bootp_params(bp);
|
|
|
+#endif
|
|
|
return;
|
|
|
+ }
|
|
|
|
|
|
switch (dhcp_state) {
|
|
|
case SELECTING:
|
|
@@ -1075,6 +1086,12 @@ static void dhcp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
|
|
|
dhcp_packet_process_options(bp);
|
|
|
efi_net_set_dhcp_ack(pkt, len);
|
|
|
|
|
|
+#if defined(CONFIG_SERVERIP_FROM_PROXYDHCP)
|
|
|
+ if (!net_server_ip.s_addr)
|
|
|
+ udelay(CONFIG_SERVERIP_FROM_PROXYDHCP_DELAY_MS *
|
|
|
+ 1000);
|
|
|
+#endif /* CONFIG_SERVERIP_FROM_PROXYDHCP */
|
|
|
+
|
|
|
debug("TRANSITIONING TO REQUESTING STATE\n");
|
|
|
dhcp_state = REQUESTING;
|
|
|
|