mld: add new workqueues for process mld events
[platform/kernel/linux-starfive.git] / net / ipv6 / mcast.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *      Multicast support for IPv6
4  *      Linux INET6 implementation
5  *
6  *      Authors:
7  *      Pedro Roque             <roque@di.fc.ul.pt>
8  *
9  *      Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c
10  */
11
12 /* Changes:
13  *
14  *      yoshfuji        : fix format of router-alert option
15  *      YOSHIFUJI Hideaki @USAGI:
16  *              Fixed source address for MLD message based on
17  *              <draft-ietf-magma-mld-source-05.txt>.
18  *      YOSHIFUJI Hideaki @USAGI:
19  *              - Ignore Queries for invalid addresses.
20  *              - MLD for link-local addresses.
21  *      David L Stevens <dlstevens@us.ibm.com>:
22  *              - MLDv2 support
23  */
24
25 #include <linux/module.h>
26 #include <linux/errno.h>
27 #include <linux/types.h>
28 #include <linux/string.h>
29 #include <linux/socket.h>
30 #include <linux/sockios.h>
31 #include <linux/jiffies.h>
32 #include <linux/net.h>
33 #include <linux/in.h>
34 #include <linux/in6.h>
35 #include <linux/netdevice.h>
36 #include <linux/if_arp.h>
37 #include <linux/route.h>
38 #include <linux/init.h>
39 #include <linux/proc_fs.h>
40 #include <linux/seq_file.h>
41 #include <linux/slab.h>
42 #include <linux/pkt_sched.h>
43 #include <net/mld.h>
44 #include <linux/workqueue.h>
45
46 #include <linux/netfilter.h>
47 #include <linux/netfilter_ipv6.h>
48
49 #include <net/net_namespace.h>
50 #include <net/sock.h>
51 #include <net/snmp.h>
52
53 #include <net/ipv6.h>
54 #include <net/protocol.h>
55 #include <net/if_inet6.h>
56 #include <net/ndisc.h>
57 #include <net/addrconf.h>
58 #include <net/ip6_route.h>
59 #include <net/inet_common.h>
60
61 #include <net/ip6_checksum.h>
62
63 /* Ensure that we have struct in6_addr aligned on 32bit word. */
64 static int __mld2_query_bugs[] __attribute__((__unused__)) = {
65         BUILD_BUG_ON_ZERO(offsetof(struct mld2_query, mld2q_srcs) % 4),
66         BUILD_BUG_ON_ZERO(offsetof(struct mld2_report, mld2r_grec) % 4),
67         BUILD_BUG_ON_ZERO(offsetof(struct mld2_grec, grec_mca) % 4)
68 };
69
70 static struct workqueue_struct *mld_wq;
71 static struct in6_addr mld2_all_mcr = MLD2_ALL_MCR_INIT;
72
73 static void igmp6_join_group(struct ifmcaddr6 *ma);
74 static void igmp6_leave_group(struct ifmcaddr6 *ma);
75 static void mld_mca_work(struct work_struct *work);
76
77 static void mld_ifc_event(struct inet6_dev *idev);
78 static void mld_add_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc);
79 static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc);
80 static void mld_clear_delrec(struct inet6_dev *idev);
81 static bool mld_in_v1_mode(const struct inet6_dev *idev);
82 static int sf_setstate(struct ifmcaddr6 *pmc);
83 static void sf_markstate(struct ifmcaddr6 *pmc);
84 static void ip6_mc_clear_src(struct ifmcaddr6 *pmc);
85 static int ip6_mc_del_src(struct inet6_dev *idev, const struct in6_addr *pmca,
86                           int sfmode, int sfcount, const struct in6_addr *psfsrc,
87                           int delta);
88 static int ip6_mc_add_src(struct inet6_dev *idev, const struct in6_addr *pmca,
89                           int sfmode, int sfcount, const struct in6_addr *psfsrc,
90                           int delta);
91 static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml,
92                             struct inet6_dev *idev);
93 static int __ipv6_dev_mc_inc(struct net_device *dev,
94                              const struct in6_addr *addr, unsigned int mode);
95
96 #define MLD_QRV_DEFAULT         2
97 /* RFC3810, 9.2. Query Interval */
98 #define MLD_QI_DEFAULT          (125 * HZ)
99 /* RFC3810, 9.3. Query Response Interval */
100 #define MLD_QRI_DEFAULT         (10 * HZ)
101
102 /* RFC3810, 8.1 Query Version Distinctions */
103 #define MLD_V1_QUERY_LEN        24
104 #define MLD_V2_QUERY_LEN_MIN    28
105
106 #define IPV6_MLD_MAX_MSF        64
107
108 int sysctl_mld_max_msf __read_mostly = IPV6_MLD_MAX_MSF;
109 int sysctl_mld_qrv __read_mostly = MLD_QRV_DEFAULT;
110
111 /*
112  *      socket join on multicast group
113  */
114
115 #define for_each_pmc_rtnl(np, pmc)                              \
116         for (pmc = rtnl_dereference((np)->ipv6_mc_list);        \
117              pmc;                                               \
118              pmc = rtnl_dereference(pmc->next))
119
120 #define for_each_pmc_rcu(np, pmc)                               \
121         for (pmc = rcu_dereference((np)->ipv6_mc_list);         \
122              pmc;                                               \
123              pmc = rcu_dereference(pmc->next))
124
125 #define for_each_psf_rtnl(mc, psf)                              \
126         for (psf = rtnl_dereference((mc)->mca_sources);         \
127              psf;                                               \
128              psf = rtnl_dereference(psf->sf_next))
129
130 #define for_each_psf_rcu(mc, psf)                               \
131         for (psf = rcu_dereference((mc)->mca_sources);          \
132              psf;                                               \
133              psf = rcu_dereference(psf->sf_next))
134
135 #define for_each_psf_tomb(mc, psf)                              \
136         for (psf = rtnl_dereference((mc)->mca_tomb);            \
137              psf;                                               \
138              psf = rtnl_dereference(psf->sf_next))
139
140 #define for_each_mc_rtnl(idev, mc)                              \
141         for (mc = rtnl_dereference((idev)->mc_list);            \
142              mc;                                                \
143              mc = rtnl_dereference(mc->next))
144
145 #define for_each_mc_rcu(idev, mc)                               \
146         for (mc = rcu_dereference((idev)->mc_list);             \
147              mc;                                                \
148              mc = rcu_dereference(mc->next))
149
150 #define for_each_mc_tomb(idev, mc)                              \
151         for (mc = rtnl_dereference((idev)->mc_tomb);            \
152              mc;                                                \
153              mc = rtnl_dereference(mc->next))
154
155 static int unsolicited_report_interval(struct inet6_dev *idev)
156 {
157         int iv;
158
159         if (mld_in_v1_mode(idev))
160                 iv = idev->cnf.mldv1_unsolicited_report_interval;
161         else
162                 iv = idev->cnf.mldv2_unsolicited_report_interval;
163
164         return iv > 0 ? iv : 1;
165 }
166
167 static int __ipv6_sock_mc_join(struct sock *sk, int ifindex,
168                                const struct in6_addr *addr, unsigned int mode)
169 {
170         struct net_device *dev = NULL;
171         struct ipv6_mc_socklist *mc_lst;
172         struct ipv6_pinfo *np = inet6_sk(sk);
173         struct net *net = sock_net(sk);
174         int err;
175
176         ASSERT_RTNL();
177
178         if (!ipv6_addr_is_multicast(addr))
179                 return -EINVAL;
180
181         for_each_pmc_rtnl(np, mc_lst) {
182                 if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
183                     ipv6_addr_equal(&mc_lst->addr, addr))
184                         return -EADDRINUSE;
185         }
186
187         mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), GFP_KERNEL);
188
189         if (!mc_lst)
190                 return -ENOMEM;
191
192         mc_lst->next = NULL;
193         mc_lst->addr = *addr;
194
195         if (ifindex == 0) {
196                 struct rt6_info *rt;
197                 rt = rt6_lookup(net, addr, NULL, 0, NULL, 0);
198                 if (rt) {
199                         dev = rt->dst.dev;
200                         ip6_rt_put(rt);
201                 }
202         } else
203                 dev = __dev_get_by_index(net, ifindex);
204
205         if (!dev) {
206                 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
207                 return -ENODEV;
208         }
209
210         mc_lst->ifindex = dev->ifindex;
211         mc_lst->sfmode = mode;
212         RCU_INIT_POINTER(mc_lst->sflist, NULL);
213
214         /*
215          *      now add/increase the group membership on the device
216          */
217
218         err = __ipv6_dev_mc_inc(dev, addr, mode);
219
220         if (err) {
221                 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
222                 return err;
223         }
224
225         mc_lst->next = np->ipv6_mc_list;
226         rcu_assign_pointer(np->ipv6_mc_list, mc_lst);
227
228         return 0;
229 }
230
231 int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
232 {
233         return __ipv6_sock_mc_join(sk, ifindex, addr, MCAST_EXCLUDE);
234 }
235 EXPORT_SYMBOL(ipv6_sock_mc_join);
236
237 int ipv6_sock_mc_join_ssm(struct sock *sk, int ifindex,
238                           const struct in6_addr *addr, unsigned int mode)
239 {
240         return __ipv6_sock_mc_join(sk, ifindex, addr, mode);
241 }
242
243 /*
244  *      socket leave on multicast group
245  */
246 int ipv6_sock_mc_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
247 {
248         struct ipv6_pinfo *np = inet6_sk(sk);
249         struct ipv6_mc_socklist *mc_lst;
250         struct ipv6_mc_socklist __rcu **lnk;
251         struct net *net = sock_net(sk);
252
253         ASSERT_RTNL();
254
255         if (!ipv6_addr_is_multicast(addr))
256                 return -EINVAL;
257
258         for (lnk = &np->ipv6_mc_list;
259              (mc_lst = rtnl_dereference(*lnk)) != NULL;
260               lnk = &mc_lst->next) {
261                 if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
262                     ipv6_addr_equal(&mc_lst->addr, addr)) {
263                         struct net_device *dev;
264
265                         *lnk = mc_lst->next;
266
267                         dev = __dev_get_by_index(net, mc_lst->ifindex);
268                         if (dev) {
269                                 struct inet6_dev *idev = __in6_dev_get(dev);
270
271                                 (void) ip6_mc_leave_src(sk, mc_lst, idev);
272                                 if (idev)
273                                         __ipv6_dev_mc_dec(idev, &mc_lst->addr);
274                         } else
275                                 (void) ip6_mc_leave_src(sk, mc_lst, NULL);
276
277                         atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
278                         kfree_rcu(mc_lst, rcu);
279                         return 0;
280                 }
281         }
282
283         return -EADDRNOTAVAIL;
284 }
285 EXPORT_SYMBOL(ipv6_sock_mc_drop);
286
287 static struct inet6_dev *ip6_mc_find_dev_rtnl(struct net *net,
288                                               const struct in6_addr *group,
289                                               int ifindex)
290 {
291         struct net_device *dev = NULL;
292         struct inet6_dev *idev = NULL;
293
294         if (ifindex == 0) {
295                 struct rt6_info *rt = rt6_lookup(net, group, NULL, 0, NULL, 0);
296
297                 if (rt) {
298                         dev = rt->dst.dev;
299                         ip6_rt_put(rt);
300                 }
301         } else {
302                 dev = __dev_get_by_index(net, ifindex);
303         }
304
305         if (!dev)
306                 return NULL;
307         idev = __in6_dev_get(dev);
308         if (!idev)
309                 return NULL;
310         if (idev->dead)
311                 return NULL;
312         return idev;
313 }
314
315 void __ipv6_sock_mc_close(struct sock *sk)
316 {
317         struct ipv6_pinfo *np = inet6_sk(sk);
318         struct ipv6_mc_socklist *mc_lst;
319         struct net *net = sock_net(sk);
320
321         ASSERT_RTNL();
322
323         while ((mc_lst = rtnl_dereference(np->ipv6_mc_list)) != NULL) {
324                 struct net_device *dev;
325
326                 np->ipv6_mc_list = mc_lst->next;
327
328                 dev = __dev_get_by_index(net, mc_lst->ifindex);
329                 if (dev) {
330                         struct inet6_dev *idev = __in6_dev_get(dev);
331
332                         (void) ip6_mc_leave_src(sk, mc_lst, idev);
333                         if (idev)
334                                 __ipv6_dev_mc_dec(idev, &mc_lst->addr);
335                 } else
336                         (void) ip6_mc_leave_src(sk, mc_lst, NULL);
337
338                 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
339                 kfree_rcu(mc_lst, rcu);
340         }
341 }
342
343 void ipv6_sock_mc_close(struct sock *sk)
344 {
345         struct ipv6_pinfo *np = inet6_sk(sk);
346
347         if (!rcu_access_pointer(np->ipv6_mc_list))
348                 return;
349         rtnl_lock();
350         __ipv6_sock_mc_close(sk);
351         rtnl_unlock();
352 }
353
354 int ip6_mc_source(int add, int omode, struct sock *sk,
355         struct group_source_req *pgsr)
356 {
357         struct in6_addr *source, *group;
358         struct ipv6_mc_socklist *pmc;
359         struct inet6_dev *idev;
360         struct ipv6_pinfo *inet6 = inet6_sk(sk);
361         struct ip6_sf_socklist *psl;
362         struct net *net = sock_net(sk);
363         int i, j, rv;
364         int leavegroup = 0;
365         int err;
366
367         source = &((struct sockaddr_in6 *)&pgsr->gsr_source)->sin6_addr;
368         group = &((struct sockaddr_in6 *)&pgsr->gsr_group)->sin6_addr;
369
370         if (!ipv6_addr_is_multicast(group))
371                 return -EINVAL;
372
373         idev = ip6_mc_find_dev_rtnl(net, group, pgsr->gsr_interface);
374         if (!idev)
375                 return -ENODEV;
376
377         err = -EADDRNOTAVAIL;
378
379         for_each_pmc_rtnl(inet6, pmc) {
380                 if (pgsr->gsr_interface && pmc->ifindex != pgsr->gsr_interface)
381                         continue;
382                 if (ipv6_addr_equal(&pmc->addr, group))
383                         break;
384         }
385         if (!pmc) {             /* must have a prior join */
386                 err = -EINVAL;
387                 goto done;
388         }
389         /* if a source filter was set, must be the same mode as before */
390         if (rcu_access_pointer(pmc->sflist)) {
391                 if (pmc->sfmode != omode) {
392                         err = -EINVAL;
393                         goto done;
394                 }
395         } else if (pmc->sfmode != omode) {
396                 /* allow mode switches for empty-set filters */
397                 ip6_mc_add_src(idev, group, omode, 0, NULL, 0);
398                 ip6_mc_del_src(idev, group, pmc->sfmode, 0, NULL, 0);
399                 pmc->sfmode = omode;
400         }
401
402         psl = rtnl_dereference(pmc->sflist);
403         if (!add) {
404                 if (!psl)
405                         goto done;      /* err = -EADDRNOTAVAIL */
406                 rv = !0;
407                 for (i = 0; i < psl->sl_count; i++) {
408                         rv = !ipv6_addr_equal(&psl->sl_addr[i], source);
409                         if (rv == 0)
410                                 break;
411                 }
412                 if (rv)         /* source not found */
413                         goto done;      /* err = -EADDRNOTAVAIL */
414
415                 /* special case - (INCLUDE, empty) == LEAVE_GROUP */
416                 if (psl->sl_count == 1 && omode == MCAST_INCLUDE) {
417                         leavegroup = 1;
418                         goto done;
419                 }
420
421                 /* update the interface filter */
422                 ip6_mc_del_src(idev, group, omode, 1, source, 1);
423
424                 for (j = i+1; j < psl->sl_count; j++)
425                         psl->sl_addr[j-1] = psl->sl_addr[j];
426                 psl->sl_count--;
427                 err = 0;
428                 goto done;
429         }
430         /* else, add a new source to the filter */
431
432         if (psl && psl->sl_count >= sysctl_mld_max_msf) {
433                 err = -ENOBUFS;
434                 goto done;
435         }
436         if (!psl || psl->sl_count == psl->sl_max) {
437                 struct ip6_sf_socklist *newpsl;
438                 int count = IP6_SFBLOCK;
439
440                 if (psl)
441                         count += psl->sl_max;
442                 newpsl = sock_kmalloc(sk, IP6_SFLSIZE(count), GFP_KERNEL);
443                 if (!newpsl) {
444                         err = -ENOBUFS;
445                         goto done;
446                 }
447                 newpsl->sl_max = count;
448                 newpsl->sl_count = count - IP6_SFBLOCK;
449                 if (psl) {
450                         for (i = 0; i < psl->sl_count; i++)
451                                 newpsl->sl_addr[i] = psl->sl_addr[i];
452                         atomic_sub(IP6_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
453                         kfree_rcu(psl, rcu);
454                 }
455                 psl = newpsl;
456                 rcu_assign_pointer(pmc->sflist, psl);
457         }
458         rv = 1; /* > 0 for insert logic below if sl_count is 0 */
459         for (i = 0; i < psl->sl_count; i++) {
460                 rv = !ipv6_addr_equal(&psl->sl_addr[i], source);
461                 if (rv == 0) /* There is an error in the address. */
462                         goto done;
463         }
464         for (j = psl->sl_count-1; j >= i; j--)
465                 psl->sl_addr[j+1] = psl->sl_addr[j];
466         psl->sl_addr[i] = *source;
467         psl->sl_count++;
468         err = 0;
469         /* update the interface list */
470         ip6_mc_add_src(idev, group, omode, 1, source, 1);
471 done:
472         if (leavegroup)
473                 err = ipv6_sock_mc_drop(sk, pgsr->gsr_interface, group);
474         return err;
475 }
476
477 int ip6_mc_msfilter(struct sock *sk, struct group_filter *gsf,
478                     struct sockaddr_storage *list)
479 {
480         const struct in6_addr *group;
481         struct ipv6_mc_socklist *pmc;
482         struct inet6_dev *idev;
483         struct ipv6_pinfo *inet6 = inet6_sk(sk);
484         struct ip6_sf_socklist *newpsl, *psl;
485         struct net *net = sock_net(sk);
486         int leavegroup = 0;
487         int i, err;
488
489         group = &((struct sockaddr_in6 *)&gsf->gf_group)->sin6_addr;
490
491         if (!ipv6_addr_is_multicast(group))
492                 return -EINVAL;
493         if (gsf->gf_fmode != MCAST_INCLUDE &&
494             gsf->gf_fmode != MCAST_EXCLUDE)
495                 return -EINVAL;
496
497         idev = ip6_mc_find_dev_rtnl(net, group, gsf->gf_interface);
498         if (!idev)
499                 return -ENODEV;
500
501         err = 0;
502
503         if (gsf->gf_fmode == MCAST_INCLUDE && gsf->gf_numsrc == 0) {
504                 leavegroup = 1;
505                 goto done;
506         }
507
508         for_each_pmc_rtnl(inet6, pmc) {
509                 if (pmc->ifindex != gsf->gf_interface)
510                         continue;
511                 if (ipv6_addr_equal(&pmc->addr, group))
512                         break;
513         }
514         if (!pmc) {             /* must have a prior join */
515                 err = -EINVAL;
516                 goto done;
517         }
518         if (gsf->gf_numsrc) {
519                 newpsl = sock_kmalloc(sk, IP6_SFLSIZE(gsf->gf_numsrc),
520                                                           GFP_KERNEL);
521                 if (!newpsl) {
522                         err = -ENOBUFS;
523                         goto done;
524                 }
525                 newpsl->sl_max = newpsl->sl_count = gsf->gf_numsrc;
526                 for (i = 0; i < newpsl->sl_count; ++i, ++list) {
527                         struct sockaddr_in6 *psin6;
528
529                         psin6 = (struct sockaddr_in6 *)list;
530                         newpsl->sl_addr[i] = psin6->sin6_addr;
531                 }
532                 err = ip6_mc_add_src(idev, group, gsf->gf_fmode,
533                         newpsl->sl_count, newpsl->sl_addr, 0);
534                 if (err) {
535                         sock_kfree_s(sk, newpsl, IP6_SFLSIZE(newpsl->sl_max));
536                         goto done;
537                 }
538         } else {
539                 newpsl = NULL;
540                 (void) ip6_mc_add_src(idev, group, gsf->gf_fmode, 0, NULL, 0);
541         }
542
543         psl = rtnl_dereference(pmc->sflist);
544         if (psl) {
545                 (void) ip6_mc_del_src(idev, group, pmc->sfmode,
546                         psl->sl_count, psl->sl_addr, 0);
547                 atomic_sub(IP6_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
548                 kfree_rcu(psl, rcu);
549         } else
550                 (void) ip6_mc_del_src(idev, group, pmc->sfmode, 0, NULL, 0);
551         rcu_assign_pointer(pmc->sflist, newpsl);
552         pmc->sfmode = gsf->gf_fmode;
553         err = 0;
554 done:
555         if (leavegroup)
556                 err = ipv6_sock_mc_drop(sk, gsf->gf_interface, group);
557         return err;
558 }
559
560 int ip6_mc_msfget(struct sock *sk, struct group_filter *gsf,
561                   struct sockaddr_storage __user *p)
562 {
563         int err, i, count, copycount;
564         const struct in6_addr *group;
565         struct ipv6_mc_socklist *pmc;
566         struct inet6_dev *idev;
567         struct ipv6_pinfo *inet6 = inet6_sk(sk);
568         struct ip6_sf_socklist *psl;
569         struct net *net = sock_net(sk);
570
571         group = &((struct sockaddr_in6 *)&gsf->gf_group)->sin6_addr;
572
573         if (!ipv6_addr_is_multicast(group))
574                 return -EINVAL;
575
576         idev = ip6_mc_find_dev_rtnl(net, group, gsf->gf_interface);
577         if (!idev)
578                 return -ENODEV;
579
580         err = -EADDRNOTAVAIL;
581         /* changes to the ipv6_mc_list require the socket lock and
582          * rtnl lock. We have the socket lock and rcu read lock,
583          * so reading the list is safe.
584          */
585
586         for_each_pmc_rtnl(inet6, pmc) {
587                 if (pmc->ifindex != gsf->gf_interface)
588                         continue;
589                 if (ipv6_addr_equal(group, &pmc->addr))
590                         break;
591         }
592         if (!pmc)               /* must have a prior join */
593                 return err;
594
595         gsf->gf_fmode = pmc->sfmode;
596         psl = rtnl_dereference(pmc->sflist);
597         count = psl ? psl->sl_count : 0;
598
599         copycount = count < gsf->gf_numsrc ? count : gsf->gf_numsrc;
600         gsf->gf_numsrc = count;
601
602         for (i = 0; i < copycount; i++, p++) {
603                 struct sockaddr_in6 *psin6;
604                 struct sockaddr_storage ss;
605
606                 psin6 = (struct sockaddr_in6 *)&ss;
607                 memset(&ss, 0, sizeof(ss));
608                 psin6->sin6_family = AF_INET6;
609                 psin6->sin6_addr = psl->sl_addr[i];
610                 if (copy_to_user(p, &ss, sizeof(ss)))
611                         return -EFAULT;
612         }
613         return 0;
614 }
615
616 bool inet6_mc_check(struct sock *sk, const struct in6_addr *mc_addr,
617                     const struct in6_addr *src_addr)
618 {
619         struct ipv6_pinfo *np = inet6_sk(sk);
620         struct ipv6_mc_socklist *mc;
621         struct ip6_sf_socklist *psl;
622         bool rv = true;
623
624         rcu_read_lock();
625         for_each_pmc_rcu(np, mc) {
626                 if (ipv6_addr_equal(&mc->addr, mc_addr))
627                         break;
628         }
629         if (!mc) {
630                 rcu_read_unlock();
631                 return np->mc_all;
632         }
633         psl = rcu_dereference(mc->sflist);
634         if (!psl) {
635                 rv = mc->sfmode == MCAST_EXCLUDE;
636         } else {
637                 int i;
638
639                 for (i = 0; i < psl->sl_count; i++) {
640                         if (ipv6_addr_equal(&psl->sl_addr[i], src_addr))
641                                 break;
642                 }
643                 if (mc->sfmode == MCAST_INCLUDE && i >= psl->sl_count)
644                         rv = false;
645                 if (mc->sfmode == MCAST_EXCLUDE && i < psl->sl_count)
646                         rv = false;
647         }
648         rcu_read_unlock();
649
650         return rv;
651 }
652
653 static void igmp6_group_added(struct ifmcaddr6 *mc)
654 {
655         struct net_device *dev = mc->idev->dev;
656         char buf[MAX_ADDR_LEN];
657
658         if (IPV6_ADDR_MC_SCOPE(&mc->mca_addr) <
659             IPV6_ADDR_SCOPE_LINKLOCAL)
660                 return;
661
662         if (!(mc->mca_flags&MAF_LOADED)) {
663                 mc->mca_flags |= MAF_LOADED;
664                 if (ndisc_mc_map(&mc->mca_addr, buf, dev, 0) == 0)
665                         dev_mc_add(dev, buf);
666         }
667
668         if (!(dev->flags & IFF_UP) || (mc->mca_flags & MAF_NOREPORT))
669                 return;
670
671         if (mld_in_v1_mode(mc->idev)) {
672                 igmp6_join_group(mc);
673                 return;
674         }
675         /* else v2 */
676
677         /* Based on RFC3810 6.1, for newly added INCLUDE SSM, we
678          * should not send filter-mode change record as the mode
679          * should be from IN() to IN(A).
680          */
681         if (mc->mca_sfmode == MCAST_EXCLUDE)
682                 mc->mca_crcount = mc->idev->mc_qrv;
683
684         mld_ifc_event(mc->idev);
685 }
686
687 static void igmp6_group_dropped(struct ifmcaddr6 *mc)
688 {
689         struct net_device *dev = mc->idev->dev;
690         char buf[MAX_ADDR_LEN];
691
692         if (IPV6_ADDR_MC_SCOPE(&mc->mca_addr) <
693             IPV6_ADDR_SCOPE_LINKLOCAL)
694                 return;
695
696         if (mc->mca_flags&MAF_LOADED) {
697                 mc->mca_flags &= ~MAF_LOADED;
698                 if (ndisc_mc_map(&mc->mca_addr, buf, dev, 0) == 0)
699                         dev_mc_del(dev, buf);
700         }
701
702         if (mc->mca_flags & MAF_NOREPORT)
703                 return;
704
705         if (!mc->idev->dead)
706                 igmp6_leave_group(mc);
707
708         if (cancel_delayed_work(&mc->mca_work))
709                 refcount_dec(&mc->mca_refcnt);
710 }
711
712 /*
713  * deleted ifmcaddr6 manipulation
714  */
715 static void mld_add_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
716 {
717         struct ifmcaddr6 *pmc;
718
719         /* this is an "ifmcaddr6" for convenience; only the fields below
720          * are actually used. In particular, the refcnt and users are not
721          * used for management of the delete list. Using the same structure
722          * for deleted items allows change reports to use common code with
723          * non-deleted or query-response MCA's.
724          */
725         pmc = kzalloc(sizeof(*pmc), GFP_KERNEL);
726         if (!pmc)
727                 return;
728
729         pmc->idev = im->idev;
730         in6_dev_hold(idev);
731         pmc->mca_addr = im->mca_addr;
732         pmc->mca_crcount = idev->mc_qrv;
733         pmc->mca_sfmode = im->mca_sfmode;
734         if (pmc->mca_sfmode == MCAST_INCLUDE) {
735                 struct ip6_sf_list *psf;
736
737                 rcu_assign_pointer(pmc->mca_tomb,
738                                    rtnl_dereference(im->mca_tomb));
739                 rcu_assign_pointer(pmc->mca_sources,
740                                    rtnl_dereference(im->mca_sources));
741                 RCU_INIT_POINTER(im->mca_tomb, NULL);
742                 RCU_INIT_POINTER(im->mca_sources, NULL);
743
744                 for_each_psf_rtnl(pmc, psf)
745                         psf->sf_crcount = pmc->mca_crcount;
746         }
747
748         rcu_assign_pointer(pmc->next, idev->mc_tomb);
749         rcu_assign_pointer(idev->mc_tomb, pmc);
750 }
751
752 static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
753 {
754         struct ip6_sf_list *psf, *sources, *tomb;
755         struct in6_addr *pmca = &im->mca_addr;
756         struct ifmcaddr6 *pmc, *pmc_prev;
757
758         pmc_prev = NULL;
759         for_each_mc_tomb(idev, pmc) {
760                 if (ipv6_addr_equal(&pmc->mca_addr, pmca))
761                         break;
762                 pmc_prev = pmc;
763         }
764         if (pmc) {
765                 if (pmc_prev)
766                         rcu_assign_pointer(pmc_prev->next, pmc->next);
767                 else
768                         rcu_assign_pointer(idev->mc_tomb, pmc->next);
769         }
770
771         if (pmc) {
772                 im->idev = pmc->idev;
773                 if (im->mca_sfmode == MCAST_INCLUDE) {
774                         tomb = rcu_replace_pointer(im->mca_tomb,
775                                                    rtnl_dereference(pmc->mca_tomb),
776                                                    lockdep_rtnl_is_held());
777                         rcu_assign_pointer(pmc->mca_tomb, tomb);
778
779                         sources = rcu_replace_pointer(im->mca_sources,
780                                                       rtnl_dereference(pmc->mca_sources),
781                                                       lockdep_rtnl_is_held());
782                         rcu_assign_pointer(pmc->mca_sources, sources);
783                         for_each_psf_rtnl(im, psf)
784                                 psf->sf_crcount = idev->mc_qrv;
785                 } else {
786                         im->mca_crcount = idev->mc_qrv;
787                 }
788                 in6_dev_put(pmc->idev);
789                 ip6_mc_clear_src(pmc);
790                 kfree_rcu(pmc, rcu);
791         }
792 }
793
794 static void mld_clear_delrec(struct inet6_dev *idev)
795 {
796         struct ifmcaddr6 *pmc, *nextpmc;
797
798         pmc = rtnl_dereference(idev->mc_tomb);
799         RCU_INIT_POINTER(idev->mc_tomb, NULL);
800
801         for (; pmc; pmc = nextpmc) {
802                 nextpmc = rtnl_dereference(pmc->next);
803                 ip6_mc_clear_src(pmc);
804                 in6_dev_put(pmc->idev);
805                 kfree_rcu(pmc, rcu);
806         }
807
808         /* clear dead sources, too */
809         for_each_mc_rtnl(idev, pmc) {
810                 struct ip6_sf_list *psf, *psf_next;
811
812                 psf = rtnl_dereference(pmc->mca_tomb);
813                 RCU_INIT_POINTER(pmc->mca_tomb, NULL);
814                 for (; psf; psf = psf_next) {
815                         psf_next = rtnl_dereference(psf->sf_next);
816                         kfree_rcu(psf, rcu);
817                 }
818         }
819 }
820
821 static void mld_clear_query(struct inet6_dev *idev)
822 {
823         struct sk_buff *skb;
824
825         spin_lock_bh(&idev->mc_query_lock);
826         while ((skb = __skb_dequeue(&idev->mc_query_queue)))
827                 kfree_skb(skb);
828         spin_unlock_bh(&idev->mc_query_lock);
829 }
830
831 static void mld_clear_report(struct inet6_dev *idev)
832 {
833         struct sk_buff *skb;
834
835         spin_lock_bh(&idev->mc_report_lock);
836         while ((skb = __skb_dequeue(&idev->mc_report_queue)))
837                 kfree_skb(skb);
838         spin_unlock_bh(&idev->mc_report_lock);
839 }
840
841 static void mca_get(struct ifmcaddr6 *mc)
842 {
843         refcount_inc(&mc->mca_refcnt);
844 }
845
846 static void ma_put(struct ifmcaddr6 *mc)
847 {
848         if (refcount_dec_and_test(&mc->mca_refcnt)) {
849                 in6_dev_put(mc->idev);
850                 kfree_rcu(mc, rcu);
851         }
852 }
853
854 static struct ifmcaddr6 *mca_alloc(struct inet6_dev *idev,
855                                    const struct in6_addr *addr,
856                                    unsigned int mode)
857 {
858         struct ifmcaddr6 *mc;
859
860         mc = kzalloc(sizeof(*mc), GFP_KERNEL);
861         if (!mc)
862                 return NULL;
863
864         INIT_DELAYED_WORK(&mc->mca_work, mld_mca_work);
865
866         mc->mca_addr = *addr;
867         mc->idev = idev; /* reference taken by caller */
868         mc->mca_users = 1;
869         /* mca_stamp should be updated upon changes */
870         mc->mca_cstamp = mc->mca_tstamp = jiffies;
871         refcount_set(&mc->mca_refcnt, 1);
872
873         mc->mca_sfmode = mode;
874         mc->mca_sfcount[mode] = 1;
875
876         if (ipv6_addr_is_ll_all_nodes(&mc->mca_addr) ||
877             IPV6_ADDR_MC_SCOPE(&mc->mca_addr) < IPV6_ADDR_SCOPE_LINKLOCAL)
878                 mc->mca_flags |= MAF_NOREPORT;
879
880         return mc;
881 }
882
883 /*
884  *      device multicast group inc (add if not found)
885  */
886 static int __ipv6_dev_mc_inc(struct net_device *dev,
887                              const struct in6_addr *addr, unsigned int mode)
888 {
889         struct ifmcaddr6 *mc;
890         struct inet6_dev *idev;
891
892         ASSERT_RTNL();
893
894         /* we need to take a reference on idev */
895         idev = in6_dev_get(dev);
896
897         if (!idev)
898                 return -EINVAL;
899
900         if (idev->dead) {
901                 in6_dev_put(idev);
902                 return -ENODEV;
903         }
904
905         for_each_mc_rtnl(idev, mc) {
906                 if (ipv6_addr_equal(&mc->mca_addr, addr)) {
907                         mc->mca_users++;
908                         ip6_mc_add_src(idev, &mc->mca_addr, mode, 0, NULL, 0);
909                         in6_dev_put(idev);
910                         return 0;
911                 }
912         }
913
914         mc = mca_alloc(idev, addr, mode);
915         if (!mc) {
916                 in6_dev_put(idev);
917                 return -ENOMEM;
918         }
919
920         rcu_assign_pointer(mc->next, idev->mc_list);
921         rcu_assign_pointer(idev->mc_list, mc);
922
923         mca_get(mc);
924
925         mld_del_delrec(idev, mc);
926         igmp6_group_added(mc);
927         ma_put(mc);
928         return 0;
929 }
930
931 int ipv6_dev_mc_inc(struct net_device *dev, const struct in6_addr *addr)
932 {
933         return __ipv6_dev_mc_inc(dev, addr, MCAST_EXCLUDE);
934 }
935 EXPORT_SYMBOL(ipv6_dev_mc_inc);
936
937 /*
938  *      device multicast group del
939  */
940 int __ipv6_dev_mc_dec(struct inet6_dev *idev, const struct in6_addr *addr)
941 {
942         struct ifmcaddr6 *ma, __rcu **map;
943
944         ASSERT_RTNL();
945
946         for (map = &idev->mc_list;
947              (ma = rtnl_dereference(*map));
948              map = &ma->next) {
949                 if (ipv6_addr_equal(&ma->mca_addr, addr)) {
950                         if (--ma->mca_users == 0) {
951                                 *map = ma->next;
952
953                                 igmp6_group_dropped(ma);
954                                 ip6_mc_clear_src(ma);
955
956                                 ma_put(ma);
957                                 return 0;
958                         }
959                         return 0;
960                 }
961         }
962
963         return -ENOENT;
964 }
965
966 int ipv6_dev_mc_dec(struct net_device *dev, const struct in6_addr *addr)
967 {
968         struct inet6_dev *idev;
969         int err;
970
971         ASSERT_RTNL();
972
973         idev = __in6_dev_get(dev);
974         if (!idev)
975                 err = -ENODEV;
976         else
977                 err = __ipv6_dev_mc_dec(idev, addr);
978
979         return err;
980 }
981 EXPORT_SYMBOL(ipv6_dev_mc_dec);
982
983 /*
984  *      check if the interface/address pair is valid
985  */
986 bool ipv6_chk_mcast_addr(struct net_device *dev, const struct in6_addr *group,
987                          const struct in6_addr *src_addr)
988 {
989         struct inet6_dev *idev;
990         struct ifmcaddr6 *mc;
991         bool rv = false;
992
993         rcu_read_lock();
994         idev = __in6_dev_get(dev);
995         if (idev) {
996                 for_each_mc_rcu(idev, mc) {
997                         if (ipv6_addr_equal(&mc->mca_addr, group))
998                                 break;
999                 }
1000                 if (mc) {
1001                         if (src_addr && !ipv6_addr_any(src_addr)) {
1002                                 struct ip6_sf_list *psf;
1003
1004                                 for_each_psf_rcu(mc, psf) {
1005                                         if (ipv6_addr_equal(&psf->sf_addr, src_addr))
1006                                                 break;
1007                                 }
1008                                 if (psf)
1009                                         rv = psf->sf_count[MCAST_INCLUDE] ||
1010                                                 psf->sf_count[MCAST_EXCLUDE] !=
1011                                                 mc->mca_sfcount[MCAST_EXCLUDE];
1012                                 else
1013                                         rv = mc->mca_sfcount[MCAST_EXCLUDE] != 0;
1014                         } else
1015                                 rv = true; /* don't filter unspecified source */
1016                 }
1017         }
1018         rcu_read_unlock();
1019         return rv;
1020 }
1021
1022 static void mld_gq_start_work(struct inet6_dev *idev)
1023 {
1024         unsigned long tv = prandom_u32() % idev->mc_maxdelay;
1025
1026         idev->mc_gq_running = 1;
1027         if (!mod_delayed_work(mld_wq, &idev->mc_gq_work, tv + 2))
1028                 in6_dev_hold(idev);
1029 }
1030
1031 static void mld_gq_stop_work(struct inet6_dev *idev)
1032 {
1033         idev->mc_gq_running = 0;
1034         if (cancel_delayed_work(&idev->mc_gq_work))
1035                 __in6_dev_put(idev);
1036 }
1037
1038 static void mld_ifc_start_work(struct inet6_dev *idev, unsigned long delay)
1039 {
1040         unsigned long tv = prandom_u32() % delay;
1041
1042         if (!mod_delayed_work(mld_wq, &idev->mc_ifc_work, tv + 2))
1043                 in6_dev_hold(idev);
1044 }
1045
1046 static void mld_ifc_stop_work(struct inet6_dev *idev)
1047 {
1048         idev->mc_ifc_count = 0;
1049         if (cancel_delayed_work(&idev->mc_ifc_work))
1050                 __in6_dev_put(idev);
1051 }
1052
1053 static void mld_dad_start_work(struct inet6_dev *idev, unsigned long delay)
1054 {
1055         unsigned long tv = prandom_u32() % delay;
1056
1057         if (!mod_delayed_work(mld_wq, &idev->mc_dad_work, tv + 2))
1058                 in6_dev_hold(idev);
1059 }
1060
1061 static void mld_dad_stop_work(struct inet6_dev *idev)
1062 {
1063         if (cancel_delayed_work(&idev->mc_dad_work))
1064                 __in6_dev_put(idev);
1065 }
1066
1067 static void mld_query_stop_work(struct inet6_dev *idev)
1068 {
1069         spin_lock_bh(&idev->mc_query_lock);
1070         if (cancel_delayed_work(&idev->mc_query_work))
1071                 __in6_dev_put(idev);
1072         spin_unlock_bh(&idev->mc_query_lock);
1073 }
1074
1075 static void mld_report_stop_work(struct inet6_dev *idev)
1076 {
1077         if (cancel_delayed_work_sync(&idev->mc_report_work))
1078                 __in6_dev_put(idev);
1079 }
1080
1081 /*
1082  * IGMP handling (alias multicast ICMPv6 messages)
1083  */
1084 static void igmp6_group_queried(struct ifmcaddr6 *ma, unsigned long resptime)
1085 {
1086         unsigned long delay = resptime;
1087
1088         /* Do not start work for these addresses */
1089         if (ipv6_addr_is_ll_all_nodes(&ma->mca_addr) ||
1090             IPV6_ADDR_MC_SCOPE(&ma->mca_addr) < IPV6_ADDR_SCOPE_LINKLOCAL)
1091                 return;
1092
1093         if (cancel_delayed_work(&ma->mca_work)) {
1094                 refcount_dec(&ma->mca_refcnt);
1095                 delay = ma->mca_work.timer.expires - jiffies;
1096         }
1097
1098         if (delay >= resptime)
1099                 delay = prandom_u32() % resptime;
1100
1101         if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
1102                 refcount_inc(&ma->mca_refcnt);
1103         ma->mca_flags |= MAF_TIMER_RUNNING;
1104 }
1105
1106 /* mark EXCLUDE-mode sources */
1107 static bool mld_xmarksources(struct ifmcaddr6 *pmc, int nsrcs,
1108                              const struct in6_addr *srcs)
1109 {
1110         struct ip6_sf_list *psf;
1111         int i, scount;
1112
1113         scount = 0;
1114         for_each_psf_rtnl(pmc, psf) {
1115                 if (scount == nsrcs)
1116                         break;
1117                 for (i = 0; i < nsrcs; i++) {
1118                         /* skip inactive filters */
1119                         if (psf->sf_count[MCAST_INCLUDE] ||
1120                             pmc->mca_sfcount[MCAST_EXCLUDE] !=
1121                             psf->sf_count[MCAST_EXCLUDE])
1122                                 break;
1123                         if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) {
1124                                 scount++;
1125                                 break;
1126                         }
1127                 }
1128         }
1129         pmc->mca_flags &= ~MAF_GSQUERY;
1130         if (scount == nsrcs)    /* all sources excluded */
1131                 return false;
1132         return true;
1133 }
1134
1135 static bool mld_marksources(struct ifmcaddr6 *pmc, int nsrcs,
1136                             const struct in6_addr *srcs)
1137 {
1138         struct ip6_sf_list *psf;
1139         int i, scount;
1140
1141         if (pmc->mca_sfmode == MCAST_EXCLUDE)
1142                 return mld_xmarksources(pmc, nsrcs, srcs);
1143
1144         /* mark INCLUDE-mode sources */
1145
1146         scount = 0;
1147         for_each_psf_rtnl(pmc, psf) {
1148                 if (scount == nsrcs)
1149                         break;
1150                 for (i = 0; i < nsrcs; i++) {
1151                         if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) {
1152                                 psf->sf_gsresp = 1;
1153                                 scount++;
1154                                 break;
1155                         }
1156                 }
1157         }
1158         if (!scount) {
1159                 pmc->mca_flags &= ~MAF_GSQUERY;
1160                 return false;
1161         }
1162         pmc->mca_flags |= MAF_GSQUERY;
1163         return true;
1164 }
1165
1166 static int mld_force_mld_version(const struct inet6_dev *idev)
1167 {
1168         /* Normally, both are 0 here. If enforcement to a particular is
1169          * being used, individual device enforcement will have a lower
1170          * precedence over 'all' device (.../conf/all/force_mld_version).
1171          */
1172
1173         if (dev_net(idev->dev)->ipv6.devconf_all->force_mld_version != 0)
1174                 return dev_net(idev->dev)->ipv6.devconf_all->force_mld_version;
1175         else
1176                 return idev->cnf.force_mld_version;
1177 }
1178
1179 static bool mld_in_v2_mode_only(const struct inet6_dev *idev)
1180 {
1181         return mld_force_mld_version(idev) == 2;
1182 }
1183
1184 static bool mld_in_v1_mode_only(const struct inet6_dev *idev)
1185 {
1186         return mld_force_mld_version(idev) == 1;
1187 }
1188
1189 static bool mld_in_v1_mode(const struct inet6_dev *idev)
1190 {
1191         if (mld_in_v2_mode_only(idev))
1192                 return false;
1193         if (mld_in_v1_mode_only(idev))
1194                 return true;
1195         if (idev->mc_v1_seen && time_before(jiffies, idev->mc_v1_seen))
1196                 return true;
1197
1198         return false;
1199 }
1200
1201 static void mld_set_v1_mode(struct inet6_dev *idev)
1202 {
1203         /* RFC3810, relevant sections:
1204          *  - 9.1. Robustness Variable
1205          *  - 9.2. Query Interval
1206          *  - 9.3. Query Response Interval
1207          *  - 9.12. Older Version Querier Present Timeout
1208          */
1209         unsigned long switchback;
1210
1211         switchback = (idev->mc_qrv * idev->mc_qi) + idev->mc_qri;
1212
1213         idev->mc_v1_seen = jiffies + switchback;
1214 }
1215
1216 static void mld_update_qrv(struct inet6_dev *idev,
1217                            const struct mld2_query *mlh2)
1218 {
1219         /* RFC3810, relevant sections:
1220          *  - 5.1.8. QRV (Querier's Robustness Variable)
1221          *  - 9.1. Robustness Variable
1222          */
1223
1224         /* The value of the Robustness Variable MUST NOT be zero,
1225          * and SHOULD NOT be one. Catch this here if we ever run
1226          * into such a case in future.
1227          */
1228         const int min_qrv = min(MLD_QRV_DEFAULT, sysctl_mld_qrv);
1229         WARN_ON(idev->mc_qrv == 0);
1230
1231         if (mlh2->mld2q_qrv > 0)
1232                 idev->mc_qrv = mlh2->mld2q_qrv;
1233
1234         if (unlikely(idev->mc_qrv < min_qrv)) {
1235                 net_warn_ratelimited("IPv6: MLD: clamping QRV from %u to %u!\n",
1236                                      idev->mc_qrv, min_qrv);
1237                 idev->mc_qrv = min_qrv;
1238         }
1239 }
1240
1241 static void mld_update_qi(struct inet6_dev *idev,
1242                           const struct mld2_query *mlh2)
1243 {
1244         /* RFC3810, relevant sections:
1245          *  - 5.1.9. QQIC (Querier's Query Interval Code)
1246          *  - 9.2. Query Interval
1247          *  - 9.12. Older Version Querier Present Timeout
1248          *    (the [Query Interval] in the last Query received)
1249          */
1250         unsigned long mc_qqi;
1251
1252         if (mlh2->mld2q_qqic < 128) {
1253                 mc_qqi = mlh2->mld2q_qqic;
1254         } else {
1255                 unsigned long mc_man, mc_exp;
1256
1257                 mc_exp = MLDV2_QQIC_EXP(mlh2->mld2q_qqic);
1258                 mc_man = MLDV2_QQIC_MAN(mlh2->mld2q_qqic);
1259
1260                 mc_qqi = (mc_man | 0x10) << (mc_exp + 3);
1261         }
1262
1263         idev->mc_qi = mc_qqi * HZ;
1264 }
1265
1266 static void mld_update_qri(struct inet6_dev *idev,
1267                            const struct mld2_query *mlh2)
1268 {
1269         /* RFC3810, relevant sections:
1270          *  - 5.1.3. Maximum Response Code
1271          *  - 9.3. Query Response Interval
1272          */
1273         idev->mc_qri = msecs_to_jiffies(mldv2_mrc(mlh2));
1274 }
1275
1276 static int mld_process_v1(struct inet6_dev *idev, struct mld_msg *mld,
1277                           unsigned long *max_delay, bool v1_query)
1278 {
1279         unsigned long mldv1_md;
1280
1281         /* Ignore v1 queries */
1282         if (mld_in_v2_mode_only(idev))
1283                 return -EINVAL;
1284
1285         mldv1_md = ntohs(mld->mld_maxdelay);
1286
1287         /* When in MLDv1 fallback and a MLDv2 router start-up being
1288          * unaware of current MLDv1 operation, the MRC == MRD mapping
1289          * only works when the exponential algorithm is not being
1290          * used (as MLDv1 is unaware of such things).
1291          *
1292          * According to the RFC author, the MLDv2 implementations
1293          * he's aware of all use a MRC < 32768 on start up queries.
1294          *
1295          * Thus, should we *ever* encounter something else larger
1296          * than that, just assume the maximum possible within our
1297          * reach.
1298          */
1299         if (!v1_query)
1300                 mldv1_md = min(mldv1_md, MLDV1_MRD_MAX_COMPAT);
1301
1302         *max_delay = max(msecs_to_jiffies(mldv1_md), 1UL);
1303
1304         /* MLDv1 router present: we need to go into v1 mode *only*
1305          * when an MLDv1 query is received as per section 9.12. of
1306          * RFC3810! And we know from RFC2710 section 3.7 that MLDv1
1307          * queries MUST be of exactly 24 octets.
1308          */
1309         if (v1_query)
1310                 mld_set_v1_mode(idev);
1311
1312         /* cancel MLDv2 report work */
1313         mld_gq_stop_work(idev);
1314         /* cancel the interface change work */
1315         mld_ifc_stop_work(idev);
1316         /* clear deleted report items */
1317         mld_clear_delrec(idev);
1318
1319         return 0;
1320 }
1321
1322 static int mld_process_v2(struct inet6_dev *idev, struct mld2_query *mld,
1323                           unsigned long *max_delay)
1324 {
1325         *max_delay = max(msecs_to_jiffies(mldv2_mrc(mld)), 1UL);
1326
1327         mld_update_qrv(idev, mld);
1328         mld_update_qi(idev, mld);
1329         mld_update_qri(idev, mld);
1330
1331         idev->mc_maxdelay = *max_delay;
1332
1333         return 0;
1334 }
1335
1336 /* called with rcu_read_lock() */
1337 int igmp6_event_query(struct sk_buff *skb)
1338 {
1339         struct inet6_dev *idev = __in6_dev_get(skb->dev);
1340
1341         if (!idev)
1342                 return -EINVAL;
1343
1344         if (idev->dead) {
1345                 kfree_skb(skb);
1346                 return -ENODEV;
1347         }
1348
1349         spin_lock_bh(&idev->mc_query_lock);
1350         if (skb_queue_len(&idev->mc_query_queue) < MLD_MAX_SKBS) {
1351                 __skb_queue_tail(&idev->mc_query_queue, skb);
1352                 if (!mod_delayed_work(mld_wq, &idev->mc_query_work, 0))
1353                         in6_dev_hold(idev);
1354         }
1355         spin_unlock_bh(&idev->mc_query_lock);
1356
1357         return 0;
1358 }
1359
1360 static void __mld_query_work(struct sk_buff *skb)
1361 {
1362         struct mld2_query *mlh2 = NULL;
1363         const struct in6_addr *group;
1364         unsigned long max_delay;
1365         struct inet6_dev *idev;
1366         struct ifmcaddr6 *ma;
1367         struct mld_msg *mld;
1368         int group_type;
1369         int mark = 0;
1370         int len, err;
1371
1372         if (!pskb_may_pull(skb, sizeof(struct in6_addr)))
1373                 goto out;
1374
1375         /* compute payload length excluding extension headers */
1376         len = ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr);
1377         len -= skb_network_header_len(skb);
1378
1379         /* RFC3810 6.2
1380          * Upon reception of an MLD message that contains a Query, the node
1381          * checks if the source address of the message is a valid link-local
1382          * address, if the Hop Limit is set to 1, and if the Router Alert
1383          * option is present in the Hop-By-Hop Options header of the IPv6
1384          * packet.  If any of these checks fails, the packet is dropped.
1385          */
1386         if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL) ||
1387             ipv6_hdr(skb)->hop_limit != 1 ||
1388             !(IP6CB(skb)->flags & IP6SKB_ROUTERALERT) ||
1389             IP6CB(skb)->ra != htons(IPV6_OPT_ROUTERALERT_MLD))
1390                 goto out;
1391
1392         idev = __in6_dev_get(skb->dev);
1393         if (!idev)
1394                 goto out;
1395
1396         mld = (struct mld_msg *)icmp6_hdr(skb);
1397         group = &mld->mld_mca;
1398         group_type = ipv6_addr_type(group);
1399
1400         if (group_type != IPV6_ADDR_ANY &&
1401             !(group_type&IPV6_ADDR_MULTICAST))
1402                 goto out;
1403
1404         if (len < MLD_V1_QUERY_LEN) {
1405                 goto out;
1406         } else if (len == MLD_V1_QUERY_LEN || mld_in_v1_mode(idev)) {
1407                 err = mld_process_v1(idev, mld, &max_delay,
1408                                      len == MLD_V1_QUERY_LEN);
1409                 if (err < 0)
1410                         goto out;
1411         } else if (len >= MLD_V2_QUERY_LEN_MIN) {
1412                 int srcs_offset = sizeof(struct mld2_query) -
1413                                   sizeof(struct icmp6hdr);
1414
1415                 if (!pskb_may_pull(skb, srcs_offset))
1416                         goto out;
1417
1418                 mlh2 = (struct mld2_query *)skb_transport_header(skb);
1419
1420                 err = mld_process_v2(idev, mlh2, &max_delay);
1421                 if (err < 0)
1422                         goto out;
1423
1424                 if (group_type == IPV6_ADDR_ANY) { /* general query */
1425                         if (mlh2->mld2q_nsrcs)
1426                                 goto out; /* no sources allowed */
1427
1428                         mld_gq_start_work(idev);
1429                         goto out;
1430                 }
1431                 /* mark sources to include, if group & source-specific */
1432                 if (mlh2->mld2q_nsrcs != 0) {
1433                         if (!pskb_may_pull(skb, srcs_offset +
1434                             ntohs(mlh2->mld2q_nsrcs) * sizeof(struct in6_addr)))
1435                                 goto out;
1436
1437                         mlh2 = (struct mld2_query *)skb_transport_header(skb);
1438                         mark = 1;
1439                 }
1440         } else {
1441                 goto out;
1442         }
1443
1444         if (group_type == IPV6_ADDR_ANY) {
1445                 for_each_mc_rtnl(idev, ma) {
1446                         igmp6_group_queried(ma, max_delay);
1447                 }
1448         } else {
1449                 for_each_mc_rtnl(idev, ma) {
1450                         if (!ipv6_addr_equal(group, &ma->mca_addr))
1451                                 continue;
1452                         if (ma->mca_flags & MAF_TIMER_RUNNING) {
1453                                 /* gsquery <- gsquery && mark */
1454                                 if (!mark)
1455                                         ma->mca_flags &= ~MAF_GSQUERY;
1456                         } else {
1457                                 /* gsquery <- mark */
1458                                 if (mark)
1459                                         ma->mca_flags |= MAF_GSQUERY;
1460                                 else
1461                                         ma->mca_flags &= ~MAF_GSQUERY;
1462                         }
1463                         if (!(ma->mca_flags & MAF_GSQUERY) ||
1464                             mld_marksources(ma, ntohs(mlh2->mld2q_nsrcs), mlh2->mld2q_srcs))
1465                                 igmp6_group_queried(ma, max_delay);
1466                         break;
1467                 }
1468         }
1469
1470 out:
1471         consume_skb(skb);
1472 }
1473
1474 static void mld_query_work(struct work_struct *work)
1475 {
1476         struct inet6_dev *idev = container_of(to_delayed_work(work),
1477                                               struct inet6_dev,
1478                                               mc_query_work);
1479         struct sk_buff_head q;
1480         struct sk_buff *skb;
1481         bool rework = false;
1482         int cnt = 0;
1483
1484         skb_queue_head_init(&q);
1485
1486         spin_lock_bh(&idev->mc_query_lock);
1487         while ((skb = __skb_dequeue(&idev->mc_query_queue))) {
1488                 __skb_queue_tail(&q, skb);
1489
1490                 if (++cnt >= MLD_MAX_QUEUE) {
1491                         rework = true;
1492                         schedule_delayed_work(&idev->mc_query_work, 0);
1493                         break;
1494                 }
1495         }
1496         spin_unlock_bh(&idev->mc_query_lock);
1497
1498         rtnl_lock();
1499         while ((skb = __skb_dequeue(&q)))
1500                 __mld_query_work(skb);
1501         rtnl_unlock();
1502
1503         if (!rework)
1504                 in6_dev_put(idev);
1505 }
1506
1507 /* called with rcu_read_lock() */
1508 int igmp6_event_report(struct sk_buff *skb)
1509 {
1510         struct inet6_dev *idev = __in6_dev_get(skb->dev);
1511
1512         if (!idev)
1513                 return -EINVAL;
1514
1515         if (idev->dead) {
1516                 kfree_skb(skb);
1517                 return -ENODEV;
1518         }
1519
1520         spin_lock_bh(&idev->mc_report_lock);
1521         if (skb_queue_len(&idev->mc_report_queue) < MLD_MAX_SKBS) {
1522                 __skb_queue_tail(&idev->mc_report_queue, skb);
1523                 if (!mod_delayed_work(mld_wq, &idev->mc_report_work, 0))
1524                         in6_dev_hold(idev);
1525         }
1526         spin_unlock_bh(&idev->mc_report_lock);
1527
1528         return 0;
1529 }
1530
1531 static void __mld_report_work(struct sk_buff *skb)
1532 {
1533         struct ifmcaddr6 *ma;
1534         struct inet6_dev *idev;
1535         struct mld_msg *mld;
1536         int addr_type;
1537
1538         /* Our own report looped back. Ignore it. */
1539         if (skb->pkt_type == PACKET_LOOPBACK)
1540                 goto out;
1541
1542         /* send our report if the MC router may not have heard this report */
1543         if (skb->pkt_type != PACKET_MULTICAST &&
1544             skb->pkt_type != PACKET_BROADCAST)
1545                 goto out;
1546
1547         if (!pskb_may_pull(skb, sizeof(*mld) - sizeof(struct icmp6hdr)))
1548                 goto out;
1549
1550         mld = (struct mld_msg *)icmp6_hdr(skb);
1551
1552         /* Drop reports with not link local source */
1553         addr_type = ipv6_addr_type(&ipv6_hdr(skb)->saddr);
1554         if (addr_type != IPV6_ADDR_ANY &&
1555             !(addr_type&IPV6_ADDR_LINKLOCAL))
1556                 goto out;
1557
1558         idev = __in6_dev_get(skb->dev);
1559         if (!idev)
1560                 goto out;
1561
1562         /*
1563          *      Cancel the work for this group
1564          */
1565
1566         for_each_mc_rtnl(idev, ma) {
1567                 if (ipv6_addr_equal(&ma->mca_addr, &mld->mld_mca)) {
1568                         if (cancel_delayed_work(&ma->mca_work))
1569                                 refcount_dec(&ma->mca_refcnt);
1570                         ma->mca_flags &= ~(MAF_LAST_REPORTER |
1571                                            MAF_TIMER_RUNNING);
1572                         break;
1573                 }
1574         }
1575
1576 out:
1577         consume_skb(skb);
1578 }
1579
1580 static void mld_report_work(struct work_struct *work)
1581 {
1582         struct inet6_dev *idev = container_of(to_delayed_work(work),
1583                                               struct inet6_dev,
1584                                               mc_report_work);
1585         struct sk_buff_head q;
1586         struct sk_buff *skb;
1587         bool rework = false;
1588         int cnt = 0;
1589
1590         skb_queue_head_init(&q);
1591         spin_lock_bh(&idev->mc_report_lock);
1592         while ((skb = __skb_dequeue(&idev->mc_report_queue))) {
1593                 __skb_queue_tail(&q, skb);
1594
1595                 if (++cnt >= MLD_MAX_QUEUE) {
1596                         rework = true;
1597                         schedule_delayed_work(&idev->mc_report_work, 0);
1598                         break;
1599                 }
1600         }
1601         spin_unlock_bh(&idev->mc_report_lock);
1602
1603         rtnl_lock();
1604         while ((skb = __skb_dequeue(&q)))
1605                 __mld_report_work(skb);
1606         rtnl_unlock();
1607
1608         if (!rework)
1609                 in6_dev_put(idev);
1610 }
1611
1612 static bool is_in(struct ifmcaddr6 *pmc, struct ip6_sf_list *psf, int type,
1613                   int gdeleted, int sdeleted)
1614 {
1615         switch (type) {
1616         case MLD2_MODE_IS_INCLUDE:
1617         case MLD2_MODE_IS_EXCLUDE:
1618                 if (gdeleted || sdeleted)
1619                         return false;
1620                 if (!((pmc->mca_flags & MAF_GSQUERY) && !psf->sf_gsresp)) {
1621                         if (pmc->mca_sfmode == MCAST_INCLUDE)
1622                                 return true;
1623                         /* don't include if this source is excluded
1624                          * in all filters
1625                          */
1626                         if (psf->sf_count[MCAST_INCLUDE])
1627                                 return type == MLD2_MODE_IS_INCLUDE;
1628                         return pmc->mca_sfcount[MCAST_EXCLUDE] ==
1629                                 psf->sf_count[MCAST_EXCLUDE];
1630                 }
1631                 return false;
1632         case MLD2_CHANGE_TO_INCLUDE:
1633                 if (gdeleted || sdeleted)
1634                         return false;
1635                 return psf->sf_count[MCAST_INCLUDE] != 0;
1636         case MLD2_CHANGE_TO_EXCLUDE:
1637                 if (gdeleted || sdeleted)
1638                         return false;
1639                 if (pmc->mca_sfcount[MCAST_EXCLUDE] == 0 ||
1640                     psf->sf_count[MCAST_INCLUDE])
1641                         return false;
1642                 return pmc->mca_sfcount[MCAST_EXCLUDE] ==
1643                         psf->sf_count[MCAST_EXCLUDE];
1644         case MLD2_ALLOW_NEW_SOURCES:
1645                 if (gdeleted || !psf->sf_crcount)
1646                         return false;
1647                 return (pmc->mca_sfmode == MCAST_INCLUDE) ^ sdeleted;
1648         case MLD2_BLOCK_OLD_SOURCES:
1649                 if (pmc->mca_sfmode == MCAST_INCLUDE)
1650                         return gdeleted || (psf->sf_crcount && sdeleted);
1651                 return psf->sf_crcount && !gdeleted && !sdeleted;
1652         }
1653         return false;
1654 }
1655
1656 static int
1657 mld_scount(struct ifmcaddr6 *pmc, int type, int gdeleted, int sdeleted)
1658 {
1659         struct ip6_sf_list *psf;
1660         int scount = 0;
1661
1662         for_each_psf_rtnl(pmc, psf) {
1663                 if (!is_in(pmc, psf, type, gdeleted, sdeleted))
1664                         continue;
1665                 scount++;
1666         }
1667         return scount;
1668 }
1669
1670 static void ip6_mc_hdr(struct sock *sk, struct sk_buff *skb,
1671                        struct net_device *dev,
1672                        const struct in6_addr *saddr,
1673                        const struct in6_addr *daddr,
1674                        int proto, int len)
1675 {
1676         struct ipv6hdr *hdr;
1677
1678         skb->protocol = htons(ETH_P_IPV6);
1679         skb->dev = dev;
1680
1681         skb_reset_network_header(skb);
1682         skb_put(skb, sizeof(struct ipv6hdr));
1683         hdr = ipv6_hdr(skb);
1684
1685         ip6_flow_hdr(hdr, 0, 0);
1686
1687         hdr->payload_len = htons(len);
1688         hdr->nexthdr = proto;
1689         hdr->hop_limit = inet6_sk(sk)->hop_limit;
1690
1691         hdr->saddr = *saddr;
1692         hdr->daddr = *daddr;
1693 }
1694
1695 static struct sk_buff *mld_newpack(struct inet6_dev *idev, unsigned int mtu)
1696 {
1697         struct net_device *dev = idev->dev;
1698         struct net *net = dev_net(dev);
1699         struct sock *sk = net->ipv6.igmp_sk;
1700         struct sk_buff *skb;
1701         struct mld2_report *pmr;
1702         struct in6_addr addr_buf;
1703         const struct in6_addr *saddr;
1704         int hlen = LL_RESERVED_SPACE(dev);
1705         int tlen = dev->needed_tailroom;
1706         unsigned int size = mtu + hlen + tlen;
1707         int err;
1708         u8 ra[8] = { IPPROTO_ICMPV6, 0,
1709                      IPV6_TLV_ROUTERALERT, 2, 0, 0,
1710                      IPV6_TLV_PADN, 0 };
1711
1712         /* we assume size > sizeof(ra) here */
1713         /* limit our allocations to order-0 page */
1714         size = min_t(int, size, SKB_MAX_ORDER(0, 0));
1715         skb = sock_alloc_send_skb(sk, size, 1, &err);
1716
1717         if (!skb)
1718                 return NULL;
1719
1720         skb->priority = TC_PRIO_CONTROL;
1721         skb_reserve(skb, hlen);
1722         skb_tailroom_reserve(skb, mtu, tlen);
1723
1724         if (__ipv6_get_lladdr(idev, &addr_buf, IFA_F_TENTATIVE)) {
1725                 /* <draft-ietf-magma-mld-source-05.txt>:
1726                  * use unspecified address as the source address
1727                  * when a valid link-local address is not available.
1728                  */
1729                 saddr = &in6addr_any;
1730         } else
1731                 saddr = &addr_buf;
1732
1733         ip6_mc_hdr(sk, skb, dev, saddr, &mld2_all_mcr, NEXTHDR_HOP, 0);
1734
1735         skb_put_data(skb, ra, sizeof(ra));
1736
1737         skb_set_transport_header(skb, skb_tail_pointer(skb) - skb->data);
1738         skb_put(skb, sizeof(*pmr));
1739         pmr = (struct mld2_report *)skb_transport_header(skb);
1740         pmr->mld2r_type = ICMPV6_MLD2_REPORT;
1741         pmr->mld2r_resv1 = 0;
1742         pmr->mld2r_cksum = 0;
1743         pmr->mld2r_resv2 = 0;
1744         pmr->mld2r_ngrec = 0;
1745         return skb;
1746 }
1747
1748 static void mld_sendpack(struct sk_buff *skb)
1749 {
1750         struct ipv6hdr *pip6 = ipv6_hdr(skb);
1751         struct mld2_report *pmr =
1752                               (struct mld2_report *)skb_transport_header(skb);
1753         int payload_len, mldlen;
1754         struct inet6_dev *idev;
1755         struct net *net = dev_net(skb->dev);
1756         int err;
1757         struct flowi6 fl6;
1758         struct dst_entry *dst;
1759
1760         rcu_read_lock();
1761         idev = __in6_dev_get(skb->dev);
1762         IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
1763
1764         payload_len = (skb_tail_pointer(skb) - skb_network_header(skb)) -
1765                 sizeof(*pip6);
1766         mldlen = skb_tail_pointer(skb) - skb_transport_header(skb);
1767         pip6->payload_len = htons(payload_len);
1768
1769         pmr->mld2r_cksum = csum_ipv6_magic(&pip6->saddr, &pip6->daddr, mldlen,
1770                                            IPPROTO_ICMPV6,
1771                                            csum_partial(skb_transport_header(skb),
1772                                                         mldlen, 0));
1773
1774         icmpv6_flow_init(net->ipv6.igmp_sk, &fl6, ICMPV6_MLD2_REPORT,
1775                          &ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
1776                          skb->dev->ifindex);
1777         dst = icmp6_dst_alloc(skb->dev, &fl6);
1778
1779         err = 0;
1780         if (IS_ERR(dst)) {
1781                 err = PTR_ERR(dst);
1782                 dst = NULL;
1783         }
1784         skb_dst_set(skb, dst);
1785         if (err)
1786                 goto err_out;
1787
1788         err = NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT,
1789                       net, net->ipv6.igmp_sk, skb, NULL, skb->dev,
1790                       dst_output);
1791 out:
1792         if (!err) {
1793                 ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
1794                 ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
1795         } else {
1796                 IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
1797         }
1798
1799         rcu_read_unlock();
1800         return;
1801
1802 err_out:
1803         kfree_skb(skb);
1804         goto out;
1805 }
1806
1807 static int grec_size(struct ifmcaddr6 *pmc, int type, int gdel, int sdel)
1808 {
1809         return sizeof(struct mld2_grec) + 16 * mld_scount(pmc,type,gdel,sdel);
1810 }
1811
1812 static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1813         int type, struct mld2_grec **ppgr, unsigned int mtu)
1814 {
1815         struct mld2_report *pmr;
1816         struct mld2_grec *pgr;
1817
1818         if (!skb) {
1819                 skb = mld_newpack(pmc->idev, mtu);
1820                 if (!skb)
1821                         return NULL;
1822         }
1823         pgr = skb_put(skb, sizeof(struct mld2_grec));
1824         pgr->grec_type = type;
1825         pgr->grec_auxwords = 0;
1826         pgr->grec_nsrcs = 0;
1827         pgr->grec_mca = pmc->mca_addr;  /* structure copy */
1828         pmr = (struct mld2_report *)skb_transport_header(skb);
1829         pmr->mld2r_ngrec = htons(ntohs(pmr->mld2r_ngrec)+1);
1830         *ppgr = pgr;
1831         return skb;
1832 }
1833
1834 #define AVAILABLE(skb)  ((skb) ? skb_availroom(skb) : 0)
1835
1836 static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
1837                                 int type, int gdeleted, int sdeleted,
1838                                 int crsend)
1839 {
1840         struct ip6_sf_list *psf, *psf_prev, *psf_next;
1841         int scount, stotal, first, isquery, truncate;
1842         struct ip6_sf_list __rcu **psf_list;
1843         struct inet6_dev *idev = pmc->idev;
1844         struct net_device *dev = idev->dev;
1845         struct mld2_grec *pgr = NULL;
1846         struct mld2_report *pmr;
1847         unsigned int mtu;
1848
1849         if (pmc->mca_flags & MAF_NOREPORT)
1850                 return skb;
1851
1852         mtu = READ_ONCE(dev->mtu);
1853         if (mtu < IPV6_MIN_MTU)
1854                 return skb;
1855
1856         isquery = type == MLD2_MODE_IS_INCLUDE ||
1857                   type == MLD2_MODE_IS_EXCLUDE;
1858         truncate = type == MLD2_MODE_IS_EXCLUDE ||
1859                     type == MLD2_CHANGE_TO_EXCLUDE;
1860
1861         stotal = scount = 0;
1862
1863         psf_list = sdeleted ? &pmc->mca_tomb : &pmc->mca_sources;
1864
1865         if (!rcu_access_pointer(*psf_list))
1866                 goto empty_source;
1867
1868         pmr = skb ? (struct mld2_report *)skb_transport_header(skb) : NULL;
1869
1870         /* EX and TO_EX get a fresh packet, if needed */
1871         if (truncate) {
1872                 if (pmr && pmr->mld2r_ngrec &&
1873                     AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
1874                         if (skb)
1875                                 mld_sendpack(skb);
1876                         skb = mld_newpack(idev, mtu);
1877                 }
1878         }
1879         first = 1;
1880         psf_prev = NULL;
1881         for (psf = rtnl_dereference(*psf_list);
1882              psf;
1883              psf = psf_next) {
1884                 struct in6_addr *psrc;
1885
1886                 psf_next = rtnl_dereference(psf->sf_next);
1887
1888                 if (!is_in(pmc, psf, type, gdeleted, sdeleted) && !crsend) {
1889                         psf_prev = psf;
1890                         continue;
1891                 }
1892
1893                 /* Based on RFC3810 6.1. Should not send source-list change
1894                  * records when there is a filter mode change.
1895                  */
1896                 if (((gdeleted && pmc->mca_sfmode == MCAST_EXCLUDE) ||
1897                      (!gdeleted && pmc->mca_crcount)) &&
1898                     (type == MLD2_ALLOW_NEW_SOURCES ||
1899                      type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount)
1900                         goto decrease_sf_crcount;
1901
1902                 /* clear marks on query responses */
1903                 if (isquery)
1904                         psf->sf_gsresp = 0;
1905
1906                 if (AVAILABLE(skb) < sizeof(*psrc) +
1907                     first*sizeof(struct mld2_grec)) {
1908                         if (truncate && !first)
1909                                 break;   /* truncate these */
1910                         if (pgr)
1911                                 pgr->grec_nsrcs = htons(scount);
1912                         if (skb)
1913                                 mld_sendpack(skb);
1914                         skb = mld_newpack(idev, mtu);
1915                         first = 1;
1916                         scount = 0;
1917                 }
1918                 if (first) {
1919                         skb = add_grhead(skb, pmc, type, &pgr, mtu);
1920                         first = 0;
1921                 }
1922                 if (!skb)
1923                         return NULL;
1924                 psrc = skb_put(skb, sizeof(*psrc));
1925                 *psrc = psf->sf_addr;
1926                 scount++; stotal++;
1927                 if ((type == MLD2_ALLOW_NEW_SOURCES ||
1928                      type == MLD2_BLOCK_OLD_SOURCES) && psf->sf_crcount) {
1929 decrease_sf_crcount:
1930                         psf->sf_crcount--;
1931                         if ((sdeleted || gdeleted) && psf->sf_crcount == 0) {
1932                                 if (psf_prev)
1933                                         rcu_assign_pointer(psf_prev->sf_next,
1934                                                            rtnl_dereference(psf->sf_next));
1935                                 else
1936                                         rcu_assign_pointer(*psf_list,
1937                                                            rtnl_dereference(psf->sf_next));
1938                                 kfree_rcu(psf, rcu);
1939                                 continue;
1940                         }
1941                 }
1942                 psf_prev = psf;
1943         }
1944
1945 empty_source:
1946         if (!stotal) {
1947                 if (type == MLD2_ALLOW_NEW_SOURCES ||
1948                     type == MLD2_BLOCK_OLD_SOURCES)
1949                         return skb;
1950                 if (pmc->mca_crcount || isquery || crsend) {
1951                         /* make sure we have room for group header */
1952                         if (skb && AVAILABLE(skb) < sizeof(struct mld2_grec)) {
1953                                 mld_sendpack(skb);
1954                                 skb = NULL; /* add_grhead will get a new one */
1955                         }
1956                         skb = add_grhead(skb, pmc, type, &pgr, mtu);
1957                 }
1958         }
1959         if (pgr)
1960                 pgr->grec_nsrcs = htons(scount);
1961
1962         if (isquery)
1963                 pmc->mca_flags &= ~MAF_GSQUERY; /* clear query state */
1964         return skb;
1965 }
1966
1967 static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc)
1968 {
1969         struct sk_buff *skb = NULL;
1970         int type;
1971
1972         if (!pmc) {
1973                 for_each_mc_rtnl(idev, pmc) {
1974                         if (pmc->mca_flags & MAF_NOREPORT)
1975                                 continue;
1976                         if (pmc->mca_sfcount[MCAST_EXCLUDE])
1977                                 type = MLD2_MODE_IS_EXCLUDE;
1978                         else
1979                                 type = MLD2_MODE_IS_INCLUDE;
1980                         skb = add_grec(skb, pmc, type, 0, 0, 0);
1981                 }
1982         } else {
1983                 if (pmc->mca_sfcount[MCAST_EXCLUDE])
1984                         type = MLD2_MODE_IS_EXCLUDE;
1985                 else
1986                         type = MLD2_MODE_IS_INCLUDE;
1987                 skb = add_grec(skb, pmc, type, 0, 0, 0);
1988         }
1989         if (skb)
1990                 mld_sendpack(skb);
1991 }
1992
1993 /*
1994  * remove zero-count source records from a source filter list
1995  */
1996 static void mld_clear_zeros(struct ip6_sf_list __rcu **ppsf)
1997 {
1998         struct ip6_sf_list *psf_prev, *psf_next, *psf;
1999
2000         psf_prev = NULL;
2001         for (psf = rtnl_dereference(*ppsf);
2002              psf;
2003              psf = psf_next) {
2004                 psf_next = rtnl_dereference(psf->sf_next);
2005                 if (psf->sf_crcount == 0) {
2006                         if (psf_prev)
2007                                 rcu_assign_pointer(psf_prev->sf_next,
2008                                                    rtnl_dereference(psf->sf_next));
2009                         else
2010                                 rcu_assign_pointer(*ppsf,
2011                                                    rtnl_dereference(psf->sf_next));
2012                         kfree_rcu(psf, rcu);
2013                 } else {
2014                         psf_prev = psf;
2015                 }
2016         }
2017 }
2018
2019 static void mld_send_cr(struct inet6_dev *idev)
2020 {
2021         struct ifmcaddr6 *pmc, *pmc_prev, *pmc_next;
2022         struct sk_buff *skb = NULL;
2023         int type, dtype;
2024
2025         /* deleted MCA's */
2026         pmc_prev = NULL;
2027         for (pmc = rtnl_dereference(idev->mc_tomb);
2028              pmc;
2029              pmc = pmc_next) {
2030                 pmc_next = rtnl_dereference(pmc->next);
2031                 if (pmc->mca_sfmode == MCAST_INCLUDE) {
2032                         type = MLD2_BLOCK_OLD_SOURCES;
2033                         dtype = MLD2_BLOCK_OLD_SOURCES;
2034                         skb = add_grec(skb, pmc, type, 1, 0, 0);
2035                         skb = add_grec(skb, pmc, dtype, 1, 1, 0);
2036                 }
2037                 if (pmc->mca_crcount) {
2038                         if (pmc->mca_sfmode == MCAST_EXCLUDE) {
2039                                 type = MLD2_CHANGE_TO_INCLUDE;
2040                                 skb = add_grec(skb, pmc, type, 1, 0, 0);
2041                         }
2042                         pmc->mca_crcount--;
2043                         if (pmc->mca_crcount == 0) {
2044                                 mld_clear_zeros(&pmc->mca_tomb);
2045                                 mld_clear_zeros(&pmc->mca_sources);
2046                         }
2047                 }
2048                 if (pmc->mca_crcount == 0 &&
2049                     !rcu_access_pointer(pmc->mca_tomb) &&
2050                     !rcu_access_pointer(pmc->mca_sources)) {
2051                         if (pmc_prev)
2052                                 rcu_assign_pointer(pmc_prev->next, pmc_next);
2053                         else
2054                                 rcu_assign_pointer(idev->mc_tomb, pmc_next);
2055                         in6_dev_put(pmc->idev);
2056                         kfree_rcu(pmc, rcu);
2057                 } else
2058                         pmc_prev = pmc;
2059         }
2060
2061         /* change recs */
2062         for_each_mc_rtnl(idev, pmc) {
2063                 if (pmc->mca_sfcount[MCAST_EXCLUDE]) {
2064                         type = MLD2_BLOCK_OLD_SOURCES;
2065                         dtype = MLD2_ALLOW_NEW_SOURCES;
2066                 } else {
2067                         type = MLD2_ALLOW_NEW_SOURCES;
2068                         dtype = MLD2_BLOCK_OLD_SOURCES;
2069                 }
2070                 skb = add_grec(skb, pmc, type, 0, 0, 0);
2071                 skb = add_grec(skb, pmc, dtype, 0, 1, 0);       /* deleted sources */
2072
2073                 /* filter mode changes */
2074                 if (pmc->mca_crcount) {
2075                         if (pmc->mca_sfmode == MCAST_EXCLUDE)
2076                                 type = MLD2_CHANGE_TO_EXCLUDE;
2077                         else
2078                                 type = MLD2_CHANGE_TO_INCLUDE;
2079                         skb = add_grec(skb, pmc, type, 0, 0, 0);
2080                         pmc->mca_crcount--;
2081                 }
2082         }
2083         if (!skb)
2084                 return;
2085         (void) mld_sendpack(skb);
2086 }
2087
2088 static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
2089 {
2090         struct net *net = dev_net(dev);
2091         struct sock *sk = net->ipv6.igmp_sk;
2092         struct inet6_dev *idev;
2093         struct sk_buff *skb;
2094         struct mld_msg *hdr;
2095         const struct in6_addr *snd_addr, *saddr;
2096         struct in6_addr addr_buf;
2097         int hlen = LL_RESERVED_SPACE(dev);
2098         int tlen = dev->needed_tailroom;
2099         int err, len, payload_len, full_len;
2100         u8 ra[8] = { IPPROTO_ICMPV6, 0,
2101                      IPV6_TLV_ROUTERALERT, 2, 0, 0,
2102                      IPV6_TLV_PADN, 0 };
2103         struct flowi6 fl6;
2104         struct dst_entry *dst;
2105
2106         if (type == ICMPV6_MGM_REDUCTION)
2107                 snd_addr = &in6addr_linklocal_allrouters;
2108         else
2109                 snd_addr = addr;
2110
2111         len = sizeof(struct icmp6hdr) + sizeof(struct in6_addr);
2112         payload_len = len + sizeof(ra);
2113         full_len = sizeof(struct ipv6hdr) + payload_len;
2114
2115         rcu_read_lock();
2116         IP6_UPD_PO_STATS(net, __in6_dev_get(dev),
2117                       IPSTATS_MIB_OUT, full_len);
2118         rcu_read_unlock();
2119
2120         skb = sock_alloc_send_skb(sk, hlen + tlen + full_len, 1, &err);
2121
2122         if (!skb) {
2123                 rcu_read_lock();
2124                 IP6_INC_STATS(net, __in6_dev_get(dev),
2125                               IPSTATS_MIB_OUTDISCARDS);
2126                 rcu_read_unlock();
2127                 return;
2128         }
2129         skb->priority = TC_PRIO_CONTROL;
2130         skb_reserve(skb, hlen);
2131
2132         if (ipv6_get_lladdr(dev, &addr_buf, IFA_F_TENTATIVE)) {
2133                 /* <draft-ietf-magma-mld-source-05.txt>:
2134                  * use unspecified address as the source address
2135                  * when a valid link-local address is not available.
2136                  */
2137                 saddr = &in6addr_any;
2138         } else
2139                 saddr = &addr_buf;
2140
2141         ip6_mc_hdr(sk, skb, dev, saddr, snd_addr, NEXTHDR_HOP, payload_len);
2142
2143         skb_put_data(skb, ra, sizeof(ra));
2144
2145         hdr = skb_put_zero(skb, sizeof(struct mld_msg));
2146         hdr->mld_type = type;
2147         hdr->mld_mca = *addr;
2148
2149         hdr->mld_cksum = csum_ipv6_magic(saddr, snd_addr, len,
2150                                          IPPROTO_ICMPV6,
2151                                          csum_partial(hdr, len, 0));
2152
2153         rcu_read_lock();
2154         idev = __in6_dev_get(skb->dev);
2155
2156         icmpv6_flow_init(sk, &fl6, type,
2157                          &ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
2158                          skb->dev->ifindex);
2159         dst = icmp6_dst_alloc(skb->dev, &fl6);
2160         if (IS_ERR(dst)) {
2161                 err = PTR_ERR(dst);
2162                 goto err_out;
2163         }
2164
2165         skb_dst_set(skb, dst);
2166         err = NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT,
2167                       net, sk, skb, NULL, skb->dev,
2168                       dst_output);
2169 out:
2170         if (!err) {
2171                 ICMP6MSGOUT_INC_STATS(net, idev, type);
2172                 ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
2173         } else
2174                 IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
2175
2176         rcu_read_unlock();
2177         return;
2178
2179 err_out:
2180         kfree_skb(skb);
2181         goto out;
2182 }
2183
2184 static void mld_send_initial_cr(struct inet6_dev *idev)
2185 {
2186         struct sk_buff *skb;
2187         struct ifmcaddr6 *pmc;
2188         int type;
2189
2190         if (mld_in_v1_mode(idev))
2191                 return;
2192
2193         skb = NULL;
2194         for_each_mc_rtnl(idev, pmc) {
2195                 if (pmc->mca_sfcount[MCAST_EXCLUDE])
2196                         type = MLD2_CHANGE_TO_EXCLUDE;
2197                 else
2198                         type = MLD2_ALLOW_NEW_SOURCES;
2199                 skb = add_grec(skb, pmc, type, 0, 0, 1);
2200         }
2201         if (skb)
2202                 mld_sendpack(skb);
2203 }
2204
2205 void ipv6_mc_dad_complete(struct inet6_dev *idev)
2206 {
2207         idev->mc_dad_count = idev->mc_qrv;
2208         if (idev->mc_dad_count) {
2209                 mld_send_initial_cr(idev);
2210                 idev->mc_dad_count--;
2211                 if (idev->mc_dad_count)
2212                         mld_dad_start_work(idev,
2213                                            unsolicited_report_interval(idev));
2214         }
2215 }
2216
2217 static void mld_dad_work(struct work_struct *work)
2218 {
2219         struct inet6_dev *idev = container_of(to_delayed_work(work),
2220                                               struct inet6_dev,
2221                                               mc_dad_work);
2222
2223         rtnl_lock();
2224         mld_send_initial_cr(idev);
2225         if (idev->mc_dad_count) {
2226                 idev->mc_dad_count--;
2227                 if (idev->mc_dad_count)
2228                         mld_dad_start_work(idev,
2229                                            unsolicited_report_interval(idev));
2230         }
2231         rtnl_unlock();
2232         in6_dev_put(idev);
2233 }
2234
2235 static int ip6_mc_del1_src(struct ifmcaddr6 *pmc, int sfmode,
2236         const struct in6_addr *psfsrc)
2237 {
2238         struct ip6_sf_list *psf, *psf_prev;
2239         int rv = 0;
2240
2241         psf_prev = NULL;
2242         for_each_psf_rtnl(pmc, psf) {
2243                 if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
2244                         break;
2245                 psf_prev = psf;
2246         }
2247         if (!psf || psf->sf_count[sfmode] == 0) {
2248                 /* source filter not found, or count wrong =>  bug */
2249                 return -ESRCH;
2250         }
2251         psf->sf_count[sfmode]--;
2252         if (!psf->sf_count[MCAST_INCLUDE] && !psf->sf_count[MCAST_EXCLUDE]) {
2253                 struct inet6_dev *idev = pmc->idev;
2254
2255                 /* no more filters for this source */
2256                 if (psf_prev)
2257                         rcu_assign_pointer(psf_prev->sf_next,
2258                                            rtnl_dereference(psf->sf_next));
2259                 else
2260                         rcu_assign_pointer(pmc->mca_sources,
2261                                            rtnl_dereference(psf->sf_next));
2262
2263                 if (psf->sf_oldin && !(pmc->mca_flags & MAF_NOREPORT) &&
2264                     !mld_in_v1_mode(idev)) {
2265                         psf->sf_crcount = idev->mc_qrv;
2266                         rcu_assign_pointer(psf->sf_next,
2267                                            rtnl_dereference(pmc->mca_tomb));
2268                         rcu_assign_pointer(pmc->mca_tomb, psf);
2269                         rv = 1;
2270                 } else {
2271                         kfree_rcu(psf, rcu);
2272                 }
2273         }
2274         return rv;
2275 }
2276
2277 static int ip6_mc_del_src(struct inet6_dev *idev, const struct in6_addr *pmca,
2278                           int sfmode, int sfcount, const struct in6_addr *psfsrc,
2279                           int delta)
2280 {
2281         struct ifmcaddr6 *pmc;
2282         int     changerec = 0;
2283         int     i, err;
2284
2285         if (!idev)
2286                 return -ENODEV;
2287
2288         for_each_mc_rtnl(idev, pmc) {
2289                 if (ipv6_addr_equal(pmca, &pmc->mca_addr))
2290                         break;
2291         }
2292         if (!pmc)
2293                 return -ESRCH;
2294
2295         sf_markstate(pmc);
2296         if (!delta) {
2297                 if (!pmc->mca_sfcount[sfmode]) {
2298                         return -EINVAL;
2299                 }
2300
2301                 pmc->mca_sfcount[sfmode]--;
2302         }
2303         err = 0;
2304         for (i = 0; i < sfcount; i++) {
2305                 int rv = ip6_mc_del1_src(pmc, sfmode, &psfsrc[i]);
2306
2307                 changerec |= rv > 0;
2308                 if (!err && rv < 0)
2309                         err = rv;
2310         }
2311         if (pmc->mca_sfmode == MCAST_EXCLUDE &&
2312             pmc->mca_sfcount[MCAST_EXCLUDE] == 0 &&
2313             pmc->mca_sfcount[MCAST_INCLUDE]) {
2314                 struct ip6_sf_list *psf;
2315
2316                 /* filter mode change */
2317                 pmc->mca_sfmode = MCAST_INCLUDE;
2318                 pmc->mca_crcount = idev->mc_qrv;
2319                 idev->mc_ifc_count = pmc->mca_crcount;
2320                 for_each_psf_rtnl(pmc, psf)
2321                         psf->sf_crcount = 0;
2322                 mld_ifc_event(pmc->idev);
2323         } else if (sf_setstate(pmc) || changerec)
2324                 mld_ifc_event(pmc->idev);
2325         return err;
2326 }
2327
2328 /*
2329  * Add multicast single-source filter to the interface list
2330  */
2331 static int ip6_mc_add1_src(struct ifmcaddr6 *pmc, int sfmode,
2332         const struct in6_addr *psfsrc)
2333 {
2334         struct ip6_sf_list *psf, *psf_prev;
2335
2336         psf_prev = NULL;
2337         for_each_psf_rtnl(pmc, psf) {
2338                 if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
2339                         break;
2340                 psf_prev = psf;
2341         }
2342         if (!psf) {
2343                 psf = kzalloc(sizeof(*psf), GFP_KERNEL);
2344                 if (!psf)
2345                         return -ENOBUFS;
2346
2347                 psf->sf_addr = *psfsrc;
2348                 if (psf_prev) {
2349                         rcu_assign_pointer(psf_prev->sf_next, psf);
2350                 } else {
2351                         rcu_assign_pointer(pmc->mca_sources, psf);
2352                 }
2353         }
2354         psf->sf_count[sfmode]++;
2355         return 0;
2356 }
2357
2358 static void sf_markstate(struct ifmcaddr6 *pmc)
2359 {
2360         struct ip6_sf_list *psf;
2361         int mca_xcount = pmc->mca_sfcount[MCAST_EXCLUDE];
2362
2363         for_each_psf_rtnl(pmc, psf) {
2364                 if (pmc->mca_sfcount[MCAST_EXCLUDE]) {
2365                         psf->sf_oldin = mca_xcount ==
2366                                 psf->sf_count[MCAST_EXCLUDE] &&
2367                                 !psf->sf_count[MCAST_INCLUDE];
2368                 } else {
2369                         psf->sf_oldin = psf->sf_count[MCAST_INCLUDE] != 0;
2370                 }
2371         }
2372 }
2373
2374 static int sf_setstate(struct ifmcaddr6 *pmc)
2375 {
2376         struct ip6_sf_list *psf, *dpsf;
2377         int mca_xcount = pmc->mca_sfcount[MCAST_EXCLUDE];
2378         int qrv = pmc->idev->mc_qrv;
2379         int new_in, rv;
2380
2381         rv = 0;
2382         for_each_psf_rtnl(pmc, psf) {
2383                 if (pmc->mca_sfcount[MCAST_EXCLUDE]) {
2384                         new_in = mca_xcount == psf->sf_count[MCAST_EXCLUDE] &&
2385                                 !psf->sf_count[MCAST_INCLUDE];
2386                 } else
2387                         new_in = psf->sf_count[MCAST_INCLUDE] != 0;
2388                 if (new_in) {
2389                         if (!psf->sf_oldin) {
2390                                 struct ip6_sf_list *prev = NULL;
2391
2392                                 for_each_psf_tomb(pmc, dpsf) {
2393                                         if (ipv6_addr_equal(&dpsf->sf_addr,
2394                                             &psf->sf_addr))
2395                                                 break;
2396                                         prev = dpsf;
2397                                 }
2398                                 if (dpsf) {
2399                                         if (prev)
2400                                                 rcu_assign_pointer(prev->sf_next,
2401                                                                    rtnl_dereference(dpsf->sf_next));
2402                                         else
2403                                                 rcu_assign_pointer(pmc->mca_tomb,
2404                                                                    rtnl_dereference(dpsf->sf_next));
2405                                         kfree_rcu(dpsf, rcu);
2406                                 }
2407                                 psf->sf_crcount = qrv;
2408                                 rv++;
2409                         }
2410                 } else if (psf->sf_oldin) {
2411                         psf->sf_crcount = 0;
2412                         /*
2413                          * add or update "delete" records if an active filter
2414                          * is now inactive
2415                          */
2416
2417                         for_each_psf_tomb(pmc, dpsf)
2418                                 if (ipv6_addr_equal(&dpsf->sf_addr,
2419                                     &psf->sf_addr))
2420                                         break;
2421                         if (!dpsf) {
2422                                 dpsf = kmalloc(sizeof(*dpsf), GFP_KERNEL);
2423                                 if (!dpsf)
2424                                         continue;
2425                                 *dpsf = *psf;
2426                                 rcu_assign_pointer(dpsf->sf_next,
2427                                                    rtnl_dereference(pmc->mca_tomb));
2428                                 rcu_assign_pointer(pmc->mca_tomb, dpsf);
2429                         }
2430                         dpsf->sf_crcount = qrv;
2431                         rv++;
2432                 }
2433         }
2434         return rv;
2435 }
2436
2437 /*
2438  * Add multicast source filter list to the interface list
2439  */
2440 static int ip6_mc_add_src(struct inet6_dev *idev, const struct in6_addr *pmca,
2441                           int sfmode, int sfcount, const struct in6_addr *psfsrc,
2442                           int delta)
2443 {
2444         struct ifmcaddr6 *pmc;
2445         int     isexclude;
2446         int     i, err;
2447
2448         if (!idev)
2449                 return -ENODEV;
2450
2451         for_each_mc_rtnl(idev, pmc) {
2452                 if (ipv6_addr_equal(pmca, &pmc->mca_addr))
2453                         break;
2454         }
2455         if (!pmc)
2456                 return -ESRCH;
2457
2458         sf_markstate(pmc);
2459         isexclude = pmc->mca_sfmode == MCAST_EXCLUDE;
2460         if (!delta)
2461                 pmc->mca_sfcount[sfmode]++;
2462         err = 0;
2463         for (i = 0; i < sfcount; i++) {
2464                 err = ip6_mc_add1_src(pmc, sfmode, &psfsrc[i]);
2465                 if (err)
2466                         break;
2467         }
2468         if (err) {
2469                 int j;
2470
2471                 if (!delta)
2472                         pmc->mca_sfcount[sfmode]--;
2473                 for (j = 0; j < i; j++)
2474                         ip6_mc_del1_src(pmc, sfmode, &psfsrc[j]);
2475         } else if (isexclude != (pmc->mca_sfcount[MCAST_EXCLUDE] != 0)) {
2476                 struct ip6_sf_list *psf;
2477
2478                 /* filter mode change */
2479                 if (pmc->mca_sfcount[MCAST_EXCLUDE])
2480                         pmc->mca_sfmode = MCAST_EXCLUDE;
2481                 else if (pmc->mca_sfcount[MCAST_INCLUDE])
2482                         pmc->mca_sfmode = MCAST_INCLUDE;
2483                 /* else no filters; keep old mode for reports */
2484
2485                 pmc->mca_crcount = idev->mc_qrv;
2486                 idev->mc_ifc_count = pmc->mca_crcount;
2487                 for_each_psf_rtnl(pmc, psf)
2488                         psf->sf_crcount = 0;
2489                 mld_ifc_event(idev);
2490         } else if (sf_setstate(pmc)) {
2491                 mld_ifc_event(idev);
2492         }
2493         return err;
2494 }
2495
2496 static void ip6_mc_clear_src(struct ifmcaddr6 *pmc)
2497 {
2498         struct ip6_sf_list *psf, *nextpsf;
2499
2500         for (psf = rtnl_dereference(pmc->mca_tomb);
2501              psf;
2502              psf = nextpsf) {
2503                 nextpsf = rtnl_dereference(psf->sf_next);
2504                 kfree_rcu(psf, rcu);
2505         }
2506         RCU_INIT_POINTER(pmc->mca_tomb, NULL);
2507         for (psf = rtnl_dereference(pmc->mca_sources);
2508              psf;
2509              psf = nextpsf) {
2510                 nextpsf = rtnl_dereference(psf->sf_next);
2511                 kfree_rcu(psf, rcu);
2512         }
2513         RCU_INIT_POINTER(pmc->mca_sources, NULL);
2514         pmc->mca_sfmode = MCAST_EXCLUDE;
2515         pmc->mca_sfcount[MCAST_INCLUDE] = 0;
2516         pmc->mca_sfcount[MCAST_EXCLUDE] = 1;
2517 }
2518
2519
2520 static void igmp6_join_group(struct ifmcaddr6 *ma)
2521 {
2522         unsigned long delay;
2523
2524         if (ma->mca_flags & MAF_NOREPORT)
2525                 return;
2526
2527         igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2528
2529         delay = prandom_u32() % unsolicited_report_interval(ma->idev);
2530
2531         if (cancel_delayed_work(&ma->mca_work)) {
2532                 refcount_dec(&ma->mca_refcnt);
2533                 delay = ma->mca_work.timer.expires - jiffies;
2534         }
2535
2536         if (!mod_delayed_work(mld_wq, &ma->mca_work, delay))
2537                 refcount_inc(&ma->mca_refcnt);
2538         ma->mca_flags |= MAF_TIMER_RUNNING | MAF_LAST_REPORTER;
2539 }
2540
2541 static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml,
2542                             struct inet6_dev *idev)
2543 {
2544         struct ip6_sf_socklist *psl;
2545         int err;
2546
2547         psl = rtnl_dereference(iml->sflist);
2548
2549         if (!psl) {
2550                 /* any-source empty exclude case */
2551                 err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode, 0, NULL, 0);
2552         } else {
2553                 err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode,
2554                                 psl->sl_count, psl->sl_addr, 0);
2555                 RCU_INIT_POINTER(iml->sflist, NULL);
2556                 atomic_sub(IP6_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
2557                 kfree_rcu(psl, rcu);
2558         }
2559         return err;
2560 }
2561
2562 static void igmp6_leave_group(struct ifmcaddr6 *ma)
2563 {
2564         if (mld_in_v1_mode(ma->idev)) {
2565                 if (ma->mca_flags & MAF_LAST_REPORTER) {
2566                         igmp6_send(&ma->mca_addr, ma->idev->dev,
2567                                 ICMPV6_MGM_REDUCTION);
2568                 }
2569         } else {
2570                 mld_add_delrec(ma->idev, ma);
2571                 mld_ifc_event(ma->idev);
2572         }
2573 }
2574
2575 static void mld_gq_work(struct work_struct *work)
2576 {
2577         struct inet6_dev *idev = container_of(to_delayed_work(work),
2578                                               struct inet6_dev,
2579                                               mc_gq_work);
2580
2581         rtnl_lock();
2582         mld_send_report(idev, NULL);
2583         idev->mc_gq_running = 0;
2584         rtnl_unlock();
2585
2586         in6_dev_put(idev);
2587 }
2588
2589 static void mld_ifc_work(struct work_struct *work)
2590 {
2591         struct inet6_dev *idev = container_of(to_delayed_work(work),
2592                                               struct inet6_dev,
2593                                               mc_ifc_work);
2594
2595         rtnl_lock();
2596         mld_send_cr(idev);
2597
2598         if (idev->mc_ifc_count) {
2599                 idev->mc_ifc_count--;
2600                 if (idev->mc_ifc_count)
2601                         mld_ifc_start_work(idev,
2602                                            unsolicited_report_interval(idev));
2603         }
2604         rtnl_unlock();
2605         in6_dev_put(idev);
2606 }
2607
2608 static void mld_ifc_event(struct inet6_dev *idev)
2609 {
2610         if (mld_in_v1_mode(idev))
2611                 return;
2612
2613         idev->mc_ifc_count = idev->mc_qrv;
2614         mld_ifc_start_work(idev, 1);
2615 }
2616
2617 static void mld_mca_work(struct work_struct *work)
2618 {
2619         struct ifmcaddr6 *ma = container_of(to_delayed_work(work),
2620                                             struct ifmcaddr6, mca_work);
2621
2622         rtnl_lock();
2623         if (mld_in_v1_mode(ma->idev))
2624                 igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
2625         else
2626                 mld_send_report(ma->idev, ma);
2627         ma->mca_flags |=  MAF_LAST_REPORTER;
2628         ma->mca_flags &= ~MAF_TIMER_RUNNING;
2629         rtnl_unlock();
2630
2631         ma_put(ma);
2632 }
2633
2634 /* Device changing type */
2635
2636 void ipv6_mc_unmap(struct inet6_dev *idev)
2637 {
2638         struct ifmcaddr6 *i;
2639
2640         /* Install multicast list, except for all-nodes (already installed) */
2641
2642         for_each_mc_rtnl(idev, i)
2643                 igmp6_group_dropped(i);
2644 }
2645
2646 void ipv6_mc_remap(struct inet6_dev *idev)
2647 {
2648         ipv6_mc_up(idev);
2649 }
2650
2651 /* Device going down */
2652
2653 void ipv6_mc_down(struct inet6_dev *idev)
2654 {
2655         struct ifmcaddr6 *i;
2656
2657         /* Withdraw multicast list */
2658         for_each_mc_rtnl(idev, i)
2659                 igmp6_group_dropped(i);
2660
2661         /* Should stop work after group drop. or we will
2662          * start work again in mld_ifc_event()
2663          */
2664         synchronize_net();
2665         mld_query_stop_work(idev);
2666         mld_report_stop_work(idev);
2667         mld_ifc_stop_work(idev);
2668         mld_gq_stop_work(idev);
2669         mld_dad_stop_work(idev);
2670 }
2671
2672 static void ipv6_mc_reset(struct inet6_dev *idev)
2673 {
2674         idev->mc_qrv = sysctl_mld_qrv;
2675         idev->mc_qi = MLD_QI_DEFAULT;
2676         idev->mc_qri = MLD_QRI_DEFAULT;
2677         idev->mc_v1_seen = 0;
2678         idev->mc_maxdelay = unsolicited_report_interval(idev);
2679 }
2680
2681 /* Device going up */
2682
2683 void ipv6_mc_up(struct inet6_dev *idev)
2684 {
2685         struct ifmcaddr6 *i;
2686
2687         /* Install multicast list, except for all-nodes (already installed) */
2688
2689         ipv6_mc_reset(idev);
2690         for_each_mc_rtnl(idev, i) {
2691                 mld_del_delrec(idev, i);
2692                 igmp6_group_added(i);
2693         }
2694 }
2695
2696 /* IPv6 device initialization. */
2697
2698 void ipv6_mc_init_dev(struct inet6_dev *idev)
2699 {
2700         idev->mc_gq_running = 0;
2701         INIT_DELAYED_WORK(&idev->mc_gq_work, mld_gq_work);
2702         RCU_INIT_POINTER(idev->mc_tomb, NULL);
2703         idev->mc_ifc_count = 0;
2704         INIT_DELAYED_WORK(&idev->mc_ifc_work, mld_ifc_work);
2705         INIT_DELAYED_WORK(&idev->mc_dad_work, mld_dad_work);
2706         INIT_DELAYED_WORK(&idev->mc_query_work, mld_query_work);
2707         INIT_DELAYED_WORK(&idev->mc_report_work, mld_report_work);
2708         skb_queue_head_init(&idev->mc_query_queue);
2709         skb_queue_head_init(&idev->mc_report_queue);
2710         spin_lock_init(&idev->mc_query_lock);
2711         spin_lock_init(&idev->mc_report_lock);
2712         ipv6_mc_reset(idev);
2713 }
2714
2715 /*
2716  *      Device is about to be destroyed: clean up.
2717  */
2718
2719 void ipv6_mc_destroy_dev(struct inet6_dev *idev)
2720 {
2721         struct ifmcaddr6 *i;
2722
2723         /* Deactivate works */
2724         ipv6_mc_down(idev);
2725         mld_clear_delrec(idev);
2726         mld_clear_query(idev);
2727         mld_clear_report(idev);
2728
2729         /* Delete all-nodes address. */
2730         /* We cannot call ipv6_dev_mc_dec() directly, our caller in
2731          * addrconf.c has NULL'd out dev->ip6_ptr so in6_dev_get() will
2732          * fail.
2733          */
2734         __ipv6_dev_mc_dec(idev, &in6addr_linklocal_allnodes);
2735
2736         if (idev->cnf.forwarding)
2737                 __ipv6_dev_mc_dec(idev, &in6addr_linklocal_allrouters);
2738
2739         while ((i = rtnl_dereference(idev->mc_list))) {
2740                 rcu_assign_pointer(idev->mc_list, rtnl_dereference(i->next));
2741
2742                 ip6_mc_clear_src(i);
2743                 ma_put(i);
2744         }
2745 }
2746
2747 static void ipv6_mc_rejoin_groups(struct inet6_dev *idev)
2748 {
2749         struct ifmcaddr6 *pmc;
2750
2751         ASSERT_RTNL();
2752
2753         if (mld_in_v1_mode(idev)) {
2754                 for_each_mc_rtnl(idev, pmc)
2755                         igmp6_join_group(pmc);
2756         } else {
2757                 mld_send_report(idev, NULL);
2758         }
2759 }
2760
2761 static int ipv6_mc_netdev_event(struct notifier_block *this,
2762                                 unsigned long event,
2763                                 void *ptr)
2764 {
2765         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2766         struct inet6_dev *idev = __in6_dev_get(dev);
2767
2768         switch (event) {
2769         case NETDEV_RESEND_IGMP:
2770                 if (idev)
2771                         ipv6_mc_rejoin_groups(idev);
2772                 break;
2773         default:
2774                 break;
2775         }
2776
2777         return NOTIFY_DONE;
2778 }
2779
2780 static struct notifier_block igmp6_netdev_notifier = {
2781         .notifier_call = ipv6_mc_netdev_event,
2782 };
2783
2784 #ifdef CONFIG_PROC_FS
2785 struct igmp6_mc_iter_state {
2786         struct seq_net_private p;
2787         struct net_device *dev;
2788         struct inet6_dev *idev;
2789 };
2790
2791 #define igmp6_mc_seq_private(seq)       ((struct igmp6_mc_iter_state *)(seq)->private)
2792
2793 static inline struct ifmcaddr6 *igmp6_mc_get_first(struct seq_file *seq)
2794 {
2795         struct ifmcaddr6 *im = NULL;
2796         struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2797         struct net *net = seq_file_net(seq);
2798
2799         state->idev = NULL;
2800         for_each_netdev_rcu(net, state->dev) {
2801                 struct inet6_dev *idev;
2802                 idev = __in6_dev_get(state->dev);
2803                 if (!idev)
2804                         continue;
2805
2806                 im = rcu_dereference(idev->mc_list);
2807                 if (im) {
2808                         state->idev = idev;
2809                         break;
2810                 }
2811         }
2812         return im;
2813 }
2814
2815 static struct ifmcaddr6 *igmp6_mc_get_next(struct seq_file *seq, struct ifmcaddr6 *im)
2816 {
2817         struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2818
2819         im = rcu_dereference(im->next);
2820         while (!im) {
2821                 state->dev = next_net_device_rcu(state->dev);
2822                 if (!state->dev) {
2823                         state->idev = NULL;
2824                         break;
2825                 }
2826                 state->idev = __in6_dev_get(state->dev);
2827                 if (!state->idev)
2828                         continue;
2829                 im = rcu_dereference(state->idev->mc_list);
2830         }
2831         return im;
2832 }
2833
2834 static struct ifmcaddr6 *igmp6_mc_get_idx(struct seq_file *seq, loff_t pos)
2835 {
2836         struct ifmcaddr6 *im = igmp6_mc_get_first(seq);
2837         if (im)
2838                 while (pos && (im = igmp6_mc_get_next(seq, im)) != NULL)
2839                         --pos;
2840         return pos ? NULL : im;
2841 }
2842
2843 static void *igmp6_mc_seq_start(struct seq_file *seq, loff_t *pos)
2844         __acquires(RCU)
2845 {
2846         rcu_read_lock();
2847         return igmp6_mc_get_idx(seq, *pos);
2848 }
2849
2850 static void *igmp6_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2851 {
2852         struct ifmcaddr6 *im = igmp6_mc_get_next(seq, v);
2853
2854         ++*pos;
2855         return im;
2856 }
2857
2858 static void igmp6_mc_seq_stop(struct seq_file *seq, void *v)
2859         __releases(RCU)
2860 {
2861         struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2862
2863         if (likely(state->idev))
2864                 state->idev = NULL;
2865         state->dev = NULL;
2866         rcu_read_unlock();
2867 }
2868
2869 static int igmp6_mc_seq_show(struct seq_file *seq, void *v)
2870 {
2871         struct ifmcaddr6 *im = (struct ifmcaddr6 *)v;
2872         struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2873
2874         seq_printf(seq,
2875                    "%-4d %-15s %pi6 %5d %08X %ld\n",
2876                    state->dev->ifindex, state->dev->name,
2877                    &im->mca_addr,
2878                    im->mca_users, im->mca_flags,
2879                    (im->mca_flags & MAF_TIMER_RUNNING) ?
2880                    jiffies_to_clock_t(im->mca_work.timer.expires - jiffies) : 0);
2881         return 0;
2882 }
2883
2884 static const struct seq_operations igmp6_mc_seq_ops = {
2885         .start  =       igmp6_mc_seq_start,
2886         .next   =       igmp6_mc_seq_next,
2887         .stop   =       igmp6_mc_seq_stop,
2888         .show   =       igmp6_mc_seq_show,
2889 };
2890
2891 struct igmp6_mcf_iter_state {
2892         struct seq_net_private p;
2893         struct net_device *dev;
2894         struct inet6_dev *idev;
2895         struct ifmcaddr6 *im;
2896 };
2897
2898 #define igmp6_mcf_seq_private(seq)      ((struct igmp6_mcf_iter_state *)(seq)->private)
2899
2900 static inline struct ip6_sf_list *igmp6_mcf_get_first(struct seq_file *seq)
2901 {
2902         struct ip6_sf_list *psf = NULL;
2903         struct ifmcaddr6 *im = NULL;
2904         struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq);
2905         struct net *net = seq_file_net(seq);
2906
2907         state->idev = NULL;
2908         state->im = NULL;
2909         for_each_netdev_rcu(net, state->dev) {
2910                 struct inet6_dev *idev;
2911                 idev = __in6_dev_get(state->dev);
2912                 if (unlikely(idev == NULL))
2913                         continue;
2914
2915                 im = rcu_dereference(idev->mc_list);
2916                 if (likely(im)) {
2917                         psf = rcu_dereference(im->mca_sources);
2918                         if (likely(psf)) {
2919                                 state->im = im;
2920                                 state->idev = idev;
2921                                 break;
2922                         }
2923                 }
2924         }
2925         return psf;
2926 }
2927
2928 static struct ip6_sf_list *igmp6_mcf_get_next(struct seq_file *seq, struct ip6_sf_list *psf)
2929 {
2930         struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq);
2931
2932         psf = rcu_dereference(psf->sf_next);
2933         while (!psf) {
2934                 state->im = rcu_dereference(state->im->next);
2935                 while (!state->im) {
2936                         state->dev = next_net_device_rcu(state->dev);
2937                         if (!state->dev) {
2938                                 state->idev = NULL;
2939                                 goto out;
2940                         }
2941                         state->idev = __in6_dev_get(state->dev);
2942                         if (!state->idev)
2943                                 continue;
2944                         state->im = rcu_dereference(state->idev->mc_list);
2945                 }
2946                 if (!state->im)
2947                         break;
2948                 psf = rcu_dereference(state->im->mca_sources);
2949         }
2950 out:
2951         return psf;
2952 }
2953
2954 static struct ip6_sf_list *igmp6_mcf_get_idx(struct seq_file *seq, loff_t pos)
2955 {
2956         struct ip6_sf_list *psf = igmp6_mcf_get_first(seq);
2957         if (psf)
2958                 while (pos && (psf = igmp6_mcf_get_next(seq, psf)) != NULL)
2959                         --pos;
2960         return pos ? NULL : psf;
2961 }
2962
2963 static void *igmp6_mcf_seq_start(struct seq_file *seq, loff_t *pos)
2964         __acquires(RCU)
2965 {
2966         rcu_read_lock();
2967         return *pos ? igmp6_mcf_get_idx(seq, *pos - 1) : SEQ_START_TOKEN;
2968 }
2969
2970 static void *igmp6_mcf_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2971 {
2972         struct ip6_sf_list *psf;
2973         if (v == SEQ_START_TOKEN)
2974                 psf = igmp6_mcf_get_first(seq);
2975         else
2976                 psf = igmp6_mcf_get_next(seq, v);
2977         ++*pos;
2978         return psf;
2979 }
2980
2981 static void igmp6_mcf_seq_stop(struct seq_file *seq, void *v)
2982         __releases(RCU)
2983 {
2984         struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq);
2985
2986         if (likely(state->im))
2987                 state->im = NULL;
2988         if (likely(state->idev))
2989                 state->idev = NULL;
2990
2991         state->dev = NULL;
2992         rcu_read_unlock();
2993 }
2994
2995 static int igmp6_mcf_seq_show(struct seq_file *seq, void *v)
2996 {
2997         struct ip6_sf_list *psf = (struct ip6_sf_list *)v;
2998         struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq);
2999
3000         if (v == SEQ_START_TOKEN) {
3001                 seq_puts(seq, "Idx Device                Multicast Address                   Source Address    INC    EXC\n");
3002         } else {
3003                 seq_printf(seq,
3004                            "%3d %6.6s %pi6 %pi6 %6lu %6lu\n",
3005                            state->dev->ifindex, state->dev->name,
3006                            &state->im->mca_addr,
3007                            &psf->sf_addr,
3008                            psf->sf_count[MCAST_INCLUDE],
3009                            psf->sf_count[MCAST_EXCLUDE]);
3010         }
3011         return 0;
3012 }
3013
3014 static const struct seq_operations igmp6_mcf_seq_ops = {
3015         .start  =       igmp6_mcf_seq_start,
3016         .next   =       igmp6_mcf_seq_next,
3017         .stop   =       igmp6_mcf_seq_stop,
3018         .show   =       igmp6_mcf_seq_show,
3019 };
3020
3021 static int __net_init igmp6_proc_init(struct net *net)
3022 {
3023         int err;
3024
3025         err = -ENOMEM;
3026         if (!proc_create_net("igmp6", 0444, net->proc_net, &igmp6_mc_seq_ops,
3027                         sizeof(struct igmp6_mc_iter_state)))
3028                 goto out;
3029         if (!proc_create_net("mcfilter6", 0444, net->proc_net,
3030                         &igmp6_mcf_seq_ops,
3031                         sizeof(struct igmp6_mcf_iter_state)))
3032                 goto out_proc_net_igmp6;
3033
3034         err = 0;
3035 out:
3036         return err;
3037
3038 out_proc_net_igmp6:
3039         remove_proc_entry("igmp6", net->proc_net);
3040         goto out;
3041 }
3042
3043 static void __net_exit igmp6_proc_exit(struct net *net)
3044 {
3045         remove_proc_entry("mcfilter6", net->proc_net);
3046         remove_proc_entry("igmp6", net->proc_net);
3047 }
3048 #else
3049 static inline int igmp6_proc_init(struct net *net)
3050 {
3051         return 0;
3052 }
3053 static inline void igmp6_proc_exit(struct net *net)
3054 {
3055 }
3056 #endif
3057
3058 static int __net_init igmp6_net_init(struct net *net)
3059 {
3060         int err;
3061
3062         err = inet_ctl_sock_create(&net->ipv6.igmp_sk, PF_INET6,
3063                                    SOCK_RAW, IPPROTO_ICMPV6, net);
3064         if (err < 0) {
3065                 pr_err("Failed to initialize the IGMP6 control socket (err %d)\n",
3066                        err);
3067                 goto out;
3068         }
3069
3070         inet6_sk(net->ipv6.igmp_sk)->hop_limit = 1;
3071         net->ipv6.igmp_sk->sk_allocation = GFP_KERNEL;
3072
3073         err = inet_ctl_sock_create(&net->ipv6.mc_autojoin_sk, PF_INET6,
3074                                    SOCK_RAW, IPPROTO_ICMPV6, net);
3075         if (err < 0) {
3076                 pr_err("Failed to initialize the IGMP6 autojoin socket (err %d)\n",
3077                        err);
3078                 goto out_sock_create;
3079         }
3080
3081         err = igmp6_proc_init(net);
3082         if (err)
3083                 goto out_sock_create_autojoin;
3084
3085         return 0;
3086
3087 out_sock_create_autojoin:
3088         inet_ctl_sock_destroy(net->ipv6.mc_autojoin_sk);
3089 out_sock_create:
3090         inet_ctl_sock_destroy(net->ipv6.igmp_sk);
3091 out:
3092         return err;
3093 }
3094
3095 static void __net_exit igmp6_net_exit(struct net *net)
3096 {
3097         inet_ctl_sock_destroy(net->ipv6.igmp_sk);
3098         inet_ctl_sock_destroy(net->ipv6.mc_autojoin_sk);
3099         igmp6_proc_exit(net);
3100 }
3101
3102 static struct pernet_operations igmp6_net_ops = {
3103         .init = igmp6_net_init,
3104         .exit = igmp6_net_exit,
3105 };
3106
3107 int __init igmp6_init(void)
3108 {
3109         int err;
3110
3111         err = register_pernet_subsys(&igmp6_net_ops);
3112         if (err)
3113                 return err;
3114
3115         mld_wq = create_workqueue("mld");
3116         if (!mld_wq) {
3117                 unregister_pernet_subsys(&igmp6_net_ops);
3118                 return -ENOMEM;
3119         }
3120
3121         return err;
3122 }
3123
3124 int __init igmp6_late_init(void)
3125 {
3126         return register_netdevice_notifier(&igmp6_netdev_notifier);
3127 }
3128
3129 void igmp6_cleanup(void)
3130 {
3131         unregister_pernet_subsys(&igmp6_net_ops);
3132         destroy_workqueue(mld_wq);
3133 }
3134
3135 void igmp6_late_cleanup(void)
3136 {
3137         unregister_netdevice_notifier(&igmp6_netdev_notifier);
3138 }