Current status
Features
- Automatic link-local addresses
- Manual addresses
- Automatic global address
- Gateway/DNS for other hosts (IPv4 only)
Feature dependencies
- IPv6: Automatic global address needs link-local address
- Gateway needs a manual address (at least a default one), conflicts with dynamic address
IPv4/IPv6 methods
Method
|
Protocol
|
Link-local
|
Manual
|
Automatic
|
Gateway
|
disabled |
IPv4 |
none |
forbidden |
none |
none
|
ignore |
IPv6 |
kernel |
forbidden |
kernel |
none
|
link-local |
IPv4 |
userspace |
forbidden |
none |
none
|
link-local |
IPv6 |
kernel |
forbidden |
none |
none
|
manual |
IPv4 |
none |
required |
none |
none
|
manual |
IPv6 |
kernel |
required |
none |
none
|
auto |
IPv4 |
none |
allowed |
dhcp |
none
|
auto |
IPv6 |
kernel |
allowed |
ra+dhcp |
none
|
dhcp |
IPv6 |
kernel |
allowed |
dhcp |
none
|
shared |
IPv4 |
none |
? |
none |
dhcp+dns+NAT
|
Notes
- Even when IPv4 is in the disabled state, the network interface communicates on the L2 level.
- There's no disable method for IPv6 and its semantics is unclear (whether disable means the same as link-local, or it also applies to the link-local address which is unaffected in all other methods).
- The usage of IPv4 and IPv6 link-local addresses substatially differs. While IPv6 uses link-local addresses for *all* methods, IPv4 only uses it for the special link-local method.
- The IPv4 disable and IPv4/manual methods only differ in the number of addresses (0 versus >=1), therefore one of them is redundant.
- The IPv6 link-local and IPv6/manual methods only differ in the number of addresses (0 versus >=1), therefore one of them is redundant.
- The IPv6 dhcp method is currently defunct.
- There's no IPv6 shared method, yet.
Feature combinations
L |
M |
A |
G |
IPv4 |
IPv6 |
notes
|
no |
no |
no |
no |
disabled |
unsupported |
kernel's disable_ipv6 buggy
|
no |
no |
no |
yes |
invalid |
invalid |
missing manual address
|
no |
no |
yes |
no |
auto |
invalid |
missing IPv6 link-local address
|
no |
no |
yes |
yes |
invalid |
invalid |
missing manual address
|
no |
yes |
no |
no |
method=manual |
unsupported |
missing kernel feature
|
no |
yes |
no |
yes |
method=shared |
unsupported |
missing kernel feature
|
no |
yes |
yes |
no |
method=auto |
unsupported |
missing kernel feature
|
no |
yes |
yes |
yes |
invalid |
invalid |
both sides of dynamic configuration
|
yes |
no |
no |
no |
method=link-local |
method=link-local |
|
yes |
no |
no |
yes |
invalid |
invalid |
missing manual address
|
yes |
no |
yes |
no |
unsupported |
method=auto |
|
yes |
no |
yes |
yes |
invalid |
invalid |
missing manual address
|
yes |
yes |
no |
no |
unsupported |
method=manual |
|
yes |
yes |
no |
yes |
method=shared |
unsupported |
|
yes |
yes |
yes |
no |
unsupported |
method=auto |
|
yes |
yes |
yes |
yes |
invalid |
invalid |
both sides of dynamic configuration
|
- L: Automatic link-local addresses
- M: Manual addresses
- A: Automatic global address
- G: Gateway/DNS for other hosts
Notes
- There's a bug in the kernel (found by Dan Winship) that once setting IFF_UP with disable_ipv6=1 affects future state. But we shouldn't need disable_ipv6 just as we don't need disable_ipv4, see the next note.
- Kernel doesn't support turning link-local addressing on/off (without affecting other features).
Proposal
Use one configuration directives per feature whenever possible, use multiple configuration directives per feature where further tweaking is needed.
Configuration directives
name |
value |
meaning
|
link-local |
enabled |
configure LL address as soon as possible
|
|
fallback |
configure a LL address when other configuration methods failed
|
|
disabled |
default for IPv4
|
|
undefined |
default for IPv6, use system default
|
rdisc |
enabled |
default, IPv6 only
|
|
disabled |
skip directly to DHCP (if enabled)
|
dhcp |
enabled |
default
|
|
disabled |
never use DHCP, only useful for IPv6
|
sharing |
enabled |
provide sharing facilities
|
|
disabled |
default
|
Notes
- Manual address configuration would be turned on by configuring at least one manual address.
Consequences on IPv6 configuration
LL |
RD |
DHCP |
current status |
notes
|
no |
no |
no |
unsupported |
|
no |
no |
yes |
invalid |
|
no |
yes |
no |
invalid |
|
no |
yes |
yes |
invalid |
|
yes |
no |
no |
method=link-local/manual |
link-local
|
yes |
no |
yes |
broken |
link-local and DHCPv6 (without rdisc)
|
yes |
yes |
no |
unsupported |
link-local and rdisc only
|
yes |
yes |
yes |
method=auto |
link-local and rdisc, DHCPv6 if requested by router
|
Notes
- For any valid combination of the above directives, you can optionally add one or more manually specified addresses.
- The DHCP only method is not properly implemented and it never worked.
Consequences on IPv4 configuration
LL |
RD |
DHCP |
current status |
notes
|
no |
no |
method=disabled/manual |
|
no |
yes |
method=auto |
classic DHCP configuration
|
yes |
no |
unsupported |
link-local method doesn't allow manual addresses
|
yes |
yes |
unsupported |
immediate link-local, follow-up DHCP
|
fallback |
no |
method=manual/link-local |
not so useful
|
fallback |
yes |
unsupported |
DHCP with fallback to link-local}
|