summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorhrs <hrs@FreeBSD.org>2009-09-26 18:59:00 +0000
committerhrs <hrs@FreeBSD.org>2009-09-26 18:59:00 +0000
commit5dd8a59580516caa7bd52947c6f58a129ae72d24 (patch)
tree4fd6be2cbcde7fce1d1bb9a1577d131c188540e1 /etc
parent62c08fc4760665f6d4d8807b9c082f6c1dc2ec12 (diff)
downloadFreeBSD-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')
-rw-r--r--etc/network.subr70
-rwxr-xr-xetc/rc.d/ip6addrctl2
-rwxr-xr-xetc/rc.d/netif2
3 files changed, 61 insertions, 13 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
diff --git a/etc/rc.d/ip6addrctl b/etc/rc.d/ip6addrctl
index 518ac25..66f1952 100755
--- a/etc/rc.d/ip6addrctl
+++ b/etc/rc.d/ip6addrctl
@@ -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
diff --git a/etc/rc.d/netif b/etc/rc.d/netif
index ac2cc58..3c8e5dc 100755
--- a/etc/rc.d/netif
+++ b/etc/rc.d/netif
@@ -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()
{
OpenPOWER on IntegriCloud