summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/tftp.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/net/tftp.c b/net/tftp.c
index 338359b119..4b60cc8dd0 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -13,13 +13,11 @@
#include <errno.h>
#include <libgen.h>
#include <fcntl.h>
+#include <progress.h>
#include <linux/err.h>
#define TFTP_PORT 69 /* Well known TFTP port # */
#define TIMEOUT 5 /* Seconds to timeout for a lost pkt */
-# define TIMEOUT_COUNT 10 /* # of timeouts before giving up */
- /* (for checking the image size) */
-#define HASHES_PER_LINE 65 /* Number of "loading" hashes per line */
/*
* TFTP operations.
@@ -50,6 +48,7 @@ static int tftp_err;
static char *tftp_filename;
static struct net_connection *tftp_con;
static int net_store_fd;
+static int tftp_size;
static int tftp_send(void)
{
@@ -84,6 +83,8 @@ static int tftp_send(void)
break;
}
+ tftp_timer_start = get_time_ns();
+ show_progress(tftp_size);
ret = net_udp_send(tftp_con, len);
return ret;
@@ -127,20 +128,6 @@ static void tftp_handler(char *packet, unsigned len)
len -= 2;
tftp_block = ntohs(*(uint16_t *)pkt);
- /*
- * RFC1350 specifies that the first data packet will
- * have sequence number 1. If we receive a sequence
- * number of 0 this means that there was a wrap
- * around of the (16 bit) counter.
- */
- if (tftp_block) {
- if (((tftp_block - 1) % 10) == 0) {
- putchar('#');
- } else if ((tftp_block % (10 * HASHES_PER_LINE)) == 0) {
- puts("\n\t ");
- }
- }
-
if (tftp_state == STATE_RRQ)
debug("Server did not acknowledge timeout option!\n");
@@ -165,7 +152,9 @@ static void tftp_handler(char *packet, unsigned len)
break;
tftp_last_block = tftp_block;
- tftp_timer_start = get_time_ns();
+
+ if (!(tftp_block % 10))
+ tftp_size++;
ret = write(net_store_fd, pkt + 2, len);
if (ret < 0) {
@@ -205,6 +194,8 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
char *remotefile;
char ip1[16];
+ tftp_size = 0;
+
if (argc < 2)
return COMMAND_ERROR_USAGE;
@@ -229,10 +220,12 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
tftp_filename = remotefile;
- printf("TFTP from server %s; Filename: '%s'\nLoading: ",
+ printf("TFTP from server %s; Filename: '%s'\n",
ip_to_string(net_get_serverip(), ip1),
tftp_filename);
+ init_progression_bar(0);
+
tftp_timer_start = get_time_ns();
tftp_state = STATE_RRQ;
tftp_block = 0;
@@ -248,8 +241,7 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
}
net_poll();
if (is_timeout(tftp_timer_start, SECOND)) {
- tftp_timer_start = get_time_ns();
- printf("T ");
+ show_progress(-1);
tftp_send();
}
}