ipv6_addrs_IF aliases in rc.conf(5)
Kimmo Paasiala
kpaasial at gmail.com
Thu Jan 17 05:24:39 UTC 2013
On Thu, Dec 27, 2012 at 11:42 PM, Phil Kulin <schors at gmail.com> wrote:
> 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
> @@ -312,6 +312,12 @@ 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
> @@ -948,7 +954,12 @@ 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
> @@ -1178,3 +1189,39 @@ 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 Kulin
I don't have an 8.X system to test but I guess it's fine.
Any more interest in this? I'd love to see this added, not because I
wrote it but because I want to contribute in any way I can.
-Kimmo
More information about the freebsd-stable
mailing list