]> git.sur5r.net Git - u-boot/blobdiff - net/bootp.c
spi: fsl_qspi: Fix issues on arm64
[u-boot] / net / bootp.c
index f2978a23ce5aaaa8074ae6bdeac950363edeaca0..d7852dbb447a123b5e45af89e6483b5d5c3a9a53 100644 (file)
@@ -60,6 +60,8 @@ char net_nis_domain[32] = {0,}; /* Our NIS domain */
 char net_hostname[32] = {0,}; /* Our hostname */
 char net_root_path[64] = {0,}; /* Our bootpath */
 
+static ulong time_taken_max;
+
 #if defined(CONFIG_CMD_DHCP)
 static dhcp_state_t dhcp_state = INIT;
 static u32 dhcp_leasetime;
@@ -130,6 +132,8 @@ static int check_reply_packet(uchar *pkt, unsigned dest, unsigned src,
                retval = -5;
        else if (!bootp_match_id(net_read_u32(&bp->bp_id)))
                retval = -6;
+       else if (memcmp(bp->bp_chaddr, net_ethaddr, HWL_ETHER) != 0)
+               retval = -7;
 
        debug("Filtering pkt = %d\n", retval);
 
@@ -380,7 +384,7 @@ static void bootp_timeout_handler(void)
 {
        ulong time_taken = get_timer(bootp_start);
 
-       if (time_taken >= TIMEOUT_MS) {
+       if (time_taken >= time_taken_max) {
 #ifdef CONFIG_BOOTP_MAY_FAIL
                puts("\nRetry time exceeded\n");
                net_set_state(NETLOOP_FAIL);
@@ -675,12 +679,19 @@ void bootp_request(void)
        u32 bootp_id;
        struct in_addr zero_ip;
        struct in_addr bcast_ip;
+       char *ep;  /* Environment pointer */
 
        bootstage_mark_name(BOOTSTAGE_ID_BOOTP_START, "bootp_start");
 #if defined(CONFIG_CMD_DHCP)
        dhcp_state = INIT;
 #endif
 
+       ep = getenv("bootpretryperiod");
+       if (ep != NULL)
+               time_taken_max = simple_strtoul(ep, NULL, 10);
+       else
+               time_taken_max = TIMEOUT_MS;
+
 #ifdef CONFIG_BOOTP_RANDOM_DELAY               /* Random BOOTP delay */
        if (bootp_try == 0)
                srand_mac();