net: When checking prerequisites, consider boot_file_name
authorJoe Hershberger <joe.hershberger@ni.com>
Wed, 4 Jul 2018 00:36:39 +0000 (19:36 -0500)
committerJoe Hershberger <joe.hershberger@ni.com>
Thu, 26 Jul 2018 19:08:19 +0000 (14:08 -0500)
For net_boot_common, we allow the serverip to be specified as part of
the boot file name. For net commands that require serverip, include that
source as a valid specification of serverip.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Reviewed-by: Alexander Graf <agraf@suse.de>
include/net.h
net/net.c

index f9984ae86ca5614f275e427b2eeba6015b585f37..de2d7bba19d3937181a42f4d2c72c7e9adb2d50c 100644 (file)
@@ -839,6 +839,9 @@ ushort env_get_vlan(char *);
 /* copy a filename (allow for "..." notation, limit length) */
 void copy_filename(char *dst, const char *src, int size);
 
+/* check if serverip is specified in filename from the command line */
+int is_serverip_in_cmd(void);
+
 /* get a random source port */
 unsigned int random_port(void);
 
index f35695b4fc9f0b62ffd8189c4cc9693c9dc41f87..bff3e9c5b531cc76254b835b8bb5e938f0bc3a46 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -1341,7 +1341,7 @@ static int net_check_prereq(enum proto_t protocol)
                /* Fall through */
        case TFTPGET:
        case TFTPPUT:
-               if (net_server_ip.s_addr == 0) {
+               if (net_server_ip.s_addr == 0 && !is_serverip_in_cmd()) {
                        puts("*** ERROR: `serverip' not set\n");
                        return 1;
                }
@@ -1512,6 +1512,11 @@ void copy_filename(char *dst, const char *src, int size)
        *dst = '\0';
 }
 
+int is_serverip_in_cmd(void)
+{
+       return !!strchr(net_boot_file_name, ':');
+}
+
 #if    defined(CONFIG_CMD_NFS)         || \
        defined(CONFIG_CMD_SNTP)        || \
        defined(CONFIG_CMD_DNS)