Index: libexec/rc/network.subr =================================================================== --- libexec/rc/network.subr +++ libexec/rc/network.subr @@ -229,6 +229,11 @@ ${IFCONFIG_CMD} $1 up fi + if ! noafif $1 && afexists inet6; then + ipv6_accept_rtadv_up $1 + _cfg=0 + fi + if dhcpif $1; then if [ $_cfg -ne 0 ] ; then ${IFCONFIG_CMD} $1 up @@ -327,6 +332,7 @@ for _arg in $_tmpargs; do case $_arg:$_vnet in + [Rr][Tt][Ss][Oo][Ll]:0) ;; [Dd][Hh][Cc][Pp]:0) ;; [Nn][Oo][Aa][Uu][Tt][Oo]:0) ;; [Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]:0) ;; @@ -363,6 +369,42 @@ return 0 } +# rtsolif if +# Returns 0 if the interface is a RTSOL interface and 1 otherwise. +rtsolif() +{ + local _tmpargs _arg + + case $1 in + lo[0-9]*|\ + stf[0-9]*|\ + lp[0-9]*|\ + sl[0-9]*) + return 1 + ;; + esac + if noafif $1; then + return 1 + fi + + _tmpargs=`_ifconfig_getargs $1 ipv6` + for _arg in $_tmpargs; do + case $_arg in + [Rr][Tt][Ss][Oo][Ll]) + return 0 + ;; + esac + done + + # If rtsold is not enabled run rtsol. + # This comes last to not override a per-IF flag. + if ! checkyesno rtsold_enable; then + return 0 + fi + + return 1 +} + # dhcpif if # Returns 0 if the interface is a DHCP interface and 1 otherwise. dhcpif() @@ -686,7 +728,6 @@ ifalias ${_if} inet6 alias && _ret=0 ipv6_prefix_hostid_addr_common ${_if} alias && _ret=0 - ipv6_accept_rtadv_up ${_if} && _ret=0 return $_ret } @@ -1198,8 +1239,8 @@ { if ipv6_autoconfif $1; then ${IFCONFIG_CMD} $1 inet6 accept_rtadv up - if ! checkyesno rtsold_enable; then - rtsol ${rtsol_flags} $1 + if rtsolif $1; then + /sbin/rtsol ${rtsol_flags} $1 fi fi }