Lines Matching refs:mc_lst
141 struct ipv6_mc_socklist *mc_lst; in __ipv6_sock_mc_join() local
152 for_each_pmc_rcu(np, mc_lst) { in __ipv6_sock_mc_join()
153 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in __ipv6_sock_mc_join()
154 ipv6_addr_equal(&mc_lst->addr, addr)) { in __ipv6_sock_mc_join()
161 mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), GFP_KERNEL); in __ipv6_sock_mc_join()
163 if (!mc_lst) in __ipv6_sock_mc_join()
166 mc_lst->next = NULL; in __ipv6_sock_mc_join()
167 mc_lst->addr = *addr; in __ipv6_sock_mc_join()
180 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in __ipv6_sock_mc_join()
184 mc_lst->ifindex = dev->ifindex; in __ipv6_sock_mc_join()
185 mc_lst->sfmode = mode; in __ipv6_sock_mc_join()
186 rwlock_init(&mc_lst->sflock); in __ipv6_sock_mc_join()
187 mc_lst->sflist = NULL; in __ipv6_sock_mc_join()
196 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in __ipv6_sock_mc_join()
200 mc_lst->next = np->ipv6_mc_list; in __ipv6_sock_mc_join()
201 rcu_assign_pointer(np->ipv6_mc_list, mc_lst); in __ipv6_sock_mc_join()
224 struct ipv6_mc_socklist *mc_lst; in ipv6_sock_mc_drop() local
234 (mc_lst = rtnl_dereference(*lnk)) != NULL; in ipv6_sock_mc_drop()
235 lnk = &mc_lst->next) { in ipv6_sock_mc_drop()
236 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in ipv6_sock_mc_drop()
237 ipv6_addr_equal(&mc_lst->addr, addr)) { in ipv6_sock_mc_drop()
240 *lnk = mc_lst->next; in ipv6_sock_mc_drop()
242 dev = __dev_get_by_index(net, mc_lst->ifindex); in ipv6_sock_mc_drop()
246 (void) ip6_mc_leave_src(sk, mc_lst, idev); in ipv6_sock_mc_drop()
248 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in ipv6_sock_mc_drop()
250 (void) ip6_mc_leave_src(sk, mc_lst, NULL); in ipv6_sock_mc_drop()
252 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in ipv6_sock_mc_drop()
253 kfree_rcu(mc_lst, rcu); in ipv6_sock_mc_drop()
296 struct ipv6_mc_socklist *mc_lst; in __ipv6_sock_mc_close() local
301 while ((mc_lst = rtnl_dereference(np->ipv6_mc_list)) != NULL) { in __ipv6_sock_mc_close()
304 np->ipv6_mc_list = mc_lst->next; in __ipv6_sock_mc_close()
306 dev = __dev_get_by_index(net, mc_lst->ifindex); in __ipv6_sock_mc_close()
310 (void) ip6_mc_leave_src(sk, mc_lst, idev); in __ipv6_sock_mc_close()
312 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in __ipv6_sock_mc_close()
314 (void) ip6_mc_leave_src(sk, mc_lst, NULL); in __ipv6_sock_mc_close()
316 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in __ipv6_sock_mc_close()
317 kfree_rcu(mc_lst, rcu); in __ipv6_sock_mc_close()