diff options
author | hrs <hrs@FreeBSD.org> | 2009-09-26 18:59:00 +0000 |
---|---|---|
committer | hrs <hrs@FreeBSD.org> | 2009-09-26 18:59:00 +0000 |
commit | 5dd8a59580516caa7bd52947c6f58a129ae72d24 (patch) | |
tree | 4fd6be2cbcde7fce1d1bb9a1577d131c188540e1 /etc/network.subr | |
parent | 62c08fc4760665f6d4d8807b9c082f6c1dc2ec12 (diff) | |
download | FreeBSD-src-5dd8a59580516caa7bd52947c6f58a129ae72d24.zip FreeBSD-src-5dd8a59580516caa7bd52947c6f58a129ae72d24.tar.gz |
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).
Diffstat (limited to 'etc/network.subr')
-rw-r--r-- | etc/network.subr | 70 |
1 files changed, 58 insertions, 12 deletions
diff --git a/etc/network.subr b/etc/network.subr index f9c10e8..83141ec 100644 --- a/etc/network.subr +++ b/etc/network.subr @@ -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 |