Skip to content

Commit

Permalink
net: Consolidate the parsing of bootfile
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
jhershbe committed Jul 26, 2018
1 parent f43308f commit 6ab1283
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 25 deletions.
11 changes: 11 additions & 0 deletions include/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
20 changes: 20 additions & 0 deletions net/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 2 additions & 13 deletions net/nfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);
Expand Down
13 changes: 1 addition & 12 deletions net/tftp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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());
Expand Down

0 comments on commit 6ab1283

Please sign in to comment.