(usagi-users 03390) Re: MLDv2 linux implementation questions

Hoerdt Mickael <[email protected]>
Newsgroups gmane.linux.ipv6.usagi.users
Message-ID <[email protected]>
Hi David,

This patch doesn't fix the problem. Taking my test program, not it returns
EADDRINUSE after the second call when it should say OK, because I am
using the same channel number for every group, but I join different
sources: I join (S,G), then (S1,G), then (S2,G).

This patch works for ASM groups, because I am not supposed to join the
same group twice on a socket, but not for SSM where I can join several
channels on the same sockets with the same channel identifier.

Also, the EADDRINUSE is not documented in RFC3678.

Thanks,

Hoerdt Mickaël

David Stevens wrote:

>Hoerdt,
>        Here's a fix. I'm going to see if I can do the further
>optimization of leaving the group when the filter is (INCLUDE,empty)
>for this case, since that would use less socket buffer space, but
>this alone corrects the problem.
>
>                                        +-DLS
>
>(in-line for viewing, attached for applying)
>--- linux-2.6.11.12/net/ipv6/mcast.c    2005-03-01 23:38:25.000000000 
>-0800
>+++ linux-2.6.11.12MCT/net/ipv6/mcast.c 2005-06-14 10:31:24.000000000 
>-0700
>@@ -188,6 +188,16 @@ int ipv6_sock_mc_join(struct sock *sk, i
>        if (!ipv6_addr_is_multicast(addr))
>                return -EINVAL;
> 
>+       read_lock_bh(&ipv6_sk_mc_lock);
>+       for (mc_lst=np->ipv6_mc_list; mc_lst; mc_lst=mc_lst->next) {
>+               if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
>+                   ipv6_addr_equal(&mc_lst->addr, addr)) {
>+                       read_unlock_bh(&ipv6_sk_mc_lock);
>+                       return -EADDRINUSE;
>+               }
>+       }
>+       read_unlock_bh(&ipv6_sk_mc_lock);
>+
>        mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), 
>GFP_KERNEL);
> 
>        if (mc_lst == NULL)
>
>
>  
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.