summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-06-09 09:26:43 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-06-09 09:26:43 +0200
commitee2ac17df0a9acdc49dc776668cc693eaebb330e (patch)
tree12af16949f8ec7ea106bd7c4c090a94ff043364b /commands
parentd47e89a45d8ee57c31e6afcdfcbc1288dcaa27a6 (diff)
parent0b06cf7edf84f37e8b5fcdee2819cf4f59934593 (diff)
downloadbarebox-ee2ac17df0a9acdc49dc776668cc693eaebb330e.tar.gz
barebox-ee2ac17df0a9acdc49dc776668cc693eaebb330e.tar.xz
Merge branch 'for-next/am33xx'
Diffstat (limited to 'commands')
-rw-r--r--commands/Kconfig1
-rw-r--r--commands/Makefile1
-rw-r--r--commands/dhcp.c78
3 files changed, 80 insertions, 0 deletions
diff --git a/commands/Kconfig b/commands/Kconfig
index 25c77a85c5..bb6674e6c2 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -1183,6 +1183,7 @@ menu "Network"
config CMD_DHCP
bool
+ select NET_DHCP
prompt "dhcp"
help
DHCP client to obtain IP or boot params
diff --git a/commands/Makefile b/commands/Makefile
index b902f58ec5..36983477be 100644
--- a/commands/Makefile
+++ b/commands/Makefile
@@ -111,3 +111,4 @@ obj-$(CONFIG_CMD_CMP) += cmp.o
obj-$(CONFIG_CMD_NV) += nv.o
obj-$(CONFIG_CMD_DEFAULTENV) += defaultenv.o
obj-$(CONFIG_CMD_STATE) += state.o
+obj-$(CONFIG_CMD_DHCP) += dhcp.o
diff --git a/commands/dhcp.c b/commands/dhcp.c
new file mode 100644
index 0000000000..eb98bfc2a7
--- /dev/null
+++ b/commands/dhcp.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 PHYTEC Messtechnik GmbH,
+ * Author: Wadim Egorov <w.egorov@phytec.de>
+ *
+ * Based on work of Sascha Hauer <s.hauer@pengutronix.de>.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <complete.h>
+#include <environment.h>
+#include <getopt.h>
+#include <dhcp.h>
+
+static int do_dhcp(int argc, char *argv[])
+{
+ int ret, opt;
+ int retries = DHCP_DEFAULT_RETRY;
+ struct dhcp_req_param dhcp_param;
+
+ memset(&dhcp_param, 0, sizeof(struct dhcp_req_param));
+ getenv_uint("global.dhcp.retries", &retries);
+
+ while ((opt = getopt(argc, argv, "H:v:c:u:U:r:")) > 0) {
+ switch (opt) {
+ case 'H':
+ dhcp_param.hostname = optarg;
+ break;
+ case 'v':
+ dhcp_param.vendor_id = optarg;
+ break;
+ case 'c':
+ dhcp_param.client_id = optarg;
+ break;
+ case 'u':
+ dhcp_param.client_uuid = optarg;
+ break;
+ case 'U':
+ dhcp_param.user_class = optarg;
+ break;
+ case 'r':
+ retries = simple_strtoul(optarg, NULL, 10);
+ break;
+ }
+ }
+
+ if (!retries) {
+ printf("retries is set to zero, set it to %d\n", DHCP_DEFAULT_RETRY);
+ retries = DHCP_DEFAULT_RETRY;
+ }
+
+ ret = dhcp(retries, &dhcp_param);
+
+ return ret;
+}
+
+BAREBOX_CMD_HELP_START(dhcp)
+BAREBOX_CMD_HELP_TEXT("Options:")
+BAREBOX_CMD_HELP_OPT("-H HOSTNAME", "hostname to send to the DHCP server")
+BAREBOX_CMD_HELP_OPT("-v ID\t", "DHCP Vendor ID (code 60) submitted in DHCP requests")
+BAREBOX_CMD_HELP_OPT("-c ID\t", "DHCP Client ID (code 61) submitted in DHCP requests")
+BAREBOX_CMD_HELP_OPT("-u UUID\t", "DHCP Client UUID (code 97) submitted in DHCP requests")
+BAREBOX_CMD_HELP_OPT("-U CLASS", "DHCP User class (code 77) submitted in DHCP requests")
+BAREBOX_CMD_HELP_OPT("-r RETRY", "retry limit (default 20)");
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(dhcp)
+ .cmd = do_dhcp,
+ BAREBOX_CMD_DESC("DHCP client to obtain IP or boot params")
+ BAREBOX_CMD_OPTS("[-HvcuUr]")
+ BAREBOX_CMD_GROUP(CMD_GRP_NET)
+ BAREBOX_CMD_HELP(cmd_dhcp_help)
+ BAREBOX_CMD_COMPLETE(empty_complete)
+BAREBOX_CMD_END