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