Skip to content

TFTP: add host ip addr support

Ben Warren u-boot 1 version New

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest1 patch 0 repliesNew

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/1Fix nfs command help to reflect that the serverip is optional+0 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [U-Boot-Users] [PATCH 0/1] TFTP: add host ip addr support
Quoted 4 lines · Andre Renaud

Couldn't this be done as follows instead? This way there is no need to allocate any more memory on the stack, and no need for a new configuration option.

This is nice, because it works in-place and doesn't need the second buffer. One concern, though (see below)

Quoted 50 lines

Andre

common/cmd_net.c +1 -1
index 21682c0..b86ca86 100644
@@ -51,7 +51,7 @@ int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
     tftpboot,    3,    1,    do_tftpb,
     "tftpboot- boot image via network using TFTP protocol\n",
-    "[loadAddress] [bootfilename]\n"
+    "[loadAddress] [[hostIPaddr:]bootfilename]\n"
 );
 
 int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
net/tftp.c +3 -2
index 8b95bcf..262ff79 100644
@@ -34,7 +34,7 @@
 #define TFTP_ERROR    5
 #define TFTP_OACK    6
 
-
+static IPaddr_t TftpServerIP;
 static int    TftpServerPort;        /* The UDP port at their end        */
 static int    TftpOurPort;        /* The UDP port at our end        */
 static int    TftpTimeoutCount;
@@ -231,7 +242,7 @@ TftpSend (void)
         break;
     }
 
-    NetSendUDPPacket(NetServerEther, NetServerIP, TftpServerPort, TftpOurPort, len);
+    NetSendUDPPacket(NetServerEther, TftpServerIP, TftpServerPort, TftpOurPort, len);
 }
 
 
@@ -453,30 +464,43 @@ TftpStart (void)
     char *ep;             /* Environment pointer */
 #endif
 
+    TftpServerIP = NetServerIP;
     if (BootFile[0] == '\0') {
         sprintf(default_filename, "%02lX%02lX%02lX%02lX.img",
             NetOurIP & 0xFF,
             (NetOurIP >>  8) & 0xFF,
             (NetOurIP >> 16) & 0xFF,
             (NetOurIP >> 24) & 0xFF    );

net/tftp.c TftpStart (void) · line 483

Quoted 10 lines
net/tftp.c +4 -0
         tftp_filename = default_filename;
 
         printf ("*** Warning: no boot file name; using '%s'\n",
             tftp_filename);
     } else {
+        char *p=BootFile;
+        p = strchr (p, ':');
+        if (p != NULL) {
+            TftpServerIP = string_to_ip (BootFile);
 

I don't know if string_to_ip() works properly on a string of the format a.b.c.d:filename

net/tftp.c TftpStart (void) · line 490

Quoted 7 lines
net/tftp.c +4 -0
+            ++p;
+            tftp_filename = p;
+        } else
+            tftp_filename = BootFile;
     }
 
 

Alternatively:

	char *p = strchr(Bootfile, ':');
	if (p && *(p+1) != '\0') {
		tftp_filename = P + 1;
		*p = '\0';
		TftpServerIP = string_to_ip(Bootfile);
	} else
		tftp_filename = Bootfile;

*** Note: I haven't tried compiling this and it was written quickly, so may be garbage! Just ask Wolfgang...

regards,
Ben