mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-16 04:01:31 +00:00
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>
This commit is contained in:
parent
f43308fa0c
commit
6ab1283092
4 changed files with 34 additions and 25 deletions
|
@ -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);
|
||||
|
||||
|
|
20
net/net.c
20
net/net.c
|
@ -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)
|
||||
|
|
15
net/nfs.c
15
net/nfs.c
|
@ -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);
|
||||
|
|
13
net/tftp.c
13
net/tftp.c
|
@ -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…
Add table
Reference in a new issue