/src/barebox/commands/dhcp.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: GPL-2.0-only |
2 | | // SPDX-FileCopyrightText: © 2015 PHYTEC Messtechnik GmbH |
3 | | |
4 | | /* |
5 | | * Author: Wadim Egorov <w.egorov@phytec.de> |
6 | | * Based on work of Sascha Hauer <s.hauer@pengutronix.de>. |
7 | | */ |
8 | | |
9 | | #include <common.h> |
10 | | #include <command.h> |
11 | | #include <complete.h> |
12 | | #include <environment.h> |
13 | | #include <getopt.h> |
14 | | #include <dhcp.h> |
15 | | #include <net.h> |
16 | | |
17 | | static int do_dhcp(int argc, char *argv[]) |
18 | 0 | { |
19 | 0 | int ret, opt; |
20 | 0 | struct dhcp_req_param dhcp_param = {}; |
21 | 0 | struct eth_device *edev; |
22 | 0 | const char *edevname; |
23 | |
|
24 | 0 | while ((opt = getopt(argc, argv, "H:v:c:u:U:r:o:")) > 0) { |
25 | 0 | switch (opt) { |
26 | 0 | case 'H': |
27 | 0 | dhcp_param.hostname = optarg; |
28 | 0 | break; |
29 | 0 | case 'v': |
30 | 0 | dhcp_param.vendor_id = optarg; |
31 | 0 | break; |
32 | 0 | case 'c': |
33 | 0 | dhcp_param.client_id = optarg; |
34 | 0 | break; |
35 | 0 | case 'u': |
36 | 0 | dhcp_param.client_uuid = optarg; |
37 | 0 | break; |
38 | 0 | case 'U': |
39 | 0 | dhcp_param.user_class = optarg; |
40 | 0 | break; |
41 | 0 | case 'r': |
42 | 0 | dhcp_param.retries = simple_strtoul(optarg, NULL, 10); |
43 | 0 | break; |
44 | 0 | case 'o': |
45 | 0 | dhcp_param.option224 = optarg; |
46 | 0 | break; |
47 | 0 | default: |
48 | 0 | return COMMAND_ERROR_USAGE; |
49 | 0 | } |
50 | 0 | } |
51 | | |
52 | 0 | switch (argc - optind) { |
53 | 0 | case 0: |
54 | 0 | edevname = "eth0"; |
55 | 0 | puts("Defaulting to eth0\n"); |
56 | 0 | break; |
57 | 0 | case 1: |
58 | 0 | edevname = argv[optind]; |
59 | 0 | break; |
60 | 0 | default: |
61 | 0 | return COMMAND_ERROR_USAGE; |
62 | 0 | } |
63 | | |
64 | 0 | edev = eth_get_byname(edevname); |
65 | 0 | if (!edev) { |
66 | 0 | printf("No such network device: %s\n", edevname); |
67 | 0 | return 1; |
68 | 0 | } |
69 | | |
70 | 0 | ret = dhcp(edev, &dhcp_param); |
71 | |
|
72 | 0 | return ret; |
73 | 0 | } |
74 | | |
75 | | BAREBOX_CMD_HELP_START(dhcp) |
76 | | BAREBOX_CMD_HELP_TEXT("Options:") |
77 | | BAREBOX_CMD_HELP_OPT("-H HOSTNAME", "hostname to send to the DHCP server") |
78 | | BAREBOX_CMD_HELP_OPT("-v ID\t", "DHCP Vendor ID (code 60) submitted in DHCP requests") |
79 | | BAREBOX_CMD_HELP_OPT("-c ID\t", "DHCP Client ID (code 61) submitted in DHCP requests") |
80 | | BAREBOX_CMD_HELP_OPT("-u UUID\t", "DHCP Client UUID (code 97) submitted in DHCP requests") |
81 | | BAREBOX_CMD_HELP_OPT("-U CLASS", "DHCP User class (code 77) submitted in DHCP requests") |
82 | | BAREBOX_CMD_HELP_OPT("-r RETRY", "retry limit (default 20)") |
83 | | BAREBOX_CMD_HELP_OPT("-o PRIVATE DATA", "private data (code 224) submitted in DHCP requests") |
84 | | BAREBOX_CMD_HELP_END |
85 | | |
86 | | BAREBOX_CMD_START(dhcp) |
87 | | .cmd = do_dhcp, |
88 | | BAREBOX_CMD_DESC("DHCP client to obtain IP or boot params") |
89 | | BAREBOX_CMD_OPTS("[-HvcuUro] [device]") |
90 | | BAREBOX_CMD_GROUP(CMD_GRP_NET) |
91 | | BAREBOX_CMD_HELP(cmd_dhcp_help) |
92 | | BAREBOX_CMD_COMPLETE(eth_complete) |
93 | | BAREBOX_CMD_END |