mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
Fix several logic bugs in the previous IPv6 variable change and
re-add $ipv6_enable support for backward compatibility. From UPDATING: 1. To use IPv6, simply define $ifconfig_IF_ipv6 like $ifconfig_IF for IPv4. For aliases, $ifconfig_IF_aliasN should be used. Note that both variables need the "inet6" keyword at the head. Do not set $ipv6_network_interfaces manually if you do not understand what you are doing. It is not needed in most cases. $ipv6_ifconfig_IF and $ipv6_ifconfig_IF_aliasN still work, but they are obsolete. 2. $ipv6_enable is obsolete. Use $ipv6_prefer and/or "inet6 accept_rtadv" keyword in ifconfig(8) instead. If you define $ipv6_enable=YES, it means $ipv6_prefer=YES and all configured interfaces have "inet6 accept_rtadv" in the $ifconfig_IF_ipv6. These are for backward compatibility. 3. A new variable $ipv6_prefer has been added. If NO, IPv6 functionality of interfaces with no corresponding $ifconfig_IF_ipv6 is disabled by using "inet6 ifdisabled" flag, and the default address selection policy of ip6addrctl(8) is the IPv4-preferred one (see rc.d/ip6addrctl for more details). Note that if you want to configure IPv6 functionality on the disabled interfaces after boot, first you need to clear the flag by using ifconfig(8) like: ifconfig em0 inet6 -ifdisabled If YES, the default address selection policy is set as IPv6-preferred. The default value of $ipv6_prefer is NO. 4. If your system need to receive Router Advertisement messages, define "inet6 accept_rtadv" in $ifconfig_IF_ipv6. The rc(8) scripts automatically invoke rtsol(8) when the interface becomes UP. The Router Advertisement messages are used for SLAAC (State-Less Address AutoConfiguration).
This commit is contained in:
parent
5ff124a953
commit
2e77c5abfb
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=197526
51
UPDATING
51
UPDATING
|
@ -22,10 +22,61 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9.x IS SLOW:
|
|||
machines to maximize performance. (To disable malloc debugging, run
|
||||
ln -s aj /etc/malloc.conf.)
|
||||
|
||||
20090926:
|
||||
The rc.d/network_ipv6, IPv6 configuration script has been integrated
|
||||
into rc.d/netif. The changes are the following:
|
||||
|
||||
1. To use IPv6, simply define $ifconfig_IF_ipv6 like $ifconfig_IF
|
||||
for IPv4. For aliases, $ifconfig_IF_aliasN should be used.
|
||||
Note that both variables need the "inet6" keyword at the head.
|
||||
|
||||
Do not set $ipv6_network_interfaces manually if you do not
|
||||
understand what you are doing. It is not needed in most cases.
|
||||
|
||||
$ipv6_ifconfig_IF and $ipv6_ifconfig_IF_aliasN still work, but
|
||||
they are obsolete.
|
||||
|
||||
2. $ipv6_enable is obsolete. Use $ipv6_prefer and
|
||||
"inet6 accept_rtadv" keyword in ifconfig(8) instead.
|
||||
|
||||
If you define $ipv6_enable=YES, it means $ipv6_prefer=YES and
|
||||
all configured interfaces have "inet6 accept_rtadv" in the
|
||||
$ifconfig_IF_ipv6. These are for backward compatibility.
|
||||
|
||||
3. A new variable $ipv6_prefer has been added. If NO, IPv6
|
||||
functionality of interfaces with no corresponding
|
||||
$ifconfig_IF_ipv6 is disabled by using "inet6 ifdisabled" flag,
|
||||
and the default address selection policy of ip6addrctl(8)
|
||||
is the IPv4-preferred one (see rc.d/ip6addrctl for more details).
|
||||
Note that if you want to configure IPv6 functionality on the
|
||||
disabled interfaces after boot, first you need to clear the flag by
|
||||
using ifconfig(8) like:
|
||||
|
||||
ifconfig em0 inet6 -ifdisabled
|
||||
|
||||
If YES, the default address selection policy is set as
|
||||
IPv6-preferred.
|
||||
|
||||
The default value of $ipv6_prefer is NO.
|
||||
|
||||
4. If your system need to receive Router Advertisement messages,
|
||||
define "inet6 accept_rtadv" in $ifconfig_IF_ipv6. The rc(8)
|
||||
scripts automatically invoke rtsol(8) when the interface becomes
|
||||
UP. The Router Advertisement messages are used for SLAAC
|
||||
(State-Less Address AutoConfiguration).
|
||||
|
||||
20090922:
|
||||
802.11s D3.03 support was committed. This is incompatible with the
|
||||
previous code, which was based on D3.0.
|
||||
|
||||
20090912:
|
||||
A sysctl variable net.inet6.ip6.accept_rtadv now sets the default value
|
||||
of a per-interface flag ND6_IFF_ACCEPT_RTADV, not a global knob to
|
||||
control whether accepting Router Advertisement messages or not.
|
||||
Also, a per-interface flag ND6_IFF_AUTO_LINKLOCAL has been added and
|
||||
a sysctl variable net.inet6.ip6.auto_linklocal is its default value.
|
||||
The ifconfig(8) utility now supports these flags.
|
||||
|
||||
20090910:
|
||||
ZFS snapshots are now mounted with MNT_IGNORE flag. Use -v option for
|
||||
mount(8) and -a option for df(1) to see them.
|
||||
|
|
|
@ -97,15 +97,26 @@ ifconfig_up()
|
|||
if afexists inet6; then
|
||||
if ipv6if $1; then
|
||||
if checkyesno ipv6_gateway_enable; then
|
||||
_ipv6_opts="-accept_rtadv auto_linklocal"
|
||||
else
|
||||
_ipv6_opts="auto_linklocal"
|
||||
_ipv6_opts="-accept_rtadv"
|
||||
fi
|
||||
else
|
||||
_ipv6_opts="-auto_linklocal ifdisabled"
|
||||
if checkyesno ipv6_prefer; then
|
||||
_ipv6_opts="-ifdisabled"
|
||||
else
|
||||
_ipv6_opts="ifdisabled"
|
||||
fi
|
||||
|
||||
# backward compatibility: $ipv6_enable
|
||||
case $ipv6_enable in
|
||||
[Yy][Ee][Ss])
|
||||
_ipv6_opts="${_ipv6_opts} accept_rtadv"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
ifconfig $1 inet6 ${_ipv6_opts}
|
||||
if [ -n "${_ipv6_opts}" ]; then
|
||||
ifconfig $1 inet6 ${_ipv6_opts}
|
||||
fi
|
||||
|
||||
# ifconfig_IF_ipv6
|
||||
ifconfig_args=`ifconfig_getargs $1 ipv6`
|
||||
|
@ -382,7 +393,7 @@ noafif()
|
|||
# 1 otherwise.
|
||||
ipv6if()
|
||||
{
|
||||
local _if i
|
||||
local _if _tmpargs i
|
||||
_if=$1
|
||||
|
||||
if ! afexists inet6; then
|
||||
|
@ -396,6 +407,18 @@ ipv6if()
|
|||
;;
|
||||
esac
|
||||
|
||||
# True if $ifconfig_IF_ipv6 is defined.
|
||||
_tmpargs=`_ifconfig_getargs $_if ipv6`
|
||||
if [ -n "${_tmpargs}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# backward compatibility: True if $ipv6_ifconfig_IF is defined.
|
||||
_tmpargs=`get_if_var $_if ipv6_ifconfig_IF`
|
||||
if [ -n "${_tmpargs}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case "${ipv6_network_interfaces}" in
|
||||
[Aa][Uu][Tt][Oo])
|
||||
return 0
|
||||
|
@ -431,17 +454,30 @@ ipv6_autoconfif()
|
|||
if checkyesno ipv6_gateway_enable; then
|
||||
return 1
|
||||
fi
|
||||
_tmpargs=`get_if_var $_if ipv6_prefix_IF`
|
||||
if [ -n "${_tmpargs}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
case $_if in
|
||||
lo0|\
|
||||
stf[0-9]*|\
|
||||
faith[0-9]*|\
|
||||
lp[0-9]*|\
|
||||
sl[0-9]*)
|
||||
sl[0-9]*|\
|
||||
pflog[0-9]*|\
|
||||
pfsync[0-9]*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# backward compatibility: $ipv6_enable
|
||||
case $ipv6_enable in
|
||||
[Yy][Ee][Ss])
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
_tmpargs=`_ifconfig_getargs $_if ipv6`
|
||||
for _arg in $_tmpargs; do
|
||||
case $_arg in
|
||||
|
@ -451,6 +487,16 @@ ipv6_autoconfif()
|
|||
esac
|
||||
done
|
||||
|
||||
# backward compatibility: $ipv6_ifconfig_IF
|
||||
_tmpargs=`get_if_var $_if ipv6_ifconfig_IF`
|
||||
for _arg in $_tmpargs; do
|
||||
case $_arg in
|
||||
accept_rtadv)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
|
@ -691,7 +737,7 @@ ifalias_ipv6_up()
|
|||
;;
|
||||
*)
|
||||
ifconfig $1 inet6 ${ifconfig_args} alias && _ret=0
|
||||
warn "\$ipv6_ifconfig_$1_alias${alias} is obsolete."
|
||||
warn "\$ipv6_ifconfig_$1_alias${alias} is obsolete." \
|
||||
" Use ifconfig_$1_aliasN instead."
|
||||
;;
|
||||
esac
|
||||
|
@ -773,6 +819,7 @@ ifalias_ipv6_down()
|
|||
done
|
||||
|
||||
# backward compatibility: ipv6_ifconfig_IF_aliasN.
|
||||
alias=0
|
||||
while : ; do
|
||||
ifconfig_args=`get_if_var $1 ipv6_ifconfig_IF_alias${alias}`
|
||||
case "${ifconfig_args}" in
|
||||
|
@ -780,13 +827,12 @@ ifalias_ipv6_down()
|
|||
break
|
||||
;;
|
||||
*)
|
||||
ifconfig $1 inet6 ${ifconfig_args} -alias
|
||||
alias=$((${alias} + 1))
|
||||
warn "\$ipv6_ifconfig_$1_alias${alias} is obsolete."
|
||||
ifconfig $1 inet6 ${ifconfig_args} -alias && _ret=0
|
||||
warn "\$ipv6_ifconfig_$1_alias${alias} is obsolete." \
|
||||
" Use ifconfig_$1_aliasN instead."
|
||||
_ret=0
|
||||
;;
|
||||
esac
|
||||
alias=$((${alias} + 1))
|
||||
done
|
||||
|
||||
return $_ret
|
||||
|
|
|
@ -19,6 +19,8 @@ status_cmd="ip6addrctl"
|
|||
prefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
|
||||
prefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
|
||||
|
||||
set_rcvar_obsolete ipv6_enable ipv6_prefer
|
||||
|
||||
ip6addrctl_prefer_ipv6()
|
||||
{
|
||||
ip6addrctl flush >/dev/null 2>&1
|
||||
|
|
|
@ -41,7 +41,7 @@ clonedown_cmd="clone_down"
|
|||
extra_commands="cloneup clonedown"
|
||||
cmdifn=
|
||||
|
||||
set_rcvar_obsolete ipv6_enable
|
||||
set_rcvar_obsolete ipv6_enable ipv6_prefer
|
||||
|
||||
network_start()
|
||||
{
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
.\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 2, 2009
|
||||
.Dd September 23, 2009
|
||||
.Dt IFCONFIG 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -598,7 +598,10 @@ If the interface was reset when previously marked down,
|
|||
the hardware will be re-initialized.
|
||||
.El
|
||||
.Pp
|
||||
The following parameters are for ICMPv6 Neightbor Discovery Protocol:
|
||||
The following parameters are for ICMPv6 Neightbor Discovery Protocol.
|
||||
Note that the address family keyword
|
||||
.Dq Li inet6
|
||||
is needed for them:
|
||||
.Bl -tag -width indent
|
||||
.It Cm accept_rtadv
|
||||
Set a flag to enable accepting ICMPv6 Router Advertisement messages.
|
||||
|
@ -619,7 +622,10 @@ Clear a flag
|
|||
.Cm defaultif .
|
||||
.It Cm ifdisabled
|
||||
Set a flag to disable all of IPv6 network communications on the
|
||||
specified interface.
|
||||
specified interface. Note that if there are already configured IPv6
|
||||
addresses on that interface, all of them are marked as
|
||||
.Dq tentative
|
||||
and DAD will be performed when this flag is cleared.
|
||||
.It Cm -ifdisabled
|
||||
Clear a flag
|
||||
.Cm ifdisabled .
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 17, 2009
|
||||
.Dd September 23, 2009
|
||||
.Dt RC.CONF 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -1246,28 +1246,85 @@ It is also possible to rename interface by doing:
|
|||
ifconfig_ed0_name="net0"
|
||||
ifconfig_net0="inet 192.0.2.1 netmask 0xffffff00"
|
||||
.Ed
|
||||
.It Va ipv6_enable
|
||||
.Pq Vt bool
|
||||
If the variable is
|
||||
.Dq Li YES ,
|
||||
.Dq Li inet6 accept_rtadv
|
||||
is added to all of
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6
|
||||
and the
|
||||
.Va ipv6_prefer
|
||||
is defined as
|
||||
.Dq Li YES .
|
||||
.Pp
|
||||
This variable is deprecated. Use
|
||||
.Va ipv6_prefer
|
||||
and
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6 .
|
||||
.It Va ipv6_prefer
|
||||
.Pq Vt bool
|
||||
This variable does the following:
|
||||
.Pp
|
||||
If the variable is
|
||||
.Dq Li YES ,
|
||||
the default policy of the source address selection set by
|
||||
.Xr ip6addrctl 8
|
||||
will be IPv6-preferred.
|
||||
.Pp
|
||||
If the variable is
|
||||
.Dq Li NO ,
|
||||
the default policy of the source address selection set by
|
||||
.Xr ip6addrctl 8
|
||||
will be IPv4-preferred, and all of interfaces which does not have the
|
||||
corrsponding
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6
|
||||
variable will be marked as
|
||||
.Dq Li IFDISABLED .
|
||||
This means only IPv6 functionality on that interface is completely
|
||||
disabled. For more details of
|
||||
.Dq Li IFDISABLED
|
||||
flag and keywords
|
||||
.Dq Li inet6 ifdisabled ,
|
||||
see
|
||||
.Xr ifconfig 8 .
|
||||
.Pp
|
||||
.It Va ipv6_network_interfaces
|
||||
.Pq Vt str
|
||||
This is the IPv6 equivalent of
|
||||
.Va network_interfaces .
|
||||
Instead of setting the ifconfig variables as
|
||||
.Va ifconfig_ Ns Aq Ar interface
|
||||
they should be set as
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6.
|
||||
Aliases should be set as
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns Va _alias Ns Aq Ar n .
|
||||
.Va ipv6_prefix_ Ns Aq Ar interface
|
||||
does something.
|
||||
Interfaces that have a
|
||||
.Fl accept_rtadv
|
||||
flag in
|
||||
Normally manual configuration of this variable is not needed.
|
||||
.Pp
|
||||
IPv6 functionality on an interface should be configured by
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6 ,
|
||||
instead of setting ifconfig parameters in
|
||||
.Va ifconfig_ Ns Aq Ar interface .
|
||||
Aliases should be set by
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns Va _alias Ns Aq Ar n
|
||||
with
|
||||
.Dq Li inet6
|
||||
keyword. For example:
|
||||
.Bd -literal
|
||||
ifconfig_ed0_ipv6="inet6 2001:db8:1::1 prefixlen 64"
|
||||
ifconfig_ed0_alias0="inet6 2001:db8:2::1 prefixlen 64"
|
||||
.Ed
|
||||
.Pp
|
||||
Interfaces that have an
|
||||
.Dq Li inet6 accept_rtadv
|
||||
keyword in
|
||||
.Va ifconfig_ Ns Ao Ar interface Ac Ns _ipv6
|
||||
setting will be automatically configured by
|
||||
.Xr rtsol 8
|
||||
if the
|
||||
.Xr rtsol 8 .
|
||||
Note that this automatic configuration is disabled if the
|
||||
.Va ipv6_gateway_enable
|
||||
is set to
|
||||
.Dq Li NO .
|
||||
.Dq Li YES .
|
||||
.It Va ipv6_prefix_ Ns Aq Ar interface
|
||||
.Pq Vt str
|
||||
If one or more prefixes are defined in
|
||||
.Va ipv6_prefix_ Ns Aq Ar interface
|
||||
addresses based on each prefix and the EUI-64 interface index will be
|
||||
configured on that interface.
|
||||
.It Va ipv6_default_interface
|
||||
.Pq Vt str
|
||||
If not set to
|
||||
|
|
Loading…
Reference in a new issue