diff --git a/openwrt/package/atftp/patches/120-retry_setting.patch b/openwrt/package/atftp/patches/120-retry_setting.patch new file mode 100644 index 00000000000..b77ed30d23e --- /dev/null +++ b/openwrt/package/atftp/patches/120-retry_setting.patch @@ -0,0 +1,117 @@ +diff -urN atftp.old/tftp.c atftp.dev/tftp.c +--- atftp.old/tftp.c 2006-03-25 16:41:49.000000000 +0100 ++++ atftp.dev/tftp.c 2006-03-25 18:10:04.000000000 +0100 +@@ -967,6 +967,7 @@ + { "tftp-timeout", 1, NULL, 'T'}, + { "mode", 1, NULL, 'M'}, + { "option", 1, NULL, 'O'}, ++ { "retry", 1, NULL, 'R'}, + #if 1 + { "timeout", 1, NULL, 't'}, + { "blksize", 1, NULL, 'b'}, +@@ -986,11 +987,16 @@ + }; + + /* Support old argument until 0.8 */ +- while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:sm", ++ while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:smR:", + options, &option_index)) != EOF) + { + switch (c) + { ++ case 'R': ++ snprintf(string, sizeof(string), "option retry %s", optarg); ++ make_arg(string, &ac, &av); ++ process_cmd(ac, av); ++ break; + case 'g': + interactive = 0; + if ((action == PUT) || (action == MGET)) +diff -urN atftp.old/tftp_def.c atftp.dev/tftp_def.c +--- atftp.old/tftp_def.c 2004-02-13 04:16:09.000000000 +0100 ++++ atftp.dev/tftp_def.c 2006-03-25 18:10:04.000000000 +0100 +@@ -37,6 +37,7 @@ + { "timeout", "5", 0, 1 }, /* 2348, 2349, 2090. */ + { "blksize", "512", 0, 1 }, /* This is the default option */ + { "multicast", "", 0, 1 }, /* structure */ ++ { "retry", "5", 0, 1 }, + { "", "", 0, 0} + }; + +diff -urN atftp.old/tftp_def.h atftp.dev/tftp_def.h +--- atftp.old/tftp_def.h 2004-02-13 04:16:09.000000000 +0100 ++++ atftp.dev/tftp_def.h 2006-03-25 17:19:15.000000000 +0100 +@@ -40,7 +40,8 @@ + #define OPT_TIMEOUT 3 + #define OPT_BLKSIZE 4 + #define OPT_MULTICAST 5 +-#define OPT_NUMBER 7 ++#define OPT_RETRY 6 ++#define OPT_NUMBER 8 + + #define OPT_SIZE 12 + #define VAL_SIZE MAXLEN +diff -urN atftp.old/tftp_file.c atftp.dev/tftp_file.c +--- atftp.old/tftp_file.c 2004-02-13 04:16:09.000000000 +0100 ++++ atftp.dev/tftp_file.c 2006-03-25 18:10:04.000000000 +0100 +@@ -123,6 +123,7 @@ + struct tftphdr *tftphdr = (struct tftphdr *)data->data_buffer; + FILE *fp = NULL; /* the local file pointer */ + int number_of_timeout = 0; ++ int num_retry = atoi(data->tftp_options[OPT_RETRY].value); + int convert = 0; /* if true, do netascii convertion */ + + int oacks = 0; /* count OACK for improved error checking */ +@@ -141,7 +142,7 @@ + + int prev_block_number = 0; /* needed to support netascii convertion */ + int temp = 0; +- ++ + data->file_size = 0; + tftp_cancel = 0; + from.sin_addr.s_addr = 0; +@@ -288,7 +289,7 @@ + case GET_TIMEOUT: + number_of_timeout++; + fprintf(stderr, "timeout: retrying...\n"); +- if (number_of_timeout > NB_OF_RETRY) ++ if ((num_retry > 0) && (number_of_timeout > num_retry)) + state = S_ABORT; + else + state = timeout_state; +@@ -325,7 +326,7 @@ + number_of_timeout++; + fprintf(stderr, "tftp: packet discard <%s:%d>.\n", + inet_ntoa(from.sin_addr), ntohs(from.sin_port)); +- if (number_of_timeout > NB_OF_RETRY) ++ if ((num_retry > 0) && (number_of_timeout > num_retry)) + state = S_ABORT; + break; + case ERR: +@@ -614,6 +615,7 @@ + struct tftphdr *tftphdr = (struct tftphdr *)data->data_buffer; + FILE *fp; /* the local file pointer */ + int number_of_timeout = 0; ++ int num_retry = atoi(data->tftp_options[OPT_RETRY].value); + struct stat file_stat; + int convert = 0; /* if true, do netascii convertion */ + char string[MAXLEN]; +@@ -751,7 +753,7 @@ + case GET_TIMEOUT: + number_of_timeout++; + fprintf(stderr, "timeout: retrying...\n"); +- if (number_of_timeout > NB_OF_RETRY) ++ if ((num_retry > 0) && (number_of_timeout > num_retry)) + state = S_ABORT; + else + state = timeout_state; +@@ -797,7 +799,7 @@ + number_of_timeout++; + fprintf(stderr, "tftp: packet discard <%s:%d>.\n", + inet_ntoa(from.sin_addr), ntohs(from.sin_port)); +- if (number_of_timeout > NB_OF_RETRY) ++ if ((num_retry > 0) && (number_of_timeout > num_retry)) + state = S_ABORT; + break; + case ERR: