Blame view

cmd/net.c 10.2 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
3863585bb   wdenk   Initial revision
2
3
4
  /*
   * (C) Copyright 2000
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
3863585bb   wdenk   Initial revision
5
6
7
8
9
10
11
   */
  
  /*
   * Boot support
   */
  #include <common.h>
  #include <command.h>
9fb625ce0   Simon Glass   env: Move env_set...
12
  #include <env.h>
8e8ccfe1a   Simon Glass   common: Move the ...
13
  #include <image.h>
3863585bb   wdenk   Initial revision
14
  #include <net.h>
e4bf0c5cf   Simon Glass   net: tftpput: Ren...
15
  static int netboot_common(enum proto_t, cmd_tbl_t *, int, char * const []);
3863585bb   wdenk   Initial revision
16

d7a45eafd   Joe Hershberger   net: Make CMD_NET...
17
  #ifdef CONFIG_CMD_BOOTP
088f1b199   Kim Phillips   common/cmd_*.c: s...
18
  static int do_bootp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
3863585bb   wdenk   Initial revision
19
  {
088f1b199   Kim Phillips   common/cmd_*.c: s...
20
  	return netboot_common(BOOTP, cmdtp, argc, argv);
3863585bb   wdenk   Initial revision
21
  }
0d4983930   wdenk   Patch by Kenneth ...
22
23
  U_BOOT_CMD(
  	bootp,	3,	1,	do_bootp,
2fb2604d5   Peter Tyser   Command usage cle...
24
  	"boot image via network using BOOTP/TFTP protocol",
a89c33db9   Wolfgang Denk   General help mess...
25
  	"[loadAddress] [[hostIPaddr:]bootfilename]"
8bde7f776   wdenk   * Code cleanup:
26
  );
d7a45eafd   Joe Hershberger   net: Make CMD_NET...
27
  #endif
8bde7f776   wdenk   * Code cleanup:
28

d7a45eafd   Joe Hershberger   net: Make CMD_NET...
29
  #ifdef CONFIG_CMD_TFTPBOOT
088f1b199   Kim Phillips   common/cmd_*.c: s...
30
  int do_tftpb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
3863585bb   wdenk   Initial revision
31
  {
573f14fe4   Simon Glass   bootstage: Plumb ...
32
33
34
35
36
37
  	int ret;
  
  	bootstage_mark_name(BOOTSTAGE_KERNELREAD_START, "tftp_start");
  	ret = netboot_common(TFTPGET, cmdtp, argc, argv);
  	bootstage_mark_name(BOOTSTAGE_KERNELREAD_STOP, "tftp_done");
  	return ret;
3863585bb   wdenk   Initial revision
38
  }
0d4983930   wdenk   Patch by Kenneth ...
39
40
  U_BOOT_CMD(
  	tftpboot,	3,	1,	do_tftpb,
2fb2604d5   Peter Tyser   Command usage cle...
41
  	"boot image via network using TFTP protocol",
a89c33db9   Wolfgang Denk   General help mess...
42
  	"[loadAddress] [[hostIPaddr:]bootfilename]"
8bde7f776   wdenk   * Code cleanup:
43
  );
d7a45eafd   Joe Hershberger   net: Make CMD_NET...
44
  #endif
8bde7f776   wdenk   * Code cleanup:
45

2d46cf291   Simon Glass   net: tftpput: add...
46
  #ifdef CONFIG_CMD_TFTPPUT
0c1b869b2   Masahiro Yamada   net: add static t...
47
  static int do_tftpput(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
2d46cf291   Simon Glass   net: tftpput: add...
48
  {
85848f037   Joe Hershberger   cmd: net: Clean u...
49
  	return netboot_common(TFTPPUT, cmdtp, argc, argv);
2d46cf291   Simon Glass   net: tftpput: add...
50
51
52
53
54
55
56
57
  }
  
  U_BOOT_CMD(
  	tftpput,	4,	1,	do_tftpput,
  	"TFTP put command, for uploading files to a server",
  	"Address Size [[hostIPaddr:]filename]"
  );
  #endif
7a83af07a   Luca Ceresoli   TFTP: add tftpsrv...
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  #ifdef CONFIG_CMD_TFTPSRV
  static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
  {
  	return netboot_common(TFTPSRV, cmdtp, argc, argv);
  }
  
  U_BOOT_CMD(
  	tftpsrv,	2,	1,	do_tftpsrv,
  	"act as a TFTP server and boot the first received file",
  	"[loadAddress]
  "
  	"Listen for an incoming TFTP transfer, receive a file and boot it.
  "
  	"The transfer is aborted if a transfer has not been started after
  "
  	"about 50 seconds or if Ctrl-C is pressed."
  );
  #endif
bf6cb247a   Peter Tyser   rarp: Condtionall...
76
  #ifdef CONFIG_CMD_RARP
088f1b199   Kim Phillips   common/cmd_*.c: s...
77
  int do_rarpb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
3863585bb   wdenk   Initial revision
78
  {
088f1b199   Kim Phillips   common/cmd_*.c: s...
79
  	return netboot_common(RARP, cmdtp, argc, argv);
3863585bb   wdenk   Initial revision
80
  }
0d4983930   wdenk   Patch by Kenneth ...
81
82
  U_BOOT_CMD(
  	rarpboot,	3,	1,	do_rarpb,
2fb2604d5   Peter Tyser   Command usage cle...
83
  	"boot image via network using RARP/TFTP protocol",
a89c33db9   Wolfgang Denk   General help mess...
84
  	"[loadAddress] [[hostIPaddr:]bootfilename]"
8bde7f776   wdenk   * Code cleanup:
85
  );
bf6cb247a   Peter Tyser   rarp: Condtionall...
86
  #endif
8bde7f776   wdenk   * Code cleanup:
87

c76fe4742   Jon Loeliger   common/cmd_[i-n]*...
88
  #if defined(CONFIG_CMD_DHCP)
088f1b199   Kim Phillips   common/cmd_*.c: s...
89
  static int do_dhcp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
3863585bb   wdenk   Initial revision
90
91
92
  {
  	return netboot_common(DHCP, cmdtp, argc, argv);
  }
8bde7f776   wdenk   * Code cleanup:
93

0d4983930   wdenk   Patch by Kenneth ...
94
95
  U_BOOT_CMD(
  	dhcp,	3,	1,	do_dhcp,
2fb2604d5   Peter Tyser   Command usage cle...
96
  	"boot image via network using DHCP/TFTP protocol",
a89c33db9   Wolfgang Denk   General help mess...
97
  	"[loadAddress] [[hostIPaddr:]bootfilename]"
8bde7f776   wdenk   * Code cleanup:
98
  );
902531788   Jon Loeliger   common/: Remove l...
99
  #endif
3863585bb   wdenk   Initial revision
100

c76fe4742   Jon Loeliger   common/cmd_[i-n]*...
101
  #if defined(CONFIG_CMD_NFS)
088f1b199   Kim Phillips   common/cmd_*.c: s...
102
  static int do_nfs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
cbd8a35c6   wdenk   * Patch by Masami...
103
104
105
106
107
108
  {
  	return netboot_common(NFS, cmdtp, argc, argv);
  }
  
  U_BOOT_CMD(
  	nfs,	3,	1,	do_nfs,
2fb2604d5   Peter Tyser   Command usage cle...
109
  	"boot image via network using NFS protocol",
a89c33db9   Wolfgang Denk   General help mess...
110
  	"[loadAddress] [[hostIPaddr:]bootfilename]"
cbd8a35c6   wdenk   * Patch by Masami...
111
  );
902531788   Jon Loeliger   common/: Remove l...
112
  #endif
cbd8a35c6   wdenk   * Patch by Masami...
113

088f1b199   Kim Phillips   common/cmd_*.c: s...
114
  static void netboot_update_env(void)
3863585bb   wdenk   Initial revision
115
  {
6e5923851   wdenk   * Cleanup, minor ...
116
  	char tmp[22];
3863585bb   wdenk   Initial revision
117

049a95a77   Joe Hershberger   net: cosmetic: Ch...
118
119
  	if (net_gateway.s_addr) {
  		ip_to_string(net_gateway, tmp);
382bee57f   Simon Glass   env: Rename seten...
120
  		env_set("gatewayip", tmp);
6e5923851   wdenk   * Cleanup, minor ...
121
  	}
3863585bb   wdenk   Initial revision
122

049a95a77   Joe Hershberger   net: cosmetic: Ch...
123
124
  	if (net_netmask.s_addr) {
  		ip_to_string(net_netmask, tmp);
382bee57f   Simon Glass   env: Rename seten...
125
  		env_set("netmask", tmp);
6e5923851   wdenk   * Cleanup, minor ...
126
  	}
3863585bb   wdenk   Initial revision
127

586cbe51a   Joe Hershberger   net: cosmetic: Fi...
128
  	if (net_hostname[0])
382bee57f   Simon Glass   env: Rename seten...
129
  		env_set("hostname", net_hostname);
3863585bb   wdenk   Initial revision
130

586cbe51a   Joe Hershberger   net: cosmetic: Fi...
131
  	if (net_root_path[0])
382bee57f   Simon Glass   env: Rename seten...
132
  		env_set("rootpath", net_root_path);
3863585bb   wdenk   Initial revision
133

049a95a77   Joe Hershberger   net: cosmetic: Ch...
134
135
  	if (net_ip.s_addr) {
  		ip_to_string(net_ip, tmp);
382bee57f   Simon Glass   env: Rename seten...
136
  		env_set("ipaddr", tmp);
6e5923851   wdenk   * Cleanup, minor ...
137
  	}
a3e1a727f   Joe Hershberger   net: Don't write ...
138
139
  #if !defined(CONFIG_BOOTP_SERVERIP)
  	/*
ff78ad284   Baruch Siach   cmd: net: fix fun...
140
  	 * Only attempt to change serverip if net/bootp.c:store_net_params()
a3e1a727f   Joe Hershberger   net: Don't write ...
141
142
  	 * could have set it
  	 */
049a95a77   Joe Hershberger   net: cosmetic: Ch...
143
144
  	if (net_server_ip.s_addr) {
  		ip_to_string(net_server_ip, tmp);
382bee57f   Simon Glass   env: Rename seten...
145
  		env_set("serverip", tmp);
6e5923851   wdenk   * Cleanup, minor ...
146
  	}
a3e1a727f   Joe Hershberger   net: Don't write ...
147
  #endif
049a95a77   Joe Hershberger   net: cosmetic: Ch...
148
149
  	if (net_dns_server.s_addr) {
  		ip_to_string(net_dns_server, tmp);
382bee57f   Simon Glass   env: Rename seten...
150
  		env_set("dnsip", tmp);
6e5923851   wdenk   * Cleanup, minor ...
151
  	}
1fe80d79c   Jon Loeliger   Finally retire cm...
152
  #if defined(CONFIG_BOOTP_DNS2)
049a95a77   Joe Hershberger   net: cosmetic: Ch...
153
154
  	if (net_dns_server2.s_addr) {
  		ip_to_string(net_dns_server2, tmp);
382bee57f   Simon Glass   env: Rename seten...
155
  		env_set("dnsip2", tmp);
6e5923851   wdenk   * Cleanup, minor ...
156
  	}
fe389a82c   stroese   - Added CONFIG_BO...
157
  #endif
586cbe51a   Joe Hershberger   net: cosmetic: Fi...
158
  	if (net_nis_domain[0])
382bee57f   Simon Glass   env: Rename seten...
159
  		env_set("domain", net_nis_domain);
ea287debe   wdenk   * Patch by Masami...
160

4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
161
  #if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_TIMEOFFSET)
bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
162
163
  	if (net_ntp_time_offset) {
  		sprintf(tmp, "%d", net_ntp_time_offset);
382bee57f   Simon Glass   env: Rename seten...
164
  		env_set("timeoffset", tmp);
ea287debe   wdenk   * Patch by Masami...
165
166
  	}
  #endif
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
167
  #if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER)
049a95a77   Joe Hershberger   net: cosmetic: Ch...
168
169
  	if (net_ntp_server.s_addr) {
  		ip_to_string(net_ntp_server, tmp);
382bee57f   Simon Glass   env: Rename seten...
170
  		env_set("ntpserverip", tmp);
ea287debe   wdenk   * Patch by Masami...
171
172
  	}
  #endif
3863585bb   wdenk   Initial revision
173
  }
6e5923851   wdenk   * Cleanup, minor ...
174

e4bf0c5cf   Simon Glass   net: tftpput: Ren...
175
176
  static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
  		char * const argv[])
3863585bb   wdenk   Initial revision
177
178
  {
  	char *s;
2e4970d81   Peter Tyser   net: Fix download...
179
  	char *end;
3863585bb   wdenk   Initial revision
180
181
  	int   rcode = 0;
  	int   size;
2e4970d81   Peter Tyser   net: Fix download...
182
  	ulong addr;
3863585bb   wdenk   Initial revision
183

449312c1c   Alexander Graf   net: Prefer comma...
184
  	net_boot_file_name_explicit = false;
bb872dd93   Simon Glass   image: Rename loa...
185
  	/* pre-set image_load_addr */
00caae6d4   Simon Glass   env: Rename geten...
186
  	s = env_get("loadaddr");
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
187
  	if (s != NULL)
bb872dd93   Simon Glass   image: Rename loa...
188
  		image_load_addr = simple_strtoul(s, NULL, 16);
3863585bb   wdenk   Initial revision
189
190
191
  
  	switch (argc) {
  	case 1:
f43308fa0   Joe Hershberger   net: Read bootfil...
192
193
194
  		/* refresh bootfile name from env */
  		copy_filename(net_boot_file_name, env_get("bootfile"),
  			      sizeof(net_boot_file_name));
3863585bb   wdenk   Initial revision
195
  		break;
2e4970d81   Peter Tyser   net: Fix download...
196
197
198
199
200
  	case 2:	/*
  		 * Only one arg - accept two forms:
  		 * Just load address, or just boot file name. The latter
  		 * form must be written in a format which can not be
  		 * mis-interpreted as a valid number.
3863585bb   wdenk   Initial revision
201
  		 */
2e4970d81   Peter Tyser   net: Fix download...
202
  		addr = simple_strtoul(argv[1], &end, 16);
449312c1c   Alexander Graf   net: Prefer comma...
203
  		if (end == (argv[1] + strlen(argv[1]))) {
bb872dd93   Simon Glass   image: Rename loa...
204
  			image_load_addr = addr;
f43308fa0   Joe Hershberger   net: Read bootfil...
205
206
207
  			/* refresh bootfile name from env */
  			copy_filename(net_boot_file_name, env_get("bootfile"),
  				      sizeof(net_boot_file_name));
449312c1c   Alexander Graf   net: Prefer comma...
208
209
  		} else {
  			net_boot_file_name_explicit = true;
1411157d8   Joe Hershberger   net: cosmetic: Fi...
210
211
  			copy_filename(net_boot_file_name, argv[1],
  				      sizeof(net_boot_file_name));
449312c1c   Alexander Graf   net: Prefer comma...
212
  		}
3863585bb   wdenk   Initial revision
213
  		break;
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
214
  	case 3:
bb872dd93   Simon Glass   image: Rename loa...
215
  		image_load_addr = simple_strtoul(argv[1], NULL, 16);
449312c1c   Alexander Graf   net: Prefer comma...
216
  		net_boot_file_name_explicit = true;
1411157d8   Joe Hershberger   net: cosmetic: Fi...
217
218
  		copy_filename(net_boot_file_name, argv[2],
  			      sizeof(net_boot_file_name));
3863585bb   wdenk   Initial revision
219
220
  
  		break;
2d46cf291   Simon Glass   net: tftpput: add...
221
222
  #ifdef CONFIG_CMD_TFTPPUT
  	case 4:
bb872dd93   Simon Glass   image: Rename loa...
223
224
  		if (strict_strtoul(argv[1], 16, &image_save_addr) < 0 ||
  		    strict_strtoul(argv[2], 16, &image_save_size) < 0) {
38bd80b48   Simon Glass   net: Fix argument...
225
226
  			printf("Invalid address/size
  ");
85848f037   Joe Hershberger   cmd: net: Clean u...
227
  			return CMD_RET_USAGE;
38bd80b48   Simon Glass   net: Fix argument...
228
  		}
449312c1c   Alexander Graf   net: Prefer comma...
229
  		net_boot_file_name_explicit = true;
1411157d8   Joe Hershberger   net: cosmetic: Fi...
230
231
  		copy_filename(net_boot_file_name, argv[3],
  			      sizeof(net_boot_file_name));
2d46cf291   Simon Glass   net: tftpput: add...
232
233
  		break;
  #endif
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
234
  	default:
770605e4f   Simon Glass   bootstage: Replac...
235
  		bootstage_error(BOOTSTAGE_ID_NET_START);
4c12eeb8b   Simon Glass   Convert cmd_usage...
236
  		return CMD_RET_USAGE;
3863585bb   wdenk   Initial revision
237
  	}
770605e4f   Simon Glass   bootstage: Replac...
238
  	bootstage_mark(BOOTSTAGE_ID_NET_START);
3863585bb   wdenk   Initial revision
239

bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
240
  	size = net_loop(proto);
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
241
  	if (size < 0) {
770605e4f   Simon Glass   bootstage: Replac...
242
  		bootstage_error(BOOTSTAGE_ID_NET_NETLOOP_OK);
85848f037   Joe Hershberger   cmd: net: Clean u...
243
  		return CMD_RET_FAILURE;
566a494f5   Heiko Schocher   [PCS440EP] u...
244
  	}
770605e4f   Simon Glass   bootstage: Replac...
245
  	bootstage_mark(BOOTSTAGE_ID_NET_NETLOOP_OK);
3863585bb   wdenk   Initial revision
246

bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
247
  	/* net_loop ok, update environment */
3863585bb   wdenk   Initial revision
248
  	netboot_update_env();
eb9401e3e   wdenk   * Patch by Andrea...
249
  	/* done if no file was loaded (no errors though) */
566a494f5   Heiko Schocher   [PCS440EP] u...
250
  	if (size == 0) {
770605e4f   Simon Glass   bootstage: Replac...
251
  		bootstage_error(BOOTSTAGE_ID_NET_LOADED);
85848f037   Joe Hershberger   cmd: net: Clean u...
252
  		return CMD_RET_SUCCESS;
566a494f5   Heiko Schocher   [PCS440EP] u...
253
  	}
eb9401e3e   wdenk   * Patch by Andrea...
254

770605e4f   Simon Glass   bootstage: Replac...
255
  	bootstage_mark(BOOTSTAGE_ID_NET_LOADED);
c8e66db78   Simon Glass   bootstage: Conver...
256

67d668bf9   Mike Frysinger   autostart: unify ...
257
  	rcode = bootm_maybe_autostart(cmdtp, argv[0]);
3863585bb   wdenk   Initial revision
258

85848f037   Joe Hershberger   cmd: net: Clean u...
259
  	if (rcode == CMD_RET_SUCCESS)
770605e4f   Simon Glass   bootstage: Replac...
260
  		bootstage_mark(BOOTSTAGE_ID_NET_DONE);
85848f037   Joe Hershberger   cmd: net: Clean u...
261
262
  	else
  		bootstage_error(BOOTSTAGE_ID_NET_DONE_ERR);
3863585bb   wdenk   Initial revision
263
264
  	return rcode;
  }
c76fe4742   Jon Loeliger   common/cmd_[i-n]*...
265
  #if defined(CONFIG_CMD_PING)
088f1b199   Kim Phillips   common/cmd_*.c: s...
266
  static int do_ping(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
73a8b27c5   wdenk   * Add support for...
267
268
  {
  	if (argc < 2)
85848f037   Joe Hershberger   cmd: net: Clean u...
269
  		return CMD_RET_USAGE;
73a8b27c5   wdenk   * Add support for...
270

049a95a77   Joe Hershberger   net: cosmetic: Ch...
271
272
  	net_ping_ip = string_to_ip(argv[1]);
  	if (net_ping_ip.s_addr == 0)
4c12eeb8b   Simon Glass   Convert cmd_usage...
273
  		return CMD_RET_USAGE;
73a8b27c5   wdenk   * Add support for...
274

bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
275
  	if (net_loop(PING) < 0) {
73a8b27c5   wdenk   * Add support for...
276
277
  		printf("ping failed; host %s is not alive
  ", argv[1]);
85848f037   Joe Hershberger   cmd: net: Clean u...
278
  		return CMD_RET_FAILURE;
73a8b27c5   wdenk   * Add support for...
279
280
281
282
  	}
  
  	printf("host %s is alive
  ", argv[1]);
85848f037   Joe Hershberger   cmd: net: Clean u...
283
  	return CMD_RET_SUCCESS;
73a8b27c5   wdenk   * Add support for...
284
  }
6dff55297   wdenk   * Patches by Mart...
285
286
287
  
  U_BOOT_CMD(
  	ping,	2,	1,	do_ping,
2fb2604d5   Peter Tyser   Command usage cle...
288
  	"send ICMP ECHO_REQUEST to network host",
a89c33db9   Wolfgang Denk   General help mess...
289
  	"pingAddress"
6dff55297   wdenk   * Patches by Mart...
290
  );
902531788   Jon Loeliger   common/: Remove l...
291
  #endif
73a8b27c5   wdenk   * Add support for...
292

c76fe4742   Jon Loeliger   common/cmd_[i-n]*...
293
  #if defined(CONFIG_CMD_CDP)
a3d991bd0   wdenk   Patches by Pantel...
294
295
296
297
  
  static void cdp_update_env(void)
  {
  	char tmp[16];
6aede5b75   Joe Hershberger   net: cosmetic: Cl...
298
299
300
301
  	if (cdp_appliance_vlan != htons(-1)) {
  		printf("CDP offered appliance VLAN %d
  ",
  		       ntohs(cdp_appliance_vlan));
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
302
  		vlan_to_string(cdp_appliance_vlan, tmp);
382bee57f   Simon Glass   env: Rename seten...
303
  		env_set("vlan", tmp);
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
304
  		net_our_vlan = cdp_appliance_vlan;
a3d991bd0   wdenk   Patches by Pantel...
305
  	}
6aede5b75   Joe Hershberger   net: cosmetic: Cl...
306
307
308
  	if (cdp_native_vlan != htons(-1)) {
  		printf("CDP offered native VLAN %d
  ", ntohs(cdp_native_vlan));
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
309
  		vlan_to_string(cdp_native_vlan, tmp);
382bee57f   Simon Glass   env: Rename seten...
310
  		env_set("nvlan", tmp);
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
311
  		net_native_vlan = cdp_native_vlan;
a3d991bd0   wdenk   Patches by Pantel...
312
  	}
a3d991bd0   wdenk   Patches by Pantel...
313
  }
088f1b199   Kim Phillips   common/cmd_*.c: s...
314
  int do_cdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
a3d991bd0   wdenk   Patches by Pantel...
315
316
  {
  	int r;
bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
317
  	r = net_loop(CDP);
a3d991bd0   wdenk   Patches by Pantel...
318
319
320
  	if (r < 0) {
  		printf("cdp failed; perhaps not a CISCO switch?
  ");
85848f037   Joe Hershberger   cmd: net: Clean u...
321
  		return CMD_RET_FAILURE;
a3d991bd0   wdenk   Patches by Pantel...
322
323
324
  	}
  
  	cdp_update_env();
85848f037   Joe Hershberger   cmd: net: Clean u...
325
  	return CMD_RET_SUCCESS;
a3d991bd0   wdenk   Patches by Pantel...
326
327
328
329
  }
  
  U_BOOT_CMD(
  	cdp,	1,	1,	do_cdp,
ec5c04cdb   Wolfgang Denk   Revert "cmd_net: ...
330
  	"Perform CDP network configuration",
4b58266e9   Wolfgang Denk   cmd_net.c: fix bu...
331
332
  	"
  "
a3d991bd0   wdenk   Patches by Pantel...
333
  );
902531788   Jon Loeliger   common/: Remove l...
334
  #endif
a3d991bd0   wdenk   Patches by Pantel...
335

c76fe4742   Jon Loeliger   common/cmd_[i-n]*...
336
  #if defined(CONFIG_CMD_SNTP)
088f1b199   Kim Phillips   common/cmd_*.c: s...
337
  int do_sntp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
ea287debe   wdenk   * Patch by Masami...
338
339
340
341
  {
  	char *toff;
  
  	if (argc < 2) {
723806cc5   Simon Glass   env: Rename some ...
342
  		net_ntp_server = env_get_ip("ntpserverip");
049a95a77   Joe Hershberger   net: cosmetic: Ch...
343
  		if (net_ntp_server.s_addr == 0) {
088f1b199   Kim Phillips   common/cmd_*.c: s...
344
345
  			printf("ntpserverip not set
  ");
85848f037   Joe Hershberger   cmd: net: Clean u...
346
  			return CMD_RET_FAILURE;
ea287debe   wdenk   * Patch by Masami...
347
348
  		}
  	} else {
049a95a77   Joe Hershberger   net: cosmetic: Ch...
349
350
  		net_ntp_server = string_to_ip(argv[1]);
  		if (net_ntp_server.s_addr == 0) {
088f1b199   Kim Phillips   common/cmd_*.c: s...
351
352
  			printf("Bad NTP server IP address
  ");
85848f037   Joe Hershberger   cmd: net: Clean u...
353
  			return CMD_RET_FAILURE;
ea287debe   wdenk   * Patch by Masami...
354
355
  		}
  	}
00caae6d4   Simon Glass   env: Rename geten...
356
  	toff = env_get("timeoffset");
088f1b199   Kim Phillips   common/cmd_*.c: s...
357
  	if (toff == NULL)
bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
358
  		net_ntp_time_offset = 0;
088f1b199   Kim Phillips   common/cmd_*.c: s...
359
  	else
bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
360
  		net_ntp_time_offset = simple_strtol(toff, NULL, 10);
ea287debe   wdenk   * Patch by Masami...
361

bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
362
  	if (net_loop(SNTP) < 0) {
d6840e3d7   Luuk Paulussen   sntp: avoid use o...
363
364
  		printf("SNTP failed: host %pI4 not responding
  ",
4fd5055f5   Joe Hershberger   net: cosmetic: Cl...
365
  		       &net_ntp_server);
85848f037   Joe Hershberger   cmd: net: Clean u...
366
  		return CMD_RET_FAILURE;
ea287debe   wdenk   * Patch by Masami...
367
  	}
85848f037   Joe Hershberger   cmd: net: Clean u...
368
  	return CMD_RET_SUCCESS;
ea287debe   wdenk   * Patch by Masami...
369
370
371
372
  }
  
  U_BOOT_CMD(
  	sntp,	2,	1,	do_sntp,
2fb2604d5   Peter Tyser   Command usage cle...
373
  	"synchronize RTC via network",
ea287debe   wdenk   * Patch by Masami...
374
375
376
  	"[NTP server IP]
  "
  );
902531788   Jon Loeliger   common/: Remove l...
377
  #endif
1a32bf418   Robin Getz   Add DNS support
378
379
  
  #if defined(CONFIG_CMD_DNS)
54841ab50   Wolfgang Denk   Make sure that ar...
380
  int do_dns(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
1a32bf418   Robin Getz   Add DNS support
381
  {
47e26b1bf   Wolfgang Denk   cmd_usage(): simp...
382
  	if (argc == 1)
4c12eeb8b   Simon Glass   Convert cmd_usage...
383
  		return CMD_RET_USAGE;
1a32bf418   Robin Getz   Add DNS support
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
  
  	/*
  	 * 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
  ");
85848f037   Joe Hershberger   cmd: net: Clean u...
400
  		return CMD_RET_FAILURE;
1a32bf418   Robin Getz   Add DNS support
401
  	}
786eac5f9   Joe Hershberger   net: cosmetic: Cl...
402
  	net_dns_resolve = argv[1];
1a32bf418   Robin Getz   Add DNS support
403
404
  
  	if (argc == 3)
786eac5f9   Joe Hershberger   net: cosmetic: Cl...
405
  		net_dns_env_var = argv[2];
1a32bf418   Robin Getz   Add DNS support
406
  	else
786eac5f9   Joe Hershberger   net: cosmetic: Cl...
407
  		net_dns_env_var = NULL;
1a32bf418   Robin Getz   Add DNS support
408

bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
409
  	if (net_loop(DNS) < 0) {
1a32bf418   Robin Getz   Add DNS support
410
411
  		printf("dns lookup of %s failed, check setup
  ", argv[1]);
85848f037   Joe Hershberger   cmd: net: Clean u...
412
  		return CMD_RET_FAILURE;
1a32bf418   Robin Getz   Add DNS support
413
  	}
85848f037   Joe Hershberger   cmd: net: Clean u...
414
  	return CMD_RET_SUCCESS;
1a32bf418   Robin Getz   Add DNS support
415
416
417
418
419
420
421
422
423
  }
  
  U_BOOT_CMD(
  	dns,	3,	1,	do_dns,
  	"lookup the IP of a hostname",
  	"hostname [envvar]"
  );
  
  #endif	/* CONFIG_CMD_DNS */
d22c338e0   Joe Hershberger   net: Add link-loc...
424
425
426
427
428
429
  
  #if defined(CONFIG_CMD_LINK_LOCAL)
  static int do_link_local(cmd_tbl_t *cmdtp, int flag, int argc,
  			char * const argv[])
  {
  	char tmp[22];
bc0571fc1   Joe Hershberger   net: cosmetic: Fi...
430
  	if (net_loop(LINKLOCAL) < 0)
85848f037   Joe Hershberger   cmd: net: Clean u...
431
  		return CMD_RET_FAILURE;
d22c338e0   Joe Hershberger   net: Add link-loc...
432

049a95a77   Joe Hershberger   net: cosmetic: Ch...
433
434
  	net_gateway.s_addr = 0;
  	ip_to_string(net_gateway, tmp);
382bee57f   Simon Glass   env: Rename seten...
435
  	env_set("gatewayip", tmp);
d22c338e0   Joe Hershberger   net: Add link-loc...
436

049a95a77   Joe Hershberger   net: cosmetic: Ch...
437
  	ip_to_string(net_netmask, tmp);
382bee57f   Simon Glass   env: Rename seten...
438
  	env_set("netmask", tmp);
d22c338e0   Joe Hershberger   net: Add link-loc...
439

049a95a77   Joe Hershberger   net: cosmetic: Ch...
440
  	ip_to_string(net_ip, tmp);
382bee57f   Simon Glass   env: Rename seten...
441
442
  	env_set("ipaddr", tmp);
  	env_set("llipaddr", tmp); /* store this for next time */
d22c338e0   Joe Hershberger   net: Add link-loc...
443

85848f037   Joe Hershberger   cmd: net: Clean u...
444
  	return CMD_RET_SUCCESS;
d22c338e0   Joe Hershberger   net: Add link-loc...
445
446
447
448
449
450
451
452
453
  }
  
  U_BOOT_CMD(
  	linklocal,	1,	1,	do_link_local,
  	"acquire a network IP address using the link-local protocol",
  	""
  );
  
  #endif  /* CONFIG_CMD_LINK_LOCAL */