net: Consolidate the parsing of bootfile

The same basic parsing was implemented in tftp and nfs, so add a helper
function to do the work once.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
lime2-spi
Joe Hershberger 6 years ago
parent f43308fa0c
commit 6ab1283092
  1. 11
      include/net.h
  2. 20
      net/net.c
  3. 15
      net/nfs.c
  4. 13
      net/tftp.c

@ -842,6 +842,17 @@ 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);
/**
* net_parse_bootfile - Parse the bootfile env var / cmd line param
*
* @param ipaddr - a pointer to the ipaddr to populate if included in bootfile
* @param filename - a pointer to the string to save the filename part
* @param max_len - The longest - 1 that the filename part can be
*
* return 1 if parsed, 0 if bootfile is empty
*/
int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len);
/* get a random source port */
unsigned int random_port(void);

@ -1517,6 +1517,26 @@ int is_serverip_in_cmd(void)
return !!strchr(net_boot_file_name, ':');
}
int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len)
{
char *colon;
if (net_boot_file_name[0] == '\0')
return 0;
colon = strchr(net_boot_file_name, ':');
if (colon) {
if (ipaddr)
*ipaddr = string_to_ip(net_boot_file_name);
strncpy(filename, colon + 1, max_len);
} else {
strncpy(filename, net_boot_file_name, max_len);
}
filename[max_len - 1] = '\0';
return 1;
}
#if defined(CONFIG_CMD_NFS) || \
defined(CONFIG_CMD_SNTP) || \
defined(CONFIG_CMD_DNS)

@ -859,7 +859,8 @@ void nfs_start(void)
return;
}
if (net_boot_file_name[0] == '\0') {
if (!net_parse_bootfile(&nfs_server_ip, nfs_path,
sizeof(nfs_path_buff))) {
sprintf(nfs_path, "/nfsroot/%02X%02X%02X%02X.img",
net_ip.s_addr & 0xFF,
(net_ip.s_addr >> 8) & 0xFF,
@ -868,18 +869,6 @@ void nfs_start(void)
printf("*** Warning: no boot file name; using '%s'\n",
nfs_path);
} else {
char *p = net_boot_file_name;
p = strchr(p, ':');
if (p != NULL) {
nfs_server_ip = string_to_ip(net_boot_file_name);
++p;
strcpy(nfs_path, p);
} else {
strcpy(nfs_path, net_boot_file_name);
}
}
nfs_filename = basename(nfs_path);

@ -735,7 +735,7 @@ void tftp_start(enum proto_t protocol)
tftp_block_size_option, timeout_ms);
tftp_remote_ip = net_server_ip;
if (net_boot_file_name[0] == '\0') {
if (!net_parse_bootfile(&tftp_remote_ip, tftp_filename, MAX_LEN)) {
sprintf(default_filename, "%02X%02X%02X%02X.img",
net_ip.s_addr & 0xFF,
(net_ip.s_addr >> 8) & 0xFF,
@ -747,17 +747,6 @@ void tftp_start(enum proto_t protocol)
printf("*** Warning: no boot file name; using '%s'\n",
tftp_filename);
} else {
char *p = strchr(net_boot_file_name, ':');
if (p == NULL) {
strncpy(tftp_filename, net_boot_file_name, MAX_LEN);
tftp_filename[MAX_LEN - 1] = 0;
} else {
tftp_remote_ip = string_to_ip(net_boot_file_name);
strncpy(tftp_filename, p + 1, MAX_LEN);
tftp_filename[MAX_LEN - 1] = 0;
}
}
printf("Using %s device\n", eth_get_name());

Loading…
Cancel
Save