Subject: Re: [PATCH net-next v3 3/4] ipv6: stop multicast forwarding to process interface scoped addresses

From: YOSHIFUJI Hideaki <[email-masked]>
Date: Fri, 08 Mar 2013 11:19:11 +0900

Hannes Frederic Sowa wrote:
> v2:
> a) used struct ipv6_addr_props
> 
> v3:
> a) reverted changes for ipv6_addr_props
> 
> Cc: YOSHIFUJI Hideaki <[email-masked]>
> Signed-off-by: Hannes Frederic Sowa <[email-masked]>
> ---
>  net/ipv6/ip6_input.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
> index b1876e5..b73bcc2 100644
> --- a/net/ipv6/ip6_input.c
> +++ b/net/ipv6/ip6_input.c
> @@ -281,7 +281,7 @@ int ip6_mc_input(struct sk_buff *skb)
>  	 *      IPv6 multicast router mode is now supported ;)
>  	 */
>  	if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding &&
> -	    !(ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) &&
> +	    !__ipv6_addr_needs_scope_id((ipv6_addr_type(&hdr->daddr))) &&
>  	    likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) {
>  		/*
>  		 * Okay, we try to forward - split and duplicate
> 

Well, I think __ipv6_addr_needs_scope_id() should be used just for
filling "sin6_scope_id", not for forwarding decision.

Since we always have multicast address, so 
            !(ipv6_addr_type(&hdr->daddr) & (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL))
is just fine for disallow "forwarding" multicast for interface-local addresses.

--yoshfuji