Patchwork [U-Boot,v3,4/5] TFTP: add tftpsrv command

login
register
mail settings
Submitter Luca Ceresoli
Date May 17, 2011, 10:03 a.m.
Message ID <1305626621-15008-5-git-send-email-luca.ceresoli@comelit.it>
Download mbox | patch
Permalink /patch/95898/
State Accepted
Commit 7a83af07aef3c924cfb2d36e68eea8b86d22f2a1
Headers show

Comments

Luca Ceresoli - May 17, 2011, 10:03 a.m.
Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it>
Cc: Wolfgang Denk <wd@denx.de>

---
Changes in v2: none.

Changes in v3:
 - rebased on top of the net/tftp.c cleanup;
 - made do_tftpsrv() static;
 - improved tftpsrv command help;
 - removed all #ifdefs that used to remove negligible amounts of compiled code,
   at the cost of a much less readable source file; after measurements, it
   turned out this change does not increase code size.

 README           |    1 +
 common/cmd_net.c |   17 +++++++++++++++++
 include/net.h    |    3 ++-
 net/net.c        |    7 ++++++-
 4 files changed, 26 insertions(+), 2 deletions(-)
Detlev Zundel - May 19, 2011, 8:12 a.m.
Luca Ceresoli <luca.ceresoli@comelit.it> writes:

> Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it>
> Cc: Wolfgang Denk <wd@denx.de>

Acked-by: Detlev Zundel <dzu@denx.de>

Cheers
  Detlev
Wolfgang Denk - May 19, 2011, 7:48 p.m.
Dear Luca Ceresoli,

In message <1305626621-15008-5-git-send-email-luca.ceresoli@comelit.it> you wrote:
> Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it>
> Cc: Wolfgang Denk <wd@denx.de>
> 
> ---
> Changes in v2: none.
> 
> Changes in v3:
>  - rebased on top of the net/tftp.c cleanup;
>  - made do_tftpsrv() static;
>  - improved tftpsrv command help;
>  - removed all #ifdefs that used to remove negligible amounts of compiled code,
>    at the cost of a much less readable source file; after measurements, it
>    turned out this change does not increase code size.
> 
>  README           |    1 +
>  common/cmd_net.c |   17 +++++++++++++++++
>  include/net.h    |    3 ++-
>  net/net.c        |    7 ++++++-
>  4 files changed, 26 insertions(+), 2 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk

Patch

diff --git a/README b/README
index 6f3748d..ed73981 100644
--- a/README
+++ b/README
@@ -709,6 +709,7 @@  The following options need to be configured:
 					  (requires CONFIG_CMD_MEMORY)
 		CONFIG_CMD_SOURCE	  "source" command Support
 		CONFIG_CMD_SPI		* SPI serial bus support
+		CONFIG_CMD_TFTPSRV	* TFTP transfer in server mode
 		CONFIG_CMD_USB		* USB support
 		CONFIG_CMD_VFD		* VFD support (TRAB)
 		CONFIG_CMD_CDP		* Cisco Discover Protocol support
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 8c6f5c8..b2c9355 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -52,6 +52,23 @@  U_BOOT_CMD(
 	"[loadAddress] [[hostIPaddr:]bootfilename]"
 );
 
+#ifdef CONFIG_CMD_TFTPSRV
+static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	return netboot_common(TFTPSRV, cmdtp, argc, argv);
+}
+
+U_BOOT_CMD(
+	tftpsrv,	2,	1,	do_tftpsrv,
+	"act as a TFTP server and boot the first received file",
+	"[loadAddress]\n"
+	"Listen for an incoming TFTP transfer, receive a file and boot it.\n"
+	"The transfer is aborted if a transfer has not been started after\n"
+	"about 50 seconds or if Ctrl-C is pressed."
+);
+#endif
+
+
 #ifdef CONFIG_CMD_RARP
 int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
diff --git a/include/net.h b/include/net.h
index 01f7159..018a744 100644
--- a/include/net.h
+++ b/include/net.h
@@ -364,7 +364,8 @@  extern int		NetState;		/* Network loop state		*/
 extern int		NetRestartWrap;		/* Tried all network devices	*/
 #endif
 
-typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t;
+typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
+	       TFTPSRV } proto_t;
 
 /* from net/net.c */
 extern char	BootFile[128];			/* Boot File name		*/
diff --git a/net/net.c b/net/net.c
index 2abf879..7a93542 100644
--- a/net/net.c
+++ b/net/net.c
@@ -423,7 +423,11 @@  restart:
 			/* always use ARP to get server ethernet address */
 			TftpStart();
 			break;
-
+#ifdef CONFIG_CMD_TFTPSRV
+		case TFTPSRV:
+			TftpStartServer();
+			break;
+#endif
 #if defined(CONFIG_CMD_DHCP)
 		case DHCP:
 			BootpTry = 0;
@@ -1791,6 +1795,7 @@  common:
 		/* Fall through */
 
 	case NETCONS:
+	case TFTPSRV:
 		if (NetOurIP == 0) {
 			puts("*** ERROR: `ipaddr' not set\n");
 			return 1;