summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-01-15 13:43:04 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2019-01-15 13:43:04 +0100
commita9d1b2dbf4a6808bd0d2e841e32802f5bffb362a (patch)
treef5af1f80e4a215d1a5829aa5ea4f4458c4de61af /net
parent53227ec3c16fe50d7a3ca4020d3cb98878eeaa18 (diff)
parent92a1e1b0f19aedcc1ec7b4e34f6597b4340cf96a (diff)
downloadbarebox-a9d1b2dbf4a6808bd0d2e841e32802f5bffb362a.tar.gz
barebox-a9d1b2dbf4a6808bd0d2e841e32802f5bffb362a.tar.xz
Merge branch 'for-next/net'
Diffstat (limited to 'net')
-rw-r--r--net/dns.c21
-rw-r--r--net/eth.c4
-rw-r--r--net/net.c19
3 files changed, 32 insertions, 12 deletions
diff --git a/net/dns.c b/net/dns.c
index 4516235df2..ffe98ef9e3 100644
--- a/net/dns.c
+++ b/net/dns.c
@@ -258,15 +258,26 @@ static int do_host(int argc, char *argv[])
{
IPaddr_t ip;
int ret;
+ char *hostname, *varname = NULL;
- if (argc != 2)
+ if (argc < 2)
return COMMAND_ERROR_USAGE;
+ hostname = argv[1];
+
+ if (argc > 2)
+ varname = argv[2];
+
ret = resolv(argv[1], &ip);
- if (ret)
- printf("unknown host %s\n", argv[1]);
+ if (ret) {
+ printf("unknown host %s\n", hostname);
+ return 1;
+ }
+
+ if (varname)
+ setenv_ip(varname, ip);
else
- printf("%s is at %pI4\n", argv[1], &ip);
+ printf("%s is at %pI4\n", hostname, &ip);
return 0;
}
@@ -274,7 +285,7 @@ static int do_host(int argc, char *argv[])
BAREBOX_CMD_START(host)
.cmd = do_host,
BAREBOX_CMD_DESC("resolve a hostname")
- BAREBOX_CMD_OPTS("HOSTNAME")
+ BAREBOX_CMD_OPTS("<HOSTNAME> [VARIABLE]")
BAREBOX_CMD_GROUP(CMD_GRP_NET)
BAREBOX_CMD_END
#endif
diff --git a/net/eth.c b/net/eth.c
index b3e81247c2..53d24baa16 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -344,7 +344,7 @@ static int eth_register_of_fixup(void)
late_initcall(eth_register_of_fixup);
#endif
-extern IPaddr_t net_serverip;
+extern char *net_server;
extern IPaddr_t net_gateway;
static const char * const eth_mode_names[] = {
@@ -384,7 +384,7 @@ int eth_register(struct eth_device *edev)
edev->devname = xstrdup(dev_name(&edev->dev));
dev_add_param_ip(dev, "ipaddr", NULL, NULL, &edev->ipaddr, edev);
- dev_add_param_ip(dev, "serverip", NULL, NULL, &net_serverip, edev);
+ dev_add_param_string(dev, "serverip", NULL, NULL, &net_server, edev);
dev_add_param_ip(dev, "gateway", NULL, NULL, &net_gateway, edev);
dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev);
dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL,
diff --git a/net/net.c b/net/net.c
index f1a7df0298..0d889ddb52 100644
--- a/net/net.c
+++ b/net/net.c
@@ -44,7 +44,7 @@
unsigned char *NetRxPackets[PKTBUFSRX]; /* Receive packets */
static unsigned int net_ip_id;
-IPaddr_t net_serverip;
+char *net_server;
IPaddr_t net_gateway;
static IPaddr_t net_nameserver;
static char *net_domainname;
@@ -271,17 +271,26 @@ static uint16_t net_udp_new_localport(void)
IPaddr_t net_get_serverip(void)
{
- return net_serverip;
+ IPaddr_t ip;
+ int ret;
+
+ ret = resolv(net_server, &ip);
+ if (ret)
+ return 0;
+
+ return ip;
}
void net_set_serverip(IPaddr_t ip)
{
- net_serverip = ip;
+ free(net_server);
+
+ net_server = xasprintf("%pI4", &ip);
}
void net_set_serverip_empty(IPaddr_t ip)
{
- if (net_serverip)
+ if (net_server && *net_server)
return;
net_set_serverip(ip);
@@ -647,7 +656,7 @@ static int net_init(void)
globalvar_add_simple_ip("net.nameserver", &net_nameserver);
globalvar_add_simple_string("net.domainname", &net_domainname);
- globalvar_add_simple_ip("net.server", &net_serverip);
+ globalvar_add_simple_string("net.server", &net_server);
globalvar_add_simple_ip("net.gateway", &net_gateway);
return 0;