summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/tftp.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/tftp.c b/net/tftp.c
index 243ad0a968..fc33c94583 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -39,6 +39,7 @@ static unsigned int tftp_last_block; /* last packet sequence number received */
static int tftp_state;
static uint64_t tftp_timer_start;
static int tftp_err;
+static unsigned tftp_retries;
#define STATE_RRQ 1
#define STATE_WRQ 2
@@ -106,6 +107,7 @@ static int tftp_send(void)
}
tftp_last_block = tftp_block;
+ tftp_retries = 0;
s = (uint16_t *)pkt;
*s++ = htons(TFTP_DATA);
*s++ = htons(tftp_block);
@@ -231,6 +233,7 @@ static void tftp_handler(void *ctx, char *packet, unsigned len)
break;
tftp_last_block = tftp_block;
+ tftp_retries = 0;
if (!(tftp_block % 10))
tftp_size++;
@@ -278,6 +281,7 @@ static int do_tftpb(int argc, char *argv[])
do_tftp_push(0);
tftp_last_block = 0;
tftp_size = 0;
+ tftp_retries = 0;
while((opt = getopt(argc, argv, "p")) > 0) {
switch(opt) {
@@ -348,6 +352,12 @@ static int do_tftpb(int argc, char *argv[])
tftp_err = tftp_send();
if (tftp_err)
goto out_unreg;
+ tftp_retries++;
+ }
+
+ if (tftp_retries > PKT_NUM_RETRIES) {
+ tftp_err = -ETIMEDOUT;
+ break;
}
}
out_unreg: