xref: /openbmc/u-boot/doc/README.link-local (revision b939689c7b87773c44275a578ffc8674a867e39d)
1d22c338eSJoe Hershberger------------------------------------------
2d22c338eSJoe Hershberger Link-local IP address auto-configuration
3d22c338eSJoe Hershberger------------------------------------------
4d22c338eSJoe Hershberger
5d22c338eSJoe HershbergerNegotiate with other link-local clients on the local network
6d22c338eSJoe Hershbergerfor an address that doesn't require explicit configuration.
7d22c338eSJoe HershbergerThis is especially useful if a DHCP server cannot be guaranteed
8d22c338eSJoe Hershbergerto exist in all environments that the device must operate.
9d22c338eSJoe Hershberger
10d22c338eSJoe HershbergerThis is an implementation of RFC3927.
11d22c338eSJoe Hershberger
12d22c338eSJoe Hershberger----------
13d22c338eSJoe Hershberger Commands
14d22c338eSJoe Hershberger----------
15d22c338eSJoe Hershberger
16d22c338eSJoe HershbergerWhen CONFIG_CMD_LINK_LOCAL is defined in the board config file,
17d22c338eSJoe Hershbergerthe "linklocal" command is available.  This running this will
18d22c338eSJoe Hershbergertake approximately 5 seconds while the address is negotiated.
19d22c338eSJoe Hershberger
20d22c338eSJoe Hershberger------------------------
21d22c338eSJoe Hershberger Environment interation
22d22c338eSJoe Hershberger------------------------
23d22c338eSJoe Hershberger
24d22c338eSJoe HershbergerThe "llipaddr" variable is set with the most recently
25d22c338eSJoe Hershbergernegotiated address and is preferred in future negotiations.
26d22c338eSJoe Hershberger
27d22c338eSJoe HershbergerThe "ipaddr", "netmask", and "gatewayip" variables are set
28d22c338eSJoe Hershbergerafter successful negotiation to enable network access.
29d22c338eSJoe Hershberger
30d22c338eSJoe Hershberger-------------
31d22c338eSJoe Hershberger Limitations
32d22c338eSJoe Hershberger-------------
33d22c338eSJoe Hershberger
34d22c338eSJoe HershbergerRFC3927 requires that addresses are continuously checked to
35*bc0571fcSJoe Hershbergeravoid conflicts, however this can only happen when the net_loop
36d22c338eSJoe Hershbergeris getting called.  It is possible for a conflict to go undetected
37d22c338eSJoe Hershbergeruntil a command that accesses the network is executed.
38d22c338eSJoe Hershberger
39*bc0571fcSJoe HershbergerUsing NetConsole is one way to ensure that net_loop is always
40d22c338eSJoe Hershbergerprocessing packets and monitoring for conflicts.
41d22c338eSJoe Hershberger
42d22c338eSJoe HershbergerThis is also not a concern if the feature is use to connect
43d22c338eSJoe Hershbergerdirectly to another machine that may not be running a DHCP server.
44d22c338eSJoe Hershberger
45d22c338eSJoe Hershberger----------------
46d22c338eSJoe Hershberger Example script
47d22c338eSJoe Hershberger----------------
48d22c338eSJoe Hershberger
49d22c338eSJoe HershbergerThis script allows use of DHCP and/or Link-local controlled
50d22c338eSJoe Hershbergerby env variables.  It depends on CONFIG_CMD_LINK_LOCAL, CONFIG_CMD_DHCP,
51d22c338eSJoe Hershbergerand CONFIG_BOOTP_MAY_FAIL.
52d22c338eSJoe HershbergerIf both fail or are disabled, static settings are used.
53d22c338eSJoe Hershberger
54d22c338eSJoe Hershberger#define CONFIG_EXTRA_ENV_SETTINGS \
55d22c338eSJoe Hershberger	"ipconfigcmd=if test \\\"$dhcpenabled\\\" -ne 0;"		\
56d22c338eSJoe Hershberger		"then "							\
57d22c338eSJoe Hershberger			"dhcpfail=0;dhcp || dhcpfail=1;"		\
58d22c338eSJoe Hershberger		"else "							\
59d22c338eSJoe Hershberger			"dhcpfail=-1;"					\
60d22c338eSJoe Hershberger		"fi;"							\
61d22c338eSJoe Hershberger		"if test \\\"$linklocalenabled\\\" -ne 0 -a "		\
62d22c338eSJoe Hershberger			"\\\"$dhcpfail\\\" -ne 0;"			\
63d22c338eSJoe Hershberger		"then "							\
64d22c338eSJoe Hershberger			"linklocal;"					\
65d22c338eSJoe Hershberger			"llfail=0;"					\
66d22c338eSJoe Hershberger		"else "							\
67d22c338eSJoe Hershberger			"llfail=-1;"					\
68d22c338eSJoe Hershberger		"fi;"							\
69d22c338eSJoe Hershberger		"if test \\\"$llfail\\\" -ne 0 -a "			\
70d22c338eSJoe Hershberger			"\\\"$dhcpfail\\\" -ne 0; "			\
71d22c338eSJoe Hershberger		"then "							\
72d22c338eSJoe Hershberger			"setenv ipaddr $sipaddr; "			\
73d22c338eSJoe Hershberger			"setenv netmask $snetmask; "			\
74d22c338eSJoe Hershberger			"setenv gatewayip $sgatewayip; "		\
75d22c338eSJoe Hershberger		"fi;\0"							\
76