mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +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 */
|
/* check if serverip is specified in filename from the command line */
|
||||||
int is_serverip_in_cmd(void);
|
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 */
|
/* get a random source port */
|
||||||
unsigned int random_port(void);
|
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, ':');
|
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) || \
|
#if defined(CONFIG_CMD_NFS) || \
|
||||||
defined(CONFIG_CMD_SNTP) || \
|
defined(CONFIG_CMD_SNTP) || \
|
||||||
defined(CONFIG_CMD_DNS)
|
defined(CONFIG_CMD_DNS)
|
||||||
|
|
15
net/nfs.c
15
net/nfs.c
|
@ -859,7 +859,8 @@ void nfs_start(void)
|
||||||
return;
|
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",
|
sprintf(nfs_path, "/nfsroot/%02X%02X%02X%02X.img",
|
||||||
net_ip.s_addr & 0xFF,
|
net_ip.s_addr & 0xFF,
|
||||||
(net_ip.s_addr >> 8) & 0xFF,
|
(net_ip.s_addr >> 8) & 0xFF,
|
||||||
|
@ -868,18 +869,6 @@ void nfs_start(void)
|
||||||
|
|
||||||
printf("*** Warning: no boot file name; using '%s'\n",
|
printf("*** Warning: no boot file name; using '%s'\n",
|
||||||
nfs_path);
|
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);
|
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_block_size_option, timeout_ms);
|
||||||
|
|
||||||
tftp_remote_ip = net_server_ip;
|
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",
|
sprintf(default_filename, "%02X%02X%02X%02X.img",
|
||||||
net_ip.s_addr & 0xFF,
|
net_ip.s_addr & 0xFF,
|
||||||
(net_ip.s_addr >> 8) & 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",
|
printf("*** Warning: no boot file name; using '%s'\n",
|
||||||
tftp_filename);
|
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());
|
printf("Using %s device\n", eth_get_name());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue