Lines Matching refs:mc_lst

138 	struct ipv6_mc_socklist *mc_lst;  in ipv6_sock_mc_join()  local
149 for_each_pmc_rcu(np, mc_lst) { in ipv6_sock_mc_join()
150 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in ipv6_sock_mc_join()
151 ipv6_addr_equal(&mc_lst->addr, addr)) { in ipv6_sock_mc_join()
158 mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), GFP_KERNEL); in ipv6_sock_mc_join()
160 if (!mc_lst) in ipv6_sock_mc_join()
163 mc_lst->next = NULL; in ipv6_sock_mc_join()
164 mc_lst->addr = *addr; in ipv6_sock_mc_join()
177 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in ipv6_sock_mc_join()
181 mc_lst->ifindex = dev->ifindex; in ipv6_sock_mc_join()
182 mc_lst->sfmode = MCAST_EXCLUDE; in ipv6_sock_mc_join()
183 rwlock_init(&mc_lst->sflock); in ipv6_sock_mc_join()
184 mc_lst->sflist = NULL; in ipv6_sock_mc_join()
193 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in ipv6_sock_mc_join()
197 mc_lst->next = np->ipv6_mc_list; in ipv6_sock_mc_join()
198 rcu_assign_pointer(np->ipv6_mc_list, mc_lst); in ipv6_sock_mc_join()
210 struct ipv6_mc_socklist *mc_lst; in ipv6_sock_mc_drop() local
220 (mc_lst = rtnl_dereference(*lnk)) != NULL; in ipv6_sock_mc_drop()
221 lnk = &mc_lst->next) { in ipv6_sock_mc_drop()
222 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in ipv6_sock_mc_drop()
223 ipv6_addr_equal(&mc_lst->addr, addr)) { in ipv6_sock_mc_drop()
226 *lnk = mc_lst->next; in ipv6_sock_mc_drop()
228 dev = __dev_get_by_index(net, mc_lst->ifindex); in ipv6_sock_mc_drop()
232 (void) ip6_mc_leave_src(sk, mc_lst, idev); in ipv6_sock_mc_drop()
234 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in ipv6_sock_mc_drop()
236 (void) ip6_mc_leave_src(sk, mc_lst, NULL); in ipv6_sock_mc_drop()
238 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in ipv6_sock_mc_drop()
239 kfree_rcu(mc_lst, rcu); in ipv6_sock_mc_drop()
282 struct ipv6_mc_socklist *mc_lst; in ipv6_sock_mc_close() local
289 while ((mc_lst = rtnl_dereference(np->ipv6_mc_list)) != NULL) { in ipv6_sock_mc_close()
292 np->ipv6_mc_list = mc_lst->next; in ipv6_sock_mc_close()
294 dev = __dev_get_by_index(net, mc_lst->ifindex); in ipv6_sock_mc_close()
298 (void) ip6_mc_leave_src(sk, mc_lst, idev); in ipv6_sock_mc_close()
300 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in ipv6_sock_mc_close()
302 (void) ip6_mc_leave_src(sk, mc_lst, NULL); in ipv6_sock_mc_close()
304 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in ipv6_sock_mc_close()
305 kfree_rcu(mc_lst, rcu); in ipv6_sock_mc_close()