From owner-freebsd-current@FreeBSD.ORG Thu Jan 17 05:24:39 2013 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 3FB583A5; Thu, 17 Jan 2013 05:24:39 +0000 (UTC) (envelope-from kpaasial@gmail.com) Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by mx1.freebsd.org (Postfix) with ESMTP id A1D6E3DB; Thu, 17 Jan 2013 05:24:38 +0000 (UTC) Received: by mail-wg0-f50.google.com with SMTP id es5so1355014wgb.17 for ; Wed, 16 Jan 2013 21:24:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=sOL5zdmsXoEMzeF3vXfwy+lge44rcvlI1Ez0NUQrhsE=; b=xyeLeaOZ4sSOHmBFXmLvaAf3A2B+HTj62bRj+kgnDgdL/gy5qHOUBMXrsY+VNIVjye AXP9byrWxUPFdPJk/EuRsW468qUYmV1HV2V9MyAGGOiGizrRVgo0NbkE3arm0O6mXxY6 ztJzcVPX2Ku2keY7rYcoLSWL1KR7yeAr9C2QpXsEGtOUrOyhIkHxS2c4CkkETT/ecRpD G5JNNS+xjvjNlmihG878bF7kcH++RwKPM0/YJCjUPrGDoQB8mjaT8DFaFivgkzvpfROP Vr1uNXTEDv9FCs491RDQMBwvKoM3b+3yu+2jLAZdkANSLiJMxfmXcM67kcorGtmk/xUg vbnw== MIME-Version: 1.0 X-Received: by 10.194.21.70 with SMTP id t6mr6064283wje.42.1358400277499; Wed, 16 Jan 2013 21:24:37 -0800 (PST) Received: by 10.216.172.197 with HTTP; Wed, 16 Jan 2013 21:24:35 -0800 (PST) In-Reply-To: References: <50D1C553.9060100@wasikowski.net> <20121220132750.GB99616@stack.nl> <50D4F2E4.7020600@wasikowski.net> <20121222171400.GA2399@anubis.morrow.me.uk> <50D5F296.9050109@wasikowski.net> Date: Thu, 17 Jan 2013 07:24:35 +0200 Message-ID: Subject: Re: ipv6_addrs_IF aliases in rc.conf(5) From: Kimmo Paasiala To: Phil Kulin Content-Type: text/plain; charset=UTF-8 Cc: FreeBSD current , freebsd-stable@freebsd.org X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Jan 2013 05:24:39 -0000 On Thu, Dec 27, 2012 at 11:42 PM, Phil Kulin wrote: > 2012/12/26 Kimmo Paasiala : > >> 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