diff options
| author | Robin Getz <rgetz@blackfin.uclinux.org> | 2009-07-20 14:53:54 -0400 | 
|---|---|---|
| committer | Ben Warren <biggerbadderben@gmail.com> | 2009-07-22 22:53:44 -0700 | 
| commit | 1a32bf41881b5dbe3119cb77a33572b4d462cabf (patch) | |
| tree | dda370cbcb7a6614e111ad2399661392322bab0b /common/cmd_net.c | |
| parent | 88ad3fd91c83a4343b25385fd78fd8e29ebb723f (diff) | |
| download | olio-uboot-2014.01-1a32bf41881b5dbe3119cb77a33572b4d462cabf.tar.xz olio-uboot-2014.01-1a32bf41881b5dbe3119cb77a33572b4d462cabf.zip | |
Add DNS support
On 04 Oct 2008 Pieter posted a dns implementation for U-Boot.
http://www.mail-archive.com/u-boot-users@lists.sourceforge.net/msg10216.html
>
> DNS can be enabled by setting CFG_CMD_DNS. After performing a query,
> the serverip environment var is updated.
>
> Probably there are some cosmetic issues with the patch. Unfortunatly I
> do not have the time to correct these. So if anybody else likes DNS
> support in U-Boot and has the time, feel free to patch it in the main tree.
Here it is again - slightly modified & smaller:
  - update to 2009-06 (Pieter's patch was for U-Boot 1.2.0)
  - README.dns is added
  - syntax is changed (now takes a third option, the env var to store
    the result in)
  - add a random port() function in net.c
  - sort Makefile in ./net/Makefile
  - dns just returns unless a env var is given
  - run through checkpatch, and clean up style issues
  - remove packet from stack
  - cleaned up some comments
  - failure returns much faster (if server responds, don't wait for
    timeout)
  - use built in functions (memcpy) rather than byte copy.
Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org>
Signed-off-by: Pieter Voorthuijsen <pieter.voorthuijsen@prodrive.nl>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'common/cmd_net.c')
| -rw-r--r-- | common/cmd_net.c | 49 | 
1 files changed, 49 insertions, 0 deletions
| diff --git a/common/cmd_net.c b/common/cmd_net.c index 68183c49a..ac706ae8d 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -353,3 +353,52 @@ U_BOOT_CMD(  	"[NTP server IP]\n"  );  #endif + +#if defined(CONFIG_CMD_DNS) +int do_dns(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	if (argc == 1) { +		cmd_usage(cmdtp); +		return -1; +	} + +	/* +	 * We should check for a valid hostname: +	 * - Each label must be between 1 and 63 characters long +	 * - the entire hostname has a maximum of 255 characters +	 * - only the ASCII letters 'a' through 'z' (case-insensitive), +	 *   the digits '0' through '9', and the hyphen +	 * - cannot begin or end with a hyphen +	 * - no other symbols, punctuation characters, or blank spaces are +	 *   permitted +	 * but hey - this is a minimalist implmentation, so only check length +	 * and let the name server deal with things. +	 */ +	if (strlen(argv[1]) >= 255) { +		printf("dns error: hostname too long\n"); +		return 1; +	} + +	NetDNSResolve = argv[1]; + +	if (argc == 3) +		NetDNSenvvar = argv[2]; +	else +		NetDNSenvvar = NULL; + +	if (NetLoop(DNS) < 0) { +		printf("dns lookup of %s failed, check setup\n", argv[1]); +		return 1; +	} + +	return 0; +} + +U_BOOT_CMD( +	dns,	3,	1,	do_dns, +	"lookup the IP of a hostname", +	"hostname [envvar]" +); + +#endif	/* CONFIG_CMD_DNS */ + |