2012/12/26 Kimmo Paasiala <kpaasial_at_gmail.com>: > I've revised the patch again and updated it at gihub, > https://gist.github.com/4362018. It can now be applied at top level > of sources (/usr/src typically). It now does the deconfiguration in > reverse order of the configuration, meaning the aliases configured > with ipv6_addrs_IF are removed before the ones configured with > ifconfig_IF_aliasN="inet6 ...". Adapted for FreeBSD 8.2, works fine: --- network.subr.orig 2011-02-17 05:19:39.000000000 +0300 +++ network.subr 2012-12-28 00:46:38.000000000 +0400 _at__at_ -312,6 +312,12 _at__at_ afexists() # 1 otherwise. ipv6if() { + # Test for $ipv6_addrs_IF. If it exists then the + # interface should be configured for IPv6 + _tmpargs=$(get_if_var $_if ipv6_addrs_IF) + if [ -n "${_tmpargs}" ]; then + return 0 + fi if ! checkyesno ipv6_enable; then return 1 fi _at__at_ -948,7 +954,12 _at__at_ network6_interface_setup() rtsol_interface=no ifconfig $i inet6 ${ipv6_ifconfig} alias fi - + ipv6_addrs=`get_if_var $i ipv6_addrs_IF` + if [ -n "${ipv6_addrs}" ]; then + rtsol_available=no + rtsol_interface=no + ipv6_addrs_common ${i} alias + fi # Wireless NIC cards are virtualized through the wlan interface if ! is_wired_interface ${i}; then case "${i}" in _at__at_ -1178,3 +1189,39 _at__at_ network6_getladdr() esac done } + +ipv6_addrs_common() +{ + local _ret _if _action _ip6prefix _ip6prefixes + local _ip6addr _prefixlen + local _range _ip6net _ip6low _ip6high + _ret=1 + _if=$1 + _action=$2 + # get the prefixes from ipv6_addrs_IF variable + _ip6prefixes=`get_if_var $_if ipv6_addrs_IF` + for _ip6prefix in ${_ip6prefixes}; do + _ip6addr=${_ip6prefix%%/*} + _prefixlen=${_ip6prefix##*/} + _range=${_ip6addr##*:} + _ip6net=${_ip6addr%:*} + _ip6low=${_range%-*} + _ip6high=${_range#*-} + # If deleting an alias, set _prefixlen to null string. + if [ "${_action}" = "-alias" ]; then + _prefixlen="" + else + _prefixlen="prefixlen $_prefixlen" + fi + _ip6high=$(("0x${_ip6high}")) + _ip6count=$(("0x${_ip6low}")) + while [ "${_ip6count}" -le "${_ip6high}" ]; do + # Re-uses the _ip6addr variable from above + _ip6addr=$(printf "%x" "${_ip6count}") + eval "ifconfig ${_if} inet6 ${_ip6net}:${_ip6addr} ${_prefixlen} ${_action}" + _ip6count=$((${_ip6count}+1)) + _ret=0 + done + done + return $_ret +} -- Non nobis Domine non nobis sed Nomini Tuo da gloriam Phil KulinReceived on Thu Dec 27 2012 - 20:42:51 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:33 UTC