Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Jun 2014 21:47:41 +0200
From:      John Hay <jhay@meraka.org.za>
To:        Hiroki Sato <hrs@FreeBSD.org>
Cc:        freebsd-net@freebsd.org
Subject:   Re: network.subr vlan handling broken
Message-ID:  <20140620194741.GA50421@zibbi.meraka.csir.co.za>
In-Reply-To: <20140620.124803.562992300308664968.hrs@allbsd.org>
References:  <20140619103513.GA92393@zibbi.meraka.csir.co.za> <20140620.124803.562992300308664968.hrs@allbsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Hiroki,

On Fri, Jun 20, 2014 at 12:48:03PM +0900, Hiroki Sato wrote:
> John Hay <jhay@meraka.org.za> wrote
>   in <20140619103513.GA92393@zibbi.meraka.csir.co.za>:
> 
> jh> Hi Guys,
> jh>
> jh> freebsd-rc did not react, so I'm just checking on -net too.
> jh>
> jh> I found after upgrading that vlan handling broke. I tried the following:
> jh>
> jh> vlans_bce1="6"
> jh> ipv4_addrs_bce1_6="inet 10.239.100.2/24"
> jh> ifconfig_bce1_6_aliases="inet 10.239.100.2/24"
> jh> ifconfig_bce1_6_alias0="inet 10.239.100.2/24"
> jh>
> jh> I traced it down to ifalias_af_common_handler being called with the
> jh> mangled interfcace name _if and it then calls ifconfig with it. Here
> jh> is my fix. Any reason not to commit it? My diff is against 10-stable,
> jh> but head looks the same.
> 
>  Can you try the attached patch?  It seemed broken after list_vars()
>  was introduced.  Replacing $_if with $1 also fixes it, but $_if
>  should be used for ifname as the other parts do.

I have tested ipv4 and ipv6 cases and it seems ok:

##############################
vlans_re1="6 7"
ipv4_addrs_re1_6="inet 10.254.254.253/24"
ifconfig_re1_6_aliases="inet 10.254.254.254/24"
ifconfig_re1_6_ipv6="inet6 accept_rtadv"
ifconfig_re1_7_ipv6="inet6 fd99:6829:597c:2::1 prefixlen 64"

root@angel:/etc # ifconfig re1.6
re1.6: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 90:2b:34:df:ae:c4
        inet6 fe80::922b:34ff:fedf:aec4%re1.6 prefixlen 64 scopeid 0x4 
        inet 10.254.254.254 netmask 0xffffff00 broadcast 10.254.254.255 
        inet 10.254.254.253 netmask 0xffffff00 broadcast 10.254.254.255 
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
        media: Ethernet autoselect (none)
        status: no carrier
        vlan: 6 parent interface: re1
root@angel:/etc # ifconfig re1.7
re1.7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 90:2b:34:df:ae:c4
        inet6 fd99:6829:597c:2::1 prefixlen 64 
        inet6 fe80::922b:34ff:fedf:aec4%re1.7 prefixlen 64 scopeid 0x5 
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: Ethernet autoselect (none)
        status: no carrier
        vlan: 7 parent interface: re1
root@angel:/etc #
##############################

Thanks

John

> 
> jh> While looking through the code I saw that ltr is called with different
> jh> styling. Is there a reason for it? Which is the prefered style?
> jh>
> jh> 	ltr ${_if} "${_punct}" '_' _if
> jh> 	ltr "$_if" "$_punct" "_" _if
> 
>  I do not think there is a reason.
> 
>  I think there is no consensus about the style but I am using {} only
>  when boundary between the variable name and the subsequent characters
>  can be ambiguous.
> 
> -- Hiroki

> Index: network.subr
> ===================================================================
> --- network.subr	(revision 267636)
> +++ network.subr	(working copy)
> @@ -1077,7 +1077,7 @@
>  ifalias_af_common()
>  {
>  	local _ret _if _af _action alias ifconfig_args _aliasn _c _tmpargs _iaf
> -	local _punct=".-/+"
> +	local _vif _punct=".-/+"
> 
>  	_ret=1
>  	_aliasn=
> @@ -1086,11 +1086,11 @@
>  	_action=$3
> 
>  	# Normalize $_if before using it in a pattern to list_vars()
> -	ltr "$_if" "$_punct" "_" _if
> +	ltr "$_if" "$_punct" "_" _vif
> 
>  	# ifconfig_IF_aliasN which starts with $_af
> -	for alias in `list_vars ifconfig_${_if}_alias[0-9]\* |
> -		sort_lite -nk1.$((9+${#_if}+7))`
> +	for alias in `list_vars ifconfig_${_vif}_alias[0-9]\* |
> +		sort_lite -nk1.$((9+${#_vif}+7))`
>  	do
>  		eval ifconfig_args=\"\$$alias\"
>  		_iaf=
> @@ -1118,8 +1118,8 @@
>  	# backward compatibility: ipv6_ifconfig_IF_aliasN.
>  	case $_af in
>  	inet6)
> -		for alias in `list_vars ipv6_ifconfig_${_if}_alias[0-9]\* |
> -			sort_lite -nk1.$((14+${#_if}+7))`
> +		for alias in `list_vars ipv6_ifconfig_${_vif}_alias[0-9]\* |
> +			sort_lite -nk1.$((14+${#_vif}+7))`
>  		do
>  			eval ifconfig_args=\"\$$alias\"
>  			case ${_action}:"${ifconfig_args}" in
> @@ -1129,7 +1129,7 @@
>  			alias:*)
>  				_aliasn="${_aliasn} inet6 ${ifconfig_args}"
>  				warn "\$${alias} is obsolete. " \
> -				    "Use ifconfig_$1_aliasN instead."
> +				    "Use ifconfig_${_vif}_aliasN instead."
>  			;;
>  			esac
>  		done



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140620194741.GA50421>