net/ipv6: Correct PIM6 mrt_lock handling
[pandora-kernel.git] / net / ipv6 / ip6mr.c
1 /*
2  *      Linux IPv6 multicast routing support for BSD pim6sd
3  *      Based on net/ipv4/ipmr.c.
4  *
5  *      (c) 2004 Mickael Hoerdt, <hoerdt@clarinet.u-strasbg.fr>
6  *              LSIIT Laboratory, Strasbourg, France
7  *      (c) 2004 Jean-Philippe Andriot, <jean-philippe.andriot@6WIND.com>
8  *              6WIND, Paris, France
9  *      Copyright (C)2007,2008 USAGI/WIDE Project
10  *              YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
11  *
12  *      This program is free software; you can redistribute it and/or
13  *      modify it under the terms of the GNU General Public License
14  *      as published by the Free Software Foundation; either version
15  *      2 of the License, or (at your option) any later version.
16  *
17  */
18
19 #include <asm/system.h>
20 #include <asm/uaccess.h>
21 #include <linux/types.h>
22 #include <linux/sched.h>
23 #include <linux/errno.h>
24 #include <linux/timer.h>
25 #include <linux/mm.h>
26 #include <linux/kernel.h>
27 #include <linux/fcntl.h>
28 #include <linux/stat.h>
29 #include <linux/socket.h>
30 #include <linux/inet.h>
31 #include <linux/netdevice.h>
32 #include <linux/inetdevice.h>
33 #include <linux/proc_fs.h>
34 #include <linux/seq_file.h>
35 #include <linux/init.h>
36 #include <linux/slab.h>
37 #include <linux/compat.h>
38 #include <net/protocol.h>
39 #include <linux/skbuff.h>
40 #include <net/sock.h>
41 #include <net/raw.h>
42 #include <linux/notifier.h>
43 #include <linux/if_arp.h>
44 #include <net/checksum.h>
45 #include <net/netlink.h>
46 #include <net/fib_rules.h>
47
48 #include <net/ipv6.h>
49 #include <net/ip6_route.h>
50 #include <linux/mroute6.h>
51 #include <linux/pim.h>
52 #include <net/addrconf.h>
53 #include <linux/netfilter_ipv6.h>
54 #include <linux/export.h>
55 #include <net/ip6_checksum.h>
56
57 struct mr6_table {
58         struct list_head        list;
59 #ifdef CONFIG_NET_NS
60         struct net              *net;
61 #endif
62         u32                     id;
63         struct sock             *mroute6_sk;
64         struct timer_list       ipmr_expire_timer;
65         struct list_head        mfc6_unres_queue;
66         struct list_head        mfc6_cache_array[MFC6_LINES];
67         struct mif_device       vif6_table[MAXMIFS];
68         int                     maxvif;
69         atomic_t                cache_resolve_queue_len;
70         int                     mroute_do_assert;
71         int                     mroute_do_pim;
72 #ifdef CONFIG_IPV6_PIMSM_V2
73         int                     mroute_reg_vif_num;
74 #endif
75 };
76
77 struct ip6mr_rule {
78         struct fib_rule         common;
79 };
80
81 struct ip6mr_result {
82         struct mr6_table        *mrt;
83 };
84
85 /* Big lock, protecting vif table, mrt cache and mroute socket state.
86    Note that the changes are semaphored via rtnl_lock.
87  */
88
89 static DEFINE_RWLOCK(mrt_lock);
90
91 /*
92  *      Multicast router control variables
93  */
94
95 #define MIF_EXISTS(_mrt, _idx) ((_mrt)->vif6_table[_idx].dev != NULL)
96
97 /* Special spinlock for queue of unresolved entries */
98 static DEFINE_SPINLOCK(mfc_unres_lock);
99
100 /* We return to original Alan's scheme. Hash table of resolved
101    entries is changed only in process context and protected
102    with weak lock mrt_lock. Queue of unresolved entries is protected
103    with strong spinlock mfc_unres_lock.
104
105    In this case data path is free of exclusive locks at all.
106  */
107
108 static struct kmem_cache *mrt_cachep __read_mostly;
109
110 static struct mr6_table *ip6mr_new_table(struct net *net, u32 id);
111 static void ip6mr_free_table(struct mr6_table *mrt);
112
113 static int ip6_mr_forward(struct net *net, struct mr6_table *mrt,
114                           struct sk_buff *skb, struct mfc6_cache *cache);
115 static int ip6mr_cache_report(struct mr6_table *mrt, struct sk_buff *pkt,
116                               mifi_t mifi, int assert);
117 static int __ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
118                                struct mfc6_cache *c, struct rtmsg *rtm);
119 static int ip6mr_rtm_dumproute(struct sk_buff *skb,
120                                struct netlink_callback *cb);
121 static void mroute_clean_tables(struct mr6_table *mrt);
122 static void ipmr_expire_process(unsigned long arg);
123
124 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
125 #define ip6mr_for_each_table(mrt, net) \
126         list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list)
127
128 static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
129 {
130         struct mr6_table *mrt;
131
132         ip6mr_for_each_table(mrt, net) {
133                 if (mrt->id == id)
134                         return mrt;
135         }
136         return NULL;
137 }
138
139 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
140                             struct mr6_table **mrt)
141 {
142         int err;
143         struct ip6mr_result res;
144         struct fib_lookup_arg arg = {
145                 .result = &res,
146                 .flags = FIB_LOOKUP_NOREF,
147         };
148
149         err = fib_rules_lookup(net->ipv6.mr6_rules_ops,
150                                flowi6_to_flowi(flp6), 0, &arg);
151         if (err < 0)
152                 return err;
153         *mrt = res.mrt;
154         return 0;
155 }
156
157 static int ip6mr_rule_action(struct fib_rule *rule, struct flowi *flp,
158                              int flags, struct fib_lookup_arg *arg)
159 {
160         struct ip6mr_result *res = arg->result;
161         struct mr6_table *mrt;
162
163         switch (rule->action) {
164         case FR_ACT_TO_TBL:
165                 break;
166         case FR_ACT_UNREACHABLE:
167                 return -ENETUNREACH;
168         case FR_ACT_PROHIBIT:
169                 return -EACCES;
170         case FR_ACT_BLACKHOLE:
171         default:
172                 return -EINVAL;
173         }
174
175         mrt = ip6mr_get_table(rule->fr_net, rule->table);
176         if (mrt == NULL)
177                 return -EAGAIN;
178         res->mrt = mrt;
179         return 0;
180 }
181
182 static int ip6mr_rule_match(struct fib_rule *rule, struct flowi *flp, int flags)
183 {
184         return 1;
185 }
186
187 static const struct nla_policy ip6mr_rule_policy[FRA_MAX + 1] = {
188         FRA_GENERIC_POLICY,
189 };
190
191 static int ip6mr_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
192                                 struct fib_rule_hdr *frh, struct nlattr **tb)
193 {
194         return 0;
195 }
196
197 static int ip6mr_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh,
198                               struct nlattr **tb)
199 {
200         return 1;
201 }
202
203 static int ip6mr_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
204                            struct fib_rule_hdr *frh)
205 {
206         frh->dst_len = 0;
207         frh->src_len = 0;
208         frh->tos     = 0;
209         return 0;
210 }
211
212 static const struct fib_rules_ops __net_initdata ip6mr_rules_ops_template = {
213         .family         = RTNL_FAMILY_IP6MR,
214         .rule_size      = sizeof(struct ip6mr_rule),
215         .addr_size      = sizeof(struct in6_addr),
216         .action         = ip6mr_rule_action,
217         .match          = ip6mr_rule_match,
218         .configure      = ip6mr_rule_configure,
219         .compare        = ip6mr_rule_compare,
220         .default_pref   = fib_default_rule_pref,
221         .fill           = ip6mr_rule_fill,
222         .nlgroup        = RTNLGRP_IPV6_RULE,
223         .policy         = ip6mr_rule_policy,
224         .owner          = THIS_MODULE,
225 };
226
227 static int __net_init ip6mr_rules_init(struct net *net)
228 {
229         struct fib_rules_ops *ops;
230         struct mr6_table *mrt;
231         int err;
232
233         ops = fib_rules_register(&ip6mr_rules_ops_template, net);
234         if (IS_ERR(ops))
235                 return PTR_ERR(ops);
236
237         INIT_LIST_HEAD(&net->ipv6.mr6_tables);
238
239         mrt = ip6mr_new_table(net, RT6_TABLE_DFLT);
240         if (mrt == NULL) {
241                 err = -ENOMEM;
242                 goto err1;
243         }
244
245         err = fib_default_rule_add(ops, 0x7fff, RT6_TABLE_DFLT, 0);
246         if (err < 0)
247                 goto err2;
248
249         net->ipv6.mr6_rules_ops = ops;
250         return 0;
251
252 err2:
253         kfree(mrt);
254 err1:
255         fib_rules_unregister(ops);
256         return err;
257 }
258
259 static void __net_exit ip6mr_rules_exit(struct net *net)
260 {
261         struct mr6_table *mrt, *next;
262
263         rtnl_lock();
264         list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) {
265                 list_del(&mrt->list);
266                 ip6mr_free_table(mrt);
267         }
268         rtnl_unlock();
269         fib_rules_unregister(net->ipv6.mr6_rules_ops);
270 }
271 #else
272 #define ip6mr_for_each_table(mrt, net) \
273         for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
274
275 static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
276 {
277         return net->ipv6.mrt6;
278 }
279
280 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
281                             struct mr6_table **mrt)
282 {
283         *mrt = net->ipv6.mrt6;
284         return 0;
285 }
286
287 static int __net_init ip6mr_rules_init(struct net *net)
288 {
289         net->ipv6.mrt6 = ip6mr_new_table(net, RT6_TABLE_DFLT);
290         return net->ipv6.mrt6 ? 0 : -ENOMEM;
291 }
292
293 static void __net_exit ip6mr_rules_exit(struct net *net)
294 {
295         rtnl_lock();
296         ip6mr_free_table(net->ipv6.mrt6);
297         net->ipv6.mrt6 = NULL;
298         rtnl_unlock();
299 }
300 #endif
301
302 static struct mr6_table *ip6mr_new_table(struct net *net, u32 id)
303 {
304         struct mr6_table *mrt;
305         unsigned int i;
306
307         mrt = ip6mr_get_table(net, id);
308         if (mrt != NULL)
309                 return mrt;
310
311         mrt = kzalloc(sizeof(*mrt), GFP_KERNEL);
312         if (mrt == NULL)
313                 return NULL;
314         mrt->id = id;
315         write_pnet(&mrt->net, net);
316
317         /* Forwarding cache */
318         for (i = 0; i < MFC6_LINES; i++)
319                 INIT_LIST_HEAD(&mrt->mfc6_cache_array[i]);
320
321         INIT_LIST_HEAD(&mrt->mfc6_unres_queue);
322
323         setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process,
324                     (unsigned long)mrt);
325
326 #ifdef CONFIG_IPV6_PIMSM_V2
327         mrt->mroute_reg_vif_num = -1;
328 #endif
329 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
330         list_add_tail_rcu(&mrt->list, &net->ipv6.mr6_tables);
331 #endif
332         return mrt;
333 }
334
335 static void ip6mr_free_table(struct mr6_table *mrt)
336 {
337         del_timer(&mrt->ipmr_expire_timer);
338         mroute_clean_tables(mrt);
339         kfree(mrt);
340 }
341
342 #ifdef CONFIG_PROC_FS
343
344 struct ipmr_mfc_iter {
345         struct seq_net_private p;
346         struct mr6_table *mrt;
347         struct list_head *cache;
348         int ct;
349 };
350
351
352 static struct mfc6_cache *ipmr_mfc_seq_idx(struct net *net,
353                                            struct ipmr_mfc_iter *it, loff_t pos)
354 {
355         struct mr6_table *mrt = it->mrt;
356         struct mfc6_cache *mfc;
357
358         read_lock(&mrt_lock);
359         for (it->ct = 0; it->ct < MFC6_LINES; it->ct++) {
360                 it->cache = &mrt->mfc6_cache_array[it->ct];
361                 list_for_each_entry(mfc, it->cache, list)
362                         if (pos-- == 0)
363                                 return mfc;
364         }
365         read_unlock(&mrt_lock);
366
367         spin_lock_bh(&mfc_unres_lock);
368         it->cache = &mrt->mfc6_unres_queue;
369         list_for_each_entry(mfc, it->cache, list)
370                 if (pos-- == 0)
371                         return mfc;
372         spin_unlock_bh(&mfc_unres_lock);
373
374         it->cache = NULL;
375         return NULL;
376 }
377
378 /*
379  *      The /proc interfaces to multicast routing /proc/ip6_mr_cache /proc/ip6_mr_vif
380  */
381
382 struct ipmr_vif_iter {
383         struct seq_net_private p;
384         struct mr6_table *mrt;
385         int ct;
386 };
387
388 static struct mif_device *ip6mr_vif_seq_idx(struct net *net,
389                                             struct ipmr_vif_iter *iter,
390                                             loff_t pos)
391 {
392         struct mr6_table *mrt = iter->mrt;
393
394         for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) {
395                 if (!MIF_EXISTS(mrt, iter->ct))
396                         continue;
397                 if (pos-- == 0)
398                         return &mrt->vif6_table[iter->ct];
399         }
400         return NULL;
401 }
402
403 static void *ip6mr_vif_seq_start(struct seq_file *seq, loff_t *pos)
404         __acquires(mrt_lock)
405 {
406         struct ipmr_vif_iter *iter = seq->private;
407         struct net *net = seq_file_net(seq);
408         struct mr6_table *mrt;
409
410         mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
411         if (mrt == NULL)
412                 return ERR_PTR(-ENOENT);
413
414         iter->mrt = mrt;
415
416         read_lock(&mrt_lock);
417         return *pos ? ip6mr_vif_seq_idx(net, seq->private, *pos - 1)
418                 : SEQ_START_TOKEN;
419 }
420
421 static void *ip6mr_vif_seq_next(struct seq_file *seq, void *v, loff_t *pos)
422 {
423         struct ipmr_vif_iter *iter = seq->private;
424         struct net *net = seq_file_net(seq);
425         struct mr6_table *mrt = iter->mrt;
426
427         ++*pos;
428         if (v == SEQ_START_TOKEN)
429                 return ip6mr_vif_seq_idx(net, iter, 0);
430
431         while (++iter->ct < mrt->maxvif) {
432                 if (!MIF_EXISTS(mrt, iter->ct))
433                         continue;
434                 return &mrt->vif6_table[iter->ct];
435         }
436         return NULL;
437 }
438
439 static void ip6mr_vif_seq_stop(struct seq_file *seq, void *v)
440         __releases(mrt_lock)
441 {
442         read_unlock(&mrt_lock);
443 }
444
445 static int ip6mr_vif_seq_show(struct seq_file *seq, void *v)
446 {
447         struct ipmr_vif_iter *iter = seq->private;
448         struct mr6_table *mrt = iter->mrt;
449
450         if (v == SEQ_START_TOKEN) {
451                 seq_puts(seq,
452                          "Interface      BytesIn  PktsIn  BytesOut PktsOut Flags\n");
453         } else {
454                 const struct mif_device *vif = v;
455                 const char *name = vif->dev ? vif->dev->name : "none";
456
457                 seq_printf(seq,
458                            "%2td %-10s %8ld %7ld  %8ld %7ld %05X\n",
459                            vif - mrt->vif6_table,
460                            name, vif->bytes_in, vif->pkt_in,
461                            vif->bytes_out, vif->pkt_out,
462                            vif->flags);
463         }
464         return 0;
465 }
466
467 static const struct seq_operations ip6mr_vif_seq_ops = {
468         .start = ip6mr_vif_seq_start,
469         .next  = ip6mr_vif_seq_next,
470         .stop  = ip6mr_vif_seq_stop,
471         .show  = ip6mr_vif_seq_show,
472 };
473
474 static int ip6mr_vif_open(struct inode *inode, struct file *file)
475 {
476         return seq_open_net(inode, file, &ip6mr_vif_seq_ops,
477                             sizeof(struct ipmr_vif_iter));
478 }
479
480 static const struct file_operations ip6mr_vif_fops = {
481         .owner   = THIS_MODULE,
482         .open    = ip6mr_vif_open,
483         .read    = seq_read,
484         .llseek  = seq_lseek,
485         .release = seq_release_net,
486 };
487
488 static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
489 {
490         struct ipmr_mfc_iter *it = seq->private;
491         struct net *net = seq_file_net(seq);
492         struct mr6_table *mrt;
493
494         mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
495         if (mrt == NULL)
496                 return ERR_PTR(-ENOENT);
497
498         it->mrt = mrt;
499         return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1)
500                 : SEQ_START_TOKEN;
501 }
502
503 static void *ipmr_mfc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
504 {
505         struct mfc6_cache *mfc = v;
506         struct ipmr_mfc_iter *it = seq->private;
507         struct net *net = seq_file_net(seq);
508         struct mr6_table *mrt = it->mrt;
509
510         ++*pos;
511
512         if (v == SEQ_START_TOKEN)
513                 return ipmr_mfc_seq_idx(net, seq->private, 0);
514
515         if (mfc->list.next != it->cache)
516                 return list_entry(mfc->list.next, struct mfc6_cache, list);
517
518         if (it->cache == &mrt->mfc6_unres_queue)
519                 goto end_of_list;
520
521         BUG_ON(it->cache != &mrt->mfc6_cache_array[it->ct]);
522
523         while (++it->ct < MFC6_LINES) {
524                 it->cache = &mrt->mfc6_cache_array[it->ct];
525                 if (list_empty(it->cache))
526                         continue;
527                 return list_first_entry(it->cache, struct mfc6_cache, list);
528         }
529
530         /* exhausted cache_array, show unresolved */
531         read_unlock(&mrt_lock);
532         it->cache = &mrt->mfc6_unres_queue;
533         it->ct = 0;
534
535         spin_lock_bh(&mfc_unres_lock);
536         if (!list_empty(it->cache))
537                 return list_first_entry(it->cache, struct mfc6_cache, list);
538
539  end_of_list:
540         spin_unlock_bh(&mfc_unres_lock);
541         it->cache = NULL;
542
543         return NULL;
544 }
545
546 static void ipmr_mfc_seq_stop(struct seq_file *seq, void *v)
547 {
548         struct ipmr_mfc_iter *it = seq->private;
549         struct mr6_table *mrt = it->mrt;
550
551         if (it->cache == &mrt->mfc6_unres_queue)
552                 spin_unlock_bh(&mfc_unres_lock);
553         else if (it->cache == &mrt->mfc6_cache_array[it->ct])
554                 read_unlock(&mrt_lock);
555 }
556
557 static int ipmr_mfc_seq_show(struct seq_file *seq, void *v)
558 {
559         int n;
560
561         if (v == SEQ_START_TOKEN) {
562                 seq_puts(seq,
563                          "Group                            "
564                          "Origin                           "
565                          "Iif      Pkts  Bytes     Wrong  Oifs\n");
566         } else {
567                 const struct mfc6_cache *mfc = v;
568                 const struct ipmr_mfc_iter *it = seq->private;
569                 struct mr6_table *mrt = it->mrt;
570
571                 seq_printf(seq, "%pI6 %pI6 %-3hd",
572                            &mfc->mf6c_mcastgrp, &mfc->mf6c_origin,
573                            mfc->mf6c_parent);
574
575                 if (it->cache != &mrt->mfc6_unres_queue) {
576                         seq_printf(seq, " %8lu %8lu %8lu",
577                                    mfc->mfc_un.res.pkt,
578                                    mfc->mfc_un.res.bytes,
579                                    mfc->mfc_un.res.wrong_if);
580                         for (n = mfc->mfc_un.res.minvif;
581                              n < mfc->mfc_un.res.maxvif; n++) {
582                                 if (MIF_EXISTS(mrt, n) &&
583                                     mfc->mfc_un.res.ttls[n] < 255)
584                                         seq_printf(seq,
585                                                    " %2d:%-3d",
586                                                    n, mfc->mfc_un.res.ttls[n]);
587                         }
588                 } else {
589                         /* unresolved mfc_caches don't contain
590                          * pkt, bytes and wrong_if values
591                          */
592                         seq_printf(seq, " %8lu %8lu %8lu", 0ul, 0ul, 0ul);
593                 }
594                 seq_putc(seq, '\n');
595         }
596         return 0;
597 }
598
599 static const struct seq_operations ipmr_mfc_seq_ops = {
600         .start = ipmr_mfc_seq_start,
601         .next  = ipmr_mfc_seq_next,
602         .stop  = ipmr_mfc_seq_stop,
603         .show  = ipmr_mfc_seq_show,
604 };
605
606 static int ipmr_mfc_open(struct inode *inode, struct file *file)
607 {
608         return seq_open_net(inode, file, &ipmr_mfc_seq_ops,
609                             sizeof(struct ipmr_mfc_iter));
610 }
611
612 static const struct file_operations ip6mr_mfc_fops = {
613         .owner   = THIS_MODULE,
614         .open    = ipmr_mfc_open,
615         .read    = seq_read,
616         .llseek  = seq_lseek,
617         .release = seq_release_net,
618 };
619 #endif
620
621 #ifdef CONFIG_IPV6_PIMSM_V2
622
623 static int pim6_rcv(struct sk_buff *skb)
624 {
625         struct pimreghdr *pim;
626         struct ipv6hdr   *encap;
627         struct net_device  *reg_dev = NULL;
628         struct net *net = dev_net(skb->dev);
629         struct mr6_table *mrt;
630         struct flowi6 fl6 = {
631                 .flowi6_iif     = skb->dev->ifindex,
632                 .flowi6_mark    = skb->mark,
633         };
634         int reg_vif_num;
635
636         if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(*encap)))
637                 goto drop;
638
639         pim = (struct pimreghdr *)skb_transport_header(skb);
640         if (pim->type != ((PIM_VERSION << 4) | PIM_REGISTER) ||
641             (pim->flags & PIM_NULL_REGISTER) ||
642             (csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
643                              sizeof(*pim), IPPROTO_PIM,
644                              csum_partial((void *)pim, sizeof(*pim), 0)) &&
645              csum_fold(skb_checksum(skb, 0, skb->len, 0))))
646                 goto drop;
647
648         /* check if the inner packet is destined to mcast group */
649         encap = (struct ipv6hdr *)(skb_transport_header(skb) +
650                                    sizeof(*pim));
651
652         if (!ipv6_addr_is_multicast(&encap->daddr) ||
653             encap->payload_len == 0 ||
654             ntohs(encap->payload_len) + sizeof(*pim) > skb->len)
655                 goto drop;
656
657         if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
658                 goto drop;
659         reg_vif_num = mrt->mroute_reg_vif_num;
660
661         read_lock(&mrt_lock);
662         if (reg_vif_num >= 0)
663                 reg_dev = mrt->vif6_table[reg_vif_num].dev;
664         if (reg_dev)
665                 dev_hold(reg_dev);
666         read_unlock(&mrt_lock);
667
668         if (reg_dev == NULL)
669                 goto drop;
670
671         skb->mac_header = skb->network_header;
672         skb_pull(skb, (u8 *)encap - skb->data);
673         skb_reset_network_header(skb);
674         skb->protocol = htons(ETH_P_IPV6);
675         skb->ip_summed = CHECKSUM_NONE;
676         skb->pkt_type = PACKET_HOST;
677
678         skb_tunnel_rx(skb, reg_dev);
679
680         netif_rx(skb);
681
682         dev_put(reg_dev);
683         return 0;
684  drop:
685         kfree_skb(skb);
686         return 0;
687 }
688
689 static const struct inet6_protocol pim6_protocol = {
690         .handler        =       pim6_rcv,
691 };
692
693 /* Service routines creating virtual interfaces: PIMREG */
694
695 static netdev_tx_t reg_vif_xmit(struct sk_buff *skb,
696                                       struct net_device *dev)
697 {
698         struct net *net = dev_net(dev);
699         struct mr6_table *mrt;
700         struct flowi6 fl6 = {
701                 .flowi6_oif     = dev->ifindex,
702                 .flowi6_iif     = skb->skb_iif,
703                 .flowi6_mark    = skb->mark,
704         };
705         int err;
706
707         err = ip6mr_fib_lookup(net, &fl6, &mrt);
708         if (err < 0) {
709                 kfree_skb(skb);
710                 return err;
711         }
712
713         read_lock(&mrt_lock);
714         dev->stats.tx_bytes += skb->len;
715         dev->stats.tx_packets++;
716         ip6mr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, MRT6MSG_WHOLEPKT);
717         read_unlock(&mrt_lock);
718         kfree_skb(skb);
719         return NETDEV_TX_OK;
720 }
721
722 static const struct net_device_ops reg_vif_netdev_ops = {
723         .ndo_start_xmit = reg_vif_xmit,
724 };
725
726 static void reg_vif_setup(struct net_device *dev)
727 {
728         dev->type               = ARPHRD_PIMREG;
729         dev->mtu                = 1500 - sizeof(struct ipv6hdr) - 8;
730         dev->flags              = IFF_NOARP;
731         dev->netdev_ops         = &reg_vif_netdev_ops;
732         dev->destructor         = free_netdev;
733         dev->features           |= NETIF_F_NETNS_LOCAL;
734 }
735
736 static struct net_device *ip6mr_reg_vif(struct net *net, struct mr6_table *mrt)
737 {
738         struct net_device *dev;
739         char name[IFNAMSIZ];
740
741         if (mrt->id == RT6_TABLE_DFLT)
742                 sprintf(name, "pim6reg");
743         else
744                 sprintf(name, "pim6reg%u", mrt->id);
745
746         dev = alloc_netdev(0, name, reg_vif_setup);
747         if (dev == NULL)
748                 return NULL;
749
750         dev_net_set(dev, net);
751
752         if (register_netdevice(dev)) {
753                 free_netdev(dev);
754                 return NULL;
755         }
756         dev->iflink = 0;
757
758         if (dev_open(dev))
759                 goto failure;
760
761         dev_hold(dev);
762         return dev;
763
764 failure:
765         /* allow the register to be completed before unregistering. */
766         rtnl_unlock();
767         rtnl_lock();
768
769         unregister_netdevice(dev);
770         return NULL;
771 }
772 #endif
773
774 /*
775  *      Delete a VIF entry
776  */
777
778 static int mif6_delete(struct mr6_table *mrt, int vifi, struct list_head *head)
779 {
780         struct mif_device *v;
781         struct net_device *dev;
782         struct inet6_dev *in6_dev;
783
784         if (vifi < 0 || vifi >= mrt->maxvif)
785                 return -EADDRNOTAVAIL;
786
787         v = &mrt->vif6_table[vifi];
788
789         write_lock_bh(&mrt_lock);
790         dev = v->dev;
791         v->dev = NULL;
792
793         if (!dev) {
794                 write_unlock_bh(&mrt_lock);
795                 return -EADDRNOTAVAIL;
796         }
797
798 #ifdef CONFIG_IPV6_PIMSM_V2
799         if (vifi == mrt->mroute_reg_vif_num)
800                 mrt->mroute_reg_vif_num = -1;
801 #endif
802
803         if (vifi + 1 == mrt->maxvif) {
804                 int tmp;
805                 for (tmp = vifi - 1; tmp >= 0; tmp--) {
806                         if (MIF_EXISTS(mrt, tmp))
807                                 break;
808                 }
809                 mrt->maxvif = tmp + 1;
810         }
811
812         write_unlock_bh(&mrt_lock);
813
814         dev_set_allmulti(dev, -1);
815
816         in6_dev = __in6_dev_get(dev);
817         if (in6_dev)
818                 in6_dev->cnf.mc_forwarding--;
819
820         if (v->flags & MIFF_REGISTER)
821                 unregister_netdevice_queue(dev, head);
822
823         dev_put(dev);
824         return 0;
825 }
826
827 static inline void ip6mr_cache_free(struct mfc6_cache *c)
828 {
829         kmem_cache_free(mrt_cachep, c);
830 }
831
832 /* Destroy an unresolved cache entry, killing queued skbs
833    and reporting error to netlink readers.
834  */
835
836 static void ip6mr_destroy_unres(struct mr6_table *mrt, struct mfc6_cache *c)
837 {
838         struct net *net = read_pnet(&mrt->net);
839         struct sk_buff *skb;
840
841         atomic_dec(&mrt->cache_resolve_queue_len);
842
843         while((skb = skb_dequeue(&c->mfc_un.unres.unresolved)) != NULL) {
844                 if (ipv6_hdr(skb)->version == 0) {
845                         struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr));
846                         nlh->nlmsg_type = NLMSG_ERROR;
847                         nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr));
848                         skb_trim(skb, nlh->nlmsg_len);
849                         ((struct nlmsgerr *)NLMSG_DATA(nlh))->error = -ETIMEDOUT;
850                         rtnl_unicast(skb, net, NETLINK_CB(skb).pid);
851                 } else
852                         kfree_skb(skb);
853         }
854
855         ip6mr_cache_free(c);
856 }
857
858
859 /* Timer process for all the unresolved queue. */
860
861 static void ipmr_do_expire_process(struct mr6_table *mrt)
862 {
863         unsigned long now = jiffies;
864         unsigned long expires = 10 * HZ;
865         struct mfc6_cache *c, *next;
866
867         list_for_each_entry_safe(c, next, &mrt->mfc6_unres_queue, list) {
868                 if (time_after(c->mfc_un.unres.expires, now)) {
869                         /* not yet... */
870                         unsigned long interval = c->mfc_un.unres.expires - now;
871                         if (interval < expires)
872                                 expires = interval;
873                         continue;
874                 }
875
876                 list_del(&c->list);
877                 ip6mr_destroy_unres(mrt, c);
878         }
879
880         if (!list_empty(&mrt->mfc6_unres_queue))
881                 mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);
882 }
883
884 static void ipmr_expire_process(unsigned long arg)
885 {
886         struct mr6_table *mrt = (struct mr6_table *)arg;
887
888         if (!spin_trylock(&mfc_unres_lock)) {
889                 mod_timer(&mrt->ipmr_expire_timer, jiffies + 1);
890                 return;
891         }
892
893         if (!list_empty(&mrt->mfc6_unres_queue))
894                 ipmr_do_expire_process(mrt);
895
896         spin_unlock(&mfc_unres_lock);
897 }
898
899 /* Fill oifs list. It is called under write locked mrt_lock. */
900
901 static void ip6mr_update_thresholds(struct mr6_table *mrt, struct mfc6_cache *cache,
902                                     unsigned char *ttls)
903 {
904         int vifi;
905
906         cache->mfc_un.res.minvif = MAXMIFS;
907         cache->mfc_un.res.maxvif = 0;
908         memset(cache->mfc_un.res.ttls, 255, MAXMIFS);
909
910         for (vifi = 0; vifi < mrt->maxvif; vifi++) {
911                 if (MIF_EXISTS(mrt, vifi) &&
912                     ttls[vifi] && ttls[vifi] < 255) {
913                         cache->mfc_un.res.ttls[vifi] = ttls[vifi];
914                         if (cache->mfc_un.res.minvif > vifi)
915                                 cache->mfc_un.res.minvif = vifi;
916                         if (cache->mfc_un.res.maxvif <= vifi)
917                                 cache->mfc_un.res.maxvif = vifi + 1;
918                 }
919         }
920 }
921
922 static int mif6_add(struct net *net, struct mr6_table *mrt,
923                     struct mif6ctl *vifc, int mrtsock)
924 {
925         int vifi = vifc->mif6c_mifi;
926         struct mif_device *v = &mrt->vif6_table[vifi];
927         struct net_device *dev;
928         struct inet6_dev *in6_dev;
929         int err;
930
931         /* Is vif busy ? */
932         if (MIF_EXISTS(mrt, vifi))
933                 return -EADDRINUSE;
934
935         switch (vifc->mif6c_flags) {
936 #ifdef CONFIG_IPV6_PIMSM_V2
937         case MIFF_REGISTER:
938                 /*
939                  * Special Purpose VIF in PIM
940                  * All the packets will be sent to the daemon
941                  */
942                 if (mrt->mroute_reg_vif_num >= 0)
943                         return -EADDRINUSE;
944                 dev = ip6mr_reg_vif(net, mrt);
945                 if (!dev)
946                         return -ENOBUFS;
947                 err = dev_set_allmulti(dev, 1);
948                 if (err) {
949                         unregister_netdevice(dev);
950                         dev_put(dev);
951                         return err;
952                 }
953                 break;
954 #endif
955         case 0:
956                 dev = dev_get_by_index(net, vifc->mif6c_pifi);
957                 if (!dev)
958                         return -EADDRNOTAVAIL;
959                 err = dev_set_allmulti(dev, 1);
960                 if (err) {
961                         dev_put(dev);
962                         return err;
963                 }
964                 break;
965         default:
966                 return -EINVAL;
967         }
968
969         in6_dev = __in6_dev_get(dev);
970         if (in6_dev)
971                 in6_dev->cnf.mc_forwarding++;
972
973         /*
974          *      Fill in the VIF structures
975          */
976         v->rate_limit = vifc->vifc_rate_limit;
977         v->flags = vifc->mif6c_flags;
978         if (!mrtsock)
979                 v->flags |= VIFF_STATIC;
980         v->threshold = vifc->vifc_threshold;
981         v->bytes_in = 0;
982         v->bytes_out = 0;
983         v->pkt_in = 0;
984         v->pkt_out = 0;
985         v->link = dev->ifindex;
986         if (v->flags & MIFF_REGISTER)
987                 v->link = dev->iflink;
988
989         /* And finish update writing critical data */
990         write_lock_bh(&mrt_lock);
991         v->dev = dev;
992 #ifdef CONFIG_IPV6_PIMSM_V2
993         if (v->flags & MIFF_REGISTER)
994                 mrt->mroute_reg_vif_num = vifi;
995 #endif
996         if (vifi + 1 > mrt->maxvif)
997                 mrt->maxvif = vifi + 1;
998         write_unlock_bh(&mrt_lock);
999         return 0;
1000 }
1001
1002 static struct mfc6_cache *ip6mr_cache_find(struct mr6_table *mrt,
1003                                            const struct in6_addr *origin,
1004                                            const struct in6_addr *mcastgrp)
1005 {
1006         int line = MFC6_HASH(mcastgrp, origin);
1007         struct mfc6_cache *c;
1008
1009         list_for_each_entry(c, &mrt->mfc6_cache_array[line], list) {
1010                 if (ipv6_addr_equal(&c->mf6c_origin, origin) &&
1011                     ipv6_addr_equal(&c->mf6c_mcastgrp, mcastgrp))
1012                         return c;
1013         }
1014         return NULL;
1015 }
1016
1017 /*
1018  *      Allocate a multicast cache entry
1019  */
1020 static struct mfc6_cache *ip6mr_cache_alloc(void)
1021 {
1022         struct mfc6_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_KERNEL);
1023         if (c == NULL)
1024                 return NULL;
1025         c->mfc_un.res.minvif = MAXMIFS;
1026         return c;
1027 }
1028
1029 static struct mfc6_cache *ip6mr_cache_alloc_unres(void)
1030 {
1031         struct mfc6_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_ATOMIC);
1032         if (c == NULL)
1033                 return NULL;
1034         skb_queue_head_init(&c->mfc_un.unres.unresolved);
1035         c->mfc_un.unres.expires = jiffies + 10 * HZ;
1036         return c;
1037 }
1038
1039 /*
1040  *      A cache entry has gone into a resolved state from queued
1041  */
1042
1043 static void ip6mr_cache_resolve(struct net *net, struct mr6_table *mrt,
1044                                 struct mfc6_cache *uc, struct mfc6_cache *c)
1045 {
1046         struct sk_buff *skb;
1047
1048         /*
1049          *      Play the pending entries through our router
1050          */
1051
1052         while((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) {
1053                 if (ipv6_hdr(skb)->version == 0) {
1054                         struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr));
1055
1056                         if (__ip6mr_fill_mroute(mrt, skb, c, NLMSG_DATA(nlh)) > 0) {
1057                                 nlh->nlmsg_len = skb_tail_pointer(skb) - (u8 *)nlh;
1058                         } else {
1059                                 nlh->nlmsg_type = NLMSG_ERROR;
1060                                 nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr));
1061                                 skb_trim(skb, nlh->nlmsg_len);
1062                                 ((struct nlmsgerr *)NLMSG_DATA(nlh))->error = -EMSGSIZE;
1063                         }
1064                         rtnl_unicast(skb, net, NETLINK_CB(skb).pid);
1065                 } else
1066                         ip6_mr_forward(net, mrt, skb, c);
1067         }
1068 }
1069
1070 /*
1071  *      Bounce a cache query up to pim6sd. We could use netlink for this but pim6sd
1072  *      expects the following bizarre scheme.
1073  *
1074  *      Called under mrt_lock.
1075  */
1076
1077 static int ip6mr_cache_report(struct mr6_table *mrt, struct sk_buff *pkt,
1078                               mifi_t mifi, int assert)
1079 {
1080         struct sk_buff *skb;
1081         struct mrt6msg *msg;
1082         int ret;
1083
1084 #ifdef CONFIG_IPV6_PIMSM_V2
1085         if (assert == MRT6MSG_WHOLEPKT)
1086                 skb = skb_realloc_headroom(pkt, -skb_network_offset(pkt)
1087                                                 +sizeof(*msg));
1088         else
1089 #endif
1090                 skb = alloc_skb(sizeof(struct ipv6hdr) + sizeof(*msg), GFP_ATOMIC);
1091
1092         if (!skb)
1093                 return -ENOBUFS;
1094
1095         /* I suppose that internal messages
1096          * do not require checksums */
1097
1098         skb->ip_summed = CHECKSUM_UNNECESSARY;
1099
1100 #ifdef CONFIG_IPV6_PIMSM_V2
1101         if (assert == MRT6MSG_WHOLEPKT) {
1102                 /* Ugly, but we have no choice with this interface.
1103                    Duplicate old header, fix length etc.
1104                    And all this only to mangle msg->im6_msgtype and
1105                    to set msg->im6_mbz to "mbz" :-)
1106                  */
1107                 skb_push(skb, -skb_network_offset(pkt));
1108
1109                 skb_push(skb, sizeof(*msg));
1110                 skb_reset_transport_header(skb);
1111                 msg = (struct mrt6msg *)skb_transport_header(skb);
1112                 msg->im6_mbz = 0;
1113                 msg->im6_msgtype = MRT6MSG_WHOLEPKT;
1114                 msg->im6_mif = mrt->mroute_reg_vif_num;
1115                 msg->im6_pad = 0;
1116                 ipv6_addr_copy(&msg->im6_src, &ipv6_hdr(pkt)->saddr);
1117                 ipv6_addr_copy(&msg->im6_dst, &ipv6_hdr(pkt)->daddr);
1118
1119                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1120         } else
1121 #endif
1122         {
1123         /*
1124          *      Copy the IP header
1125          */
1126
1127         skb_put(skb, sizeof(struct ipv6hdr));
1128         skb_reset_network_header(skb);
1129         skb_copy_to_linear_data(skb, ipv6_hdr(pkt), sizeof(struct ipv6hdr));
1130
1131         /*
1132          *      Add our header
1133          */
1134         skb_put(skb, sizeof(*msg));
1135         skb_reset_transport_header(skb);
1136         msg = (struct mrt6msg *)skb_transport_header(skb);
1137
1138         msg->im6_mbz = 0;
1139         msg->im6_msgtype = assert;
1140         msg->im6_mif = mifi;
1141         msg->im6_pad = 0;
1142         ipv6_addr_copy(&msg->im6_src, &ipv6_hdr(pkt)->saddr);
1143         ipv6_addr_copy(&msg->im6_dst, &ipv6_hdr(pkt)->daddr);
1144
1145         skb_dst_set(skb, dst_clone(skb_dst(pkt)));
1146         skb->ip_summed = CHECKSUM_UNNECESSARY;
1147         }
1148
1149         if (mrt->mroute6_sk == NULL) {
1150                 kfree_skb(skb);
1151                 return -EINVAL;
1152         }
1153
1154         /*
1155          *      Deliver to user space multicast routing algorithms
1156          */
1157         ret = sock_queue_rcv_skb(mrt->mroute6_sk, skb);
1158         if (ret < 0) {
1159                 if (net_ratelimit())
1160                         printk(KERN_WARNING "mroute6: pending queue full, dropping entries.\n");
1161                 kfree_skb(skb);
1162         }
1163
1164         return ret;
1165 }
1166
1167 /*
1168  *      Queue a packet for resolution. It gets locked cache entry!
1169  */
1170
1171 static int
1172 ip6mr_cache_unresolved(struct mr6_table *mrt, mifi_t mifi, struct sk_buff *skb)
1173 {
1174         bool found = false;
1175         int err;
1176         struct mfc6_cache *c;
1177
1178         spin_lock_bh(&mfc_unres_lock);
1179         list_for_each_entry(c, &mrt->mfc6_unres_queue, list) {
1180                 if (ipv6_addr_equal(&c->mf6c_mcastgrp, &ipv6_hdr(skb)->daddr) &&
1181                     ipv6_addr_equal(&c->mf6c_origin, &ipv6_hdr(skb)->saddr)) {
1182                         found = true;
1183                         break;
1184                 }
1185         }
1186
1187         if (!found) {
1188                 /*
1189                  *      Create a new entry if allowable
1190                  */
1191
1192                 if (atomic_read(&mrt->cache_resolve_queue_len) >= 10 ||
1193                     (c = ip6mr_cache_alloc_unres()) == NULL) {
1194                         spin_unlock_bh(&mfc_unres_lock);
1195
1196                         kfree_skb(skb);
1197                         return -ENOBUFS;
1198                 }
1199
1200                 /*
1201                  *      Fill in the new cache entry
1202                  */
1203                 c->mf6c_parent = -1;
1204                 c->mf6c_origin = ipv6_hdr(skb)->saddr;
1205                 c->mf6c_mcastgrp = ipv6_hdr(skb)->daddr;
1206
1207                 /*
1208                  *      Reflect first query at pim6sd
1209                  */
1210                 err = ip6mr_cache_report(mrt, skb, mifi, MRT6MSG_NOCACHE);
1211                 if (err < 0) {
1212                         /* If the report failed throw the cache entry
1213                            out - Brad Parker
1214                          */
1215                         spin_unlock_bh(&mfc_unres_lock);
1216
1217                         ip6mr_cache_free(c);
1218                         kfree_skb(skb);
1219                         return err;
1220                 }
1221
1222                 atomic_inc(&mrt->cache_resolve_queue_len);
1223                 list_add(&c->list, &mrt->mfc6_unres_queue);
1224
1225                 ipmr_do_expire_process(mrt);
1226         }
1227
1228         /*
1229          *      See if we can append the packet
1230          */
1231         if (c->mfc_un.unres.unresolved.qlen > 3) {
1232                 kfree_skb(skb);
1233                 err = -ENOBUFS;
1234         } else {
1235                 skb_queue_tail(&c->mfc_un.unres.unresolved, skb);
1236                 err = 0;
1237         }
1238
1239         spin_unlock_bh(&mfc_unres_lock);
1240         return err;
1241 }
1242
1243 /*
1244  *      MFC6 cache manipulation by user space
1245  */
1246
1247 static int ip6mr_mfc_delete(struct mr6_table *mrt, struct mf6cctl *mfc)
1248 {
1249         int line;
1250         struct mfc6_cache *c, *next;
1251
1252         line = MFC6_HASH(&mfc->mf6cc_mcastgrp.sin6_addr, &mfc->mf6cc_origin.sin6_addr);
1253
1254         list_for_each_entry_safe(c, next, &mrt->mfc6_cache_array[line], list) {
1255                 if (ipv6_addr_equal(&c->mf6c_origin, &mfc->mf6cc_origin.sin6_addr) &&
1256                     ipv6_addr_equal(&c->mf6c_mcastgrp, &mfc->mf6cc_mcastgrp.sin6_addr)) {
1257                         write_lock_bh(&mrt_lock);
1258                         list_del(&c->list);
1259                         write_unlock_bh(&mrt_lock);
1260
1261                         ip6mr_cache_free(c);
1262                         return 0;
1263                 }
1264         }
1265         return -ENOENT;
1266 }
1267
1268 static int ip6mr_device_event(struct notifier_block *this,
1269                               unsigned long event, void *ptr)
1270 {
1271         struct net_device *dev = ptr;
1272         struct net *net = dev_net(dev);
1273         struct mr6_table *mrt;
1274         struct mif_device *v;
1275         int ct;
1276         LIST_HEAD(list);
1277
1278         if (event != NETDEV_UNREGISTER)
1279                 return NOTIFY_DONE;
1280
1281         ip6mr_for_each_table(mrt, net) {
1282                 v = &mrt->vif6_table[0];
1283                 for (ct = 0; ct < mrt->maxvif; ct++, v++) {
1284                         if (v->dev == dev)
1285                                 mif6_delete(mrt, ct, &list);
1286                 }
1287         }
1288         unregister_netdevice_many(&list);
1289
1290         return NOTIFY_DONE;
1291 }
1292
1293 static struct notifier_block ip6_mr_notifier = {
1294         .notifier_call = ip6mr_device_event
1295 };
1296
1297 /*
1298  *      Setup for IP multicast routing
1299  */
1300
1301 static int __net_init ip6mr_net_init(struct net *net)
1302 {
1303         int err;
1304
1305         err = ip6mr_rules_init(net);
1306         if (err < 0)
1307                 goto fail;
1308
1309 #ifdef CONFIG_PROC_FS
1310         err = -ENOMEM;
1311         if (!proc_net_fops_create(net, "ip6_mr_vif", 0, &ip6mr_vif_fops))
1312                 goto proc_vif_fail;
1313         if (!proc_net_fops_create(net, "ip6_mr_cache", 0, &ip6mr_mfc_fops))
1314                 goto proc_cache_fail;
1315 #endif
1316
1317         return 0;
1318
1319 #ifdef CONFIG_PROC_FS
1320 proc_cache_fail:
1321         proc_net_remove(net, "ip6_mr_vif");
1322 proc_vif_fail:
1323         ip6mr_rules_exit(net);
1324 #endif
1325 fail:
1326         return err;
1327 }
1328
1329 static void __net_exit ip6mr_net_exit(struct net *net)
1330 {
1331 #ifdef CONFIG_PROC_FS
1332         proc_net_remove(net, "ip6_mr_cache");
1333         proc_net_remove(net, "ip6_mr_vif");
1334 #endif
1335         ip6mr_rules_exit(net);
1336 }
1337
1338 static struct pernet_operations ip6mr_net_ops = {
1339         .init = ip6mr_net_init,
1340         .exit = ip6mr_net_exit,
1341 };
1342
1343 int __init ip6_mr_init(void)
1344 {
1345         int err;
1346
1347         mrt_cachep = kmem_cache_create("ip6_mrt_cache",
1348                                        sizeof(struct mfc6_cache),
1349                                        0, SLAB_HWCACHE_ALIGN,
1350                                        NULL);
1351         if (!mrt_cachep)
1352                 return -ENOMEM;
1353
1354         err = register_pernet_subsys(&ip6mr_net_ops);
1355         if (err)
1356                 goto reg_pernet_fail;
1357
1358         err = register_netdevice_notifier(&ip6_mr_notifier);
1359         if (err)
1360                 goto reg_notif_fail;
1361 #ifdef CONFIG_IPV6_PIMSM_V2
1362         if (inet6_add_protocol(&pim6_protocol, IPPROTO_PIM) < 0) {
1363                 printk(KERN_ERR "ip6_mr_init: can't add PIM protocol\n");
1364                 err = -EAGAIN;
1365                 goto add_proto_fail;
1366         }
1367 #endif
1368         rtnl_register(RTNL_FAMILY_IP6MR, RTM_GETROUTE, NULL,
1369                       ip6mr_rtm_dumproute, NULL);
1370         return 0;
1371 #ifdef CONFIG_IPV6_PIMSM_V2
1372 add_proto_fail:
1373         unregister_netdevice_notifier(&ip6_mr_notifier);
1374 #endif
1375 reg_notif_fail:
1376         unregister_pernet_subsys(&ip6mr_net_ops);
1377 reg_pernet_fail:
1378         kmem_cache_destroy(mrt_cachep);
1379         return err;
1380 }
1381
1382 void ip6_mr_cleanup(void)
1383 {
1384         unregister_netdevice_notifier(&ip6_mr_notifier);
1385         unregister_pernet_subsys(&ip6mr_net_ops);
1386         kmem_cache_destroy(mrt_cachep);
1387 }
1388
1389 static int ip6mr_mfc_add(struct net *net, struct mr6_table *mrt,
1390                          struct mf6cctl *mfc, int mrtsock)
1391 {
1392         bool found = false;
1393         int line;
1394         struct mfc6_cache *uc, *c;
1395         unsigned char ttls[MAXMIFS];
1396         int i;
1397
1398         if (mfc->mf6cc_parent >= MAXMIFS)
1399                 return -ENFILE;
1400
1401         memset(ttls, 255, MAXMIFS);
1402         for (i = 0; i < MAXMIFS; i++) {
1403                 if (IF_ISSET(i, &mfc->mf6cc_ifset))
1404                         ttls[i] = 1;
1405
1406         }
1407
1408         line = MFC6_HASH(&mfc->mf6cc_mcastgrp.sin6_addr, &mfc->mf6cc_origin.sin6_addr);
1409
1410         list_for_each_entry(c, &mrt->mfc6_cache_array[line], list) {
1411                 if (ipv6_addr_equal(&c->mf6c_origin, &mfc->mf6cc_origin.sin6_addr) &&
1412                     ipv6_addr_equal(&c->mf6c_mcastgrp, &mfc->mf6cc_mcastgrp.sin6_addr)) {
1413                         found = true;
1414                         break;
1415                 }
1416         }
1417
1418         if (found) {
1419                 write_lock_bh(&mrt_lock);
1420                 c->mf6c_parent = mfc->mf6cc_parent;
1421                 ip6mr_update_thresholds(mrt, c, ttls);
1422                 if (!mrtsock)
1423                         c->mfc_flags |= MFC_STATIC;
1424                 write_unlock_bh(&mrt_lock);
1425                 return 0;
1426         }
1427
1428         if (!ipv6_addr_is_multicast(&mfc->mf6cc_mcastgrp.sin6_addr))
1429                 return -EINVAL;
1430
1431         c = ip6mr_cache_alloc();
1432         if (c == NULL)
1433                 return -ENOMEM;
1434
1435         c->mf6c_origin = mfc->mf6cc_origin.sin6_addr;
1436         c->mf6c_mcastgrp = mfc->mf6cc_mcastgrp.sin6_addr;
1437         c->mf6c_parent = mfc->mf6cc_parent;
1438         ip6mr_update_thresholds(mrt, c, ttls);
1439         if (!mrtsock)
1440                 c->mfc_flags |= MFC_STATIC;
1441
1442         write_lock_bh(&mrt_lock);
1443         list_add(&c->list, &mrt->mfc6_cache_array[line]);
1444         write_unlock_bh(&mrt_lock);
1445
1446         /*
1447          *      Check to see if we resolved a queued list. If so we
1448          *      need to send on the frames and tidy up.
1449          */
1450         found = false;
1451         spin_lock_bh(&mfc_unres_lock);
1452         list_for_each_entry(uc, &mrt->mfc6_unres_queue, list) {
1453                 if (ipv6_addr_equal(&uc->mf6c_origin, &c->mf6c_origin) &&
1454                     ipv6_addr_equal(&uc->mf6c_mcastgrp, &c->mf6c_mcastgrp)) {
1455                         list_del(&uc->list);
1456                         atomic_dec(&mrt->cache_resolve_queue_len);
1457                         found = true;
1458                         break;
1459                 }
1460         }
1461         if (list_empty(&mrt->mfc6_unres_queue))
1462                 del_timer(&mrt->ipmr_expire_timer);
1463         spin_unlock_bh(&mfc_unres_lock);
1464
1465         if (found) {
1466                 ip6mr_cache_resolve(net, mrt, uc, c);
1467                 ip6mr_cache_free(uc);
1468         }
1469         return 0;
1470 }
1471
1472 /*
1473  *      Close the multicast socket, and clear the vif tables etc
1474  */
1475
1476 static void mroute_clean_tables(struct mr6_table *mrt)
1477 {
1478         int i;
1479         LIST_HEAD(list);
1480         struct mfc6_cache *c, *next;
1481
1482         /*
1483          *      Shut down all active vif entries
1484          */
1485         for (i = 0; i < mrt->maxvif; i++) {
1486                 if (!(mrt->vif6_table[i].flags & VIFF_STATIC))
1487                         mif6_delete(mrt, i, &list);
1488         }
1489         unregister_netdevice_many(&list);
1490
1491         /*
1492          *      Wipe the cache
1493          */
1494         for (i = 0; i < MFC6_LINES; i++) {
1495                 list_for_each_entry_safe(c, next, &mrt->mfc6_cache_array[i], list) {
1496                         if (c->mfc_flags & MFC_STATIC)
1497                                 continue;
1498                         write_lock_bh(&mrt_lock);
1499                         list_del(&c->list);
1500                         write_unlock_bh(&mrt_lock);
1501
1502                         ip6mr_cache_free(c);
1503                 }
1504         }
1505
1506         if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
1507                 spin_lock_bh(&mfc_unres_lock);
1508                 list_for_each_entry_safe(c, next, &mrt->mfc6_unres_queue, list) {
1509                         list_del(&c->list);
1510                         ip6mr_destroy_unres(mrt, c);
1511                 }
1512                 spin_unlock_bh(&mfc_unres_lock);
1513         }
1514 }
1515
1516 static int ip6mr_sk_init(struct mr6_table *mrt, struct sock *sk)
1517 {
1518         int err = 0;
1519         struct net *net = sock_net(sk);
1520
1521         rtnl_lock();
1522         write_lock_bh(&mrt_lock);
1523         if (likely(mrt->mroute6_sk == NULL)) {
1524                 mrt->mroute6_sk = sk;
1525                 net->ipv6.devconf_all->mc_forwarding++;
1526         }
1527         else
1528                 err = -EADDRINUSE;
1529         write_unlock_bh(&mrt_lock);
1530
1531         rtnl_unlock();
1532
1533         return err;
1534 }
1535
1536 int ip6mr_sk_done(struct sock *sk)
1537 {
1538         int err = -EACCES;
1539         struct net *net = sock_net(sk);
1540         struct mr6_table *mrt;
1541
1542         rtnl_lock();
1543         ip6mr_for_each_table(mrt, net) {
1544                 if (sk == mrt->mroute6_sk) {
1545                         write_lock_bh(&mrt_lock);
1546                         mrt->mroute6_sk = NULL;
1547                         net->ipv6.devconf_all->mc_forwarding--;
1548                         write_unlock_bh(&mrt_lock);
1549
1550                         mroute_clean_tables(mrt);
1551                         err = 0;
1552                         break;
1553                 }
1554         }
1555         rtnl_unlock();
1556
1557         return err;
1558 }
1559
1560 struct sock *mroute6_socket(struct net *net, struct sk_buff *skb)
1561 {
1562         struct mr6_table *mrt;
1563         struct flowi6 fl6 = {
1564                 .flowi6_iif     = skb->skb_iif,
1565                 .flowi6_oif     = skb->dev->ifindex,
1566                 .flowi6_mark    = skb->mark,
1567         };
1568
1569         if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
1570                 return NULL;
1571
1572         return mrt->mroute6_sk;
1573 }
1574
1575 /*
1576  *      Socket options and virtual interface manipulation. The whole
1577  *      virtual interface system is a complete heap, but unfortunately
1578  *      that's how BSD mrouted happens to think. Maybe one day with a proper
1579  *      MOSPF/PIM router set up we can clean this up.
1580  */
1581
1582 int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsigned int optlen)
1583 {
1584         int ret;
1585         struct mif6ctl vif;
1586         struct mf6cctl mfc;
1587         mifi_t mifi;
1588         struct net *net = sock_net(sk);
1589         struct mr6_table *mrt;
1590
1591         mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
1592         if (mrt == NULL)
1593                 return -ENOENT;
1594
1595         if (optname != MRT6_INIT) {
1596                 if (sk != mrt->mroute6_sk && !capable(CAP_NET_ADMIN))
1597                         return -EACCES;
1598         }
1599
1600         switch (optname) {
1601         case MRT6_INIT:
1602                 if (sk->sk_type != SOCK_RAW ||
1603                     inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
1604                         return -EOPNOTSUPP;
1605                 if (optlen < sizeof(int))
1606                         return -EINVAL;
1607
1608                 return ip6mr_sk_init(mrt, sk);
1609
1610         case MRT6_DONE:
1611                 return ip6mr_sk_done(sk);
1612
1613         case MRT6_ADD_MIF:
1614                 if (optlen < sizeof(vif))
1615                         return -EINVAL;
1616                 if (copy_from_user(&vif, optval, sizeof(vif)))
1617                         return -EFAULT;
1618                 if (vif.mif6c_mifi >= MAXMIFS)
1619                         return -ENFILE;
1620                 rtnl_lock();
1621                 ret = mif6_add(net, mrt, &vif, sk == mrt->mroute6_sk);
1622                 rtnl_unlock();
1623                 return ret;
1624
1625         case MRT6_DEL_MIF:
1626                 if (optlen < sizeof(mifi_t))
1627                         return -EINVAL;
1628                 if (copy_from_user(&mifi, optval, sizeof(mifi_t)))
1629                         return -EFAULT;
1630                 rtnl_lock();
1631                 ret = mif6_delete(mrt, mifi, NULL);
1632                 rtnl_unlock();
1633                 return ret;
1634
1635         /*
1636          *      Manipulate the forwarding caches. These live
1637          *      in a sort of kernel/user symbiosis.
1638          */
1639         case MRT6_ADD_MFC:
1640         case MRT6_DEL_MFC:
1641                 if (optlen < sizeof(mfc))
1642                         return -EINVAL;
1643                 if (copy_from_user(&mfc, optval, sizeof(mfc)))
1644                         return -EFAULT;
1645                 rtnl_lock();
1646                 if (optname == MRT6_DEL_MFC)
1647                         ret = ip6mr_mfc_delete(mrt, &mfc);
1648                 else
1649                         ret = ip6mr_mfc_add(net, mrt, &mfc, sk == mrt->mroute6_sk);
1650                 rtnl_unlock();
1651                 return ret;
1652
1653         /*
1654          *      Control PIM assert (to activate pim will activate assert)
1655          */
1656         case MRT6_ASSERT:
1657         {
1658                 int v;
1659                 if (get_user(v, (int __user *)optval))
1660                         return -EFAULT;
1661                 mrt->mroute_do_assert = !!v;
1662                 return 0;
1663         }
1664
1665 #ifdef CONFIG_IPV6_PIMSM_V2
1666         case MRT6_PIM:
1667         {
1668                 int v;
1669                 if (get_user(v, (int __user *)optval))
1670                         return -EFAULT;
1671                 v = !!v;
1672                 rtnl_lock();
1673                 ret = 0;
1674                 if (v != mrt->mroute_do_pim) {
1675                         mrt->mroute_do_pim = v;
1676                         mrt->mroute_do_assert = v;
1677                 }
1678                 rtnl_unlock();
1679                 return ret;
1680         }
1681
1682 #endif
1683 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
1684         case MRT6_TABLE:
1685         {
1686                 u32 v;
1687
1688                 if (optlen != sizeof(u32))
1689                         return -EINVAL;
1690                 if (get_user(v, (u32 __user *)optval))
1691                         return -EFAULT;
1692                 if (sk == mrt->mroute6_sk)
1693                         return -EBUSY;
1694
1695                 rtnl_lock();
1696                 ret = 0;
1697                 if (!ip6mr_new_table(net, v))
1698                         ret = -ENOMEM;
1699                 raw6_sk(sk)->ip6mr_table = v;
1700                 rtnl_unlock();
1701                 return ret;
1702         }
1703 #endif
1704         /*
1705          *      Spurious command, or MRT6_VERSION which you cannot
1706          *      set.
1707          */
1708         default:
1709                 return -ENOPROTOOPT;
1710         }
1711 }
1712
1713 /*
1714  *      Getsock opt support for the multicast routing system.
1715  */
1716
1717 int ip6_mroute_getsockopt(struct sock *sk, int optname, char __user *optval,
1718                           int __user *optlen)
1719 {
1720         int olr;
1721         int val;
1722         struct net *net = sock_net(sk);
1723         struct mr6_table *mrt;
1724
1725         mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
1726         if (mrt == NULL)
1727                 return -ENOENT;
1728
1729         switch (optname) {
1730         case MRT6_VERSION:
1731                 val = 0x0305;
1732                 break;
1733 #ifdef CONFIG_IPV6_PIMSM_V2
1734         case MRT6_PIM:
1735                 val = mrt->mroute_do_pim;
1736                 break;
1737 #endif
1738         case MRT6_ASSERT:
1739                 val = mrt->mroute_do_assert;
1740                 break;
1741         default:
1742                 return -ENOPROTOOPT;
1743         }
1744
1745         if (get_user(olr, optlen))
1746                 return -EFAULT;
1747
1748         olr = min_t(int, olr, sizeof(int));
1749         if (olr < 0)
1750                 return -EINVAL;
1751
1752         if (put_user(olr, optlen))
1753                 return -EFAULT;
1754         if (copy_to_user(optval, &val, olr))
1755                 return -EFAULT;
1756         return 0;
1757 }
1758
1759 /*
1760  *      The IP multicast ioctl support routines.
1761  */
1762
1763 int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg)
1764 {
1765         struct sioc_sg_req6 sr;
1766         struct sioc_mif_req6 vr;
1767         struct mif_device *vif;
1768         struct mfc6_cache *c;
1769         struct net *net = sock_net(sk);
1770         struct mr6_table *mrt;
1771
1772         mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
1773         if (mrt == NULL)
1774                 return -ENOENT;
1775
1776         switch (cmd) {
1777         case SIOCGETMIFCNT_IN6:
1778                 if (copy_from_user(&vr, arg, sizeof(vr)))
1779                         return -EFAULT;
1780                 if (vr.mifi >= mrt->maxvif)
1781                         return -EINVAL;
1782                 read_lock(&mrt_lock);
1783                 vif = &mrt->vif6_table[vr.mifi];
1784                 if (MIF_EXISTS(mrt, vr.mifi)) {
1785                         vr.icount = vif->pkt_in;
1786                         vr.ocount = vif->pkt_out;
1787                         vr.ibytes = vif->bytes_in;
1788                         vr.obytes = vif->bytes_out;
1789                         read_unlock(&mrt_lock);
1790
1791                         if (copy_to_user(arg, &vr, sizeof(vr)))
1792                                 return -EFAULT;
1793                         return 0;
1794                 }
1795                 read_unlock(&mrt_lock);
1796                 return -EADDRNOTAVAIL;
1797         case SIOCGETSGCNT_IN6:
1798                 if (copy_from_user(&sr, arg, sizeof(sr)))
1799                         return -EFAULT;
1800
1801                 read_lock(&mrt_lock);
1802                 c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr);
1803                 if (c) {
1804                         sr.pktcnt = c->mfc_un.res.pkt;
1805                         sr.bytecnt = c->mfc_un.res.bytes;
1806                         sr.wrong_if = c->mfc_un.res.wrong_if;
1807                         read_unlock(&mrt_lock);
1808
1809                         if (copy_to_user(arg, &sr, sizeof(sr)))
1810                                 return -EFAULT;
1811                         return 0;
1812                 }
1813                 read_unlock(&mrt_lock);
1814                 return -EADDRNOTAVAIL;
1815         default:
1816                 return -ENOIOCTLCMD;
1817         }
1818 }
1819
1820 #ifdef CONFIG_COMPAT
1821 struct compat_sioc_sg_req6 {
1822         struct sockaddr_in6 src;
1823         struct sockaddr_in6 grp;
1824         compat_ulong_t pktcnt;
1825         compat_ulong_t bytecnt;
1826         compat_ulong_t wrong_if;
1827 };
1828
1829 struct compat_sioc_mif_req6 {
1830         mifi_t  mifi;
1831         compat_ulong_t icount;
1832         compat_ulong_t ocount;
1833         compat_ulong_t ibytes;
1834         compat_ulong_t obytes;
1835 };
1836
1837 int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
1838 {
1839         struct compat_sioc_sg_req6 sr;
1840         struct compat_sioc_mif_req6 vr;
1841         struct mif_device *vif;
1842         struct mfc6_cache *c;
1843         struct net *net = sock_net(sk);
1844         struct mr6_table *mrt;
1845
1846         mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
1847         if (mrt == NULL)
1848                 return -ENOENT;
1849
1850         switch (cmd) {
1851         case SIOCGETMIFCNT_IN6:
1852                 if (copy_from_user(&vr, arg, sizeof(vr)))
1853                         return -EFAULT;
1854                 if (vr.mifi >= mrt->maxvif)
1855                         return -EINVAL;
1856                 read_lock(&mrt_lock);
1857                 vif = &mrt->vif6_table[vr.mifi];
1858                 if (MIF_EXISTS(mrt, vr.mifi)) {
1859                         vr.icount = vif->pkt_in;
1860                         vr.ocount = vif->pkt_out;
1861                         vr.ibytes = vif->bytes_in;
1862                         vr.obytes = vif->bytes_out;
1863                         read_unlock(&mrt_lock);
1864
1865                         if (copy_to_user(arg, &vr, sizeof(vr)))
1866                                 return -EFAULT;
1867                         return 0;
1868                 }
1869                 read_unlock(&mrt_lock);
1870                 return -EADDRNOTAVAIL;
1871         case SIOCGETSGCNT_IN6:
1872                 if (copy_from_user(&sr, arg, sizeof(sr)))
1873                         return -EFAULT;
1874
1875                 read_lock(&mrt_lock);
1876                 c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr);
1877                 if (c) {
1878                         sr.pktcnt = c->mfc_un.res.pkt;
1879                         sr.bytecnt = c->mfc_un.res.bytes;
1880                         sr.wrong_if = c->mfc_un.res.wrong_if;
1881                         read_unlock(&mrt_lock);
1882
1883                         if (copy_to_user(arg, &sr, sizeof(sr)))
1884                                 return -EFAULT;
1885                         return 0;
1886                 }
1887                 read_unlock(&mrt_lock);
1888                 return -EADDRNOTAVAIL;
1889         default:
1890                 return -ENOIOCTLCMD;
1891         }
1892 }
1893 #endif
1894
1895 static inline int ip6mr_forward2_finish(struct sk_buff *skb)
1896 {
1897         IP6_INC_STATS_BH(dev_net(skb_dst(skb)->dev), ip6_dst_idev(skb_dst(skb)),
1898                          IPSTATS_MIB_OUTFORWDATAGRAMS);
1899         return dst_output(skb);
1900 }
1901
1902 /*
1903  *      Processing handlers for ip6mr_forward
1904  */
1905
1906 static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,
1907                           struct sk_buff *skb, struct mfc6_cache *c, int vifi)
1908 {
1909         struct ipv6hdr *ipv6h;
1910         struct mif_device *vif = &mrt->vif6_table[vifi];
1911         struct net_device *dev;
1912         struct dst_entry *dst;
1913         struct flowi6 fl6;
1914
1915         if (vif->dev == NULL)
1916                 goto out_free;
1917
1918 #ifdef CONFIG_IPV6_PIMSM_V2
1919         if (vif->flags & MIFF_REGISTER) {
1920                 vif->pkt_out++;
1921                 vif->bytes_out += skb->len;
1922                 vif->dev->stats.tx_bytes += skb->len;
1923                 vif->dev->stats.tx_packets++;
1924                 ip6mr_cache_report(mrt, skb, vifi, MRT6MSG_WHOLEPKT);
1925                 goto out_free;
1926         }
1927 #endif
1928
1929         ipv6h = ipv6_hdr(skb);
1930
1931         fl6 = (struct flowi6) {
1932                 .flowi6_oif = vif->link,
1933                 .daddr = ipv6h->daddr,
1934         };
1935
1936         dst = ip6_route_output(net, NULL, &fl6);
1937         if (!dst)
1938                 goto out_free;
1939
1940         skb_dst_drop(skb);
1941         skb_dst_set(skb, dst);
1942
1943         /*
1944          * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally
1945          * not only before forwarding, but after forwarding on all output
1946          * interfaces. It is clear, if mrouter runs a multicasting
1947          * program, it should receive packets not depending to what interface
1948          * program is joined.
1949          * If we will not make it, the program will have to join on all
1950          * interfaces. On the other hand, multihoming host (or router, but
1951          * not mrouter) cannot join to more than one interface - it will
1952          * result in receiving multiple packets.
1953          */
1954         dev = vif->dev;
1955         skb->dev = dev;
1956         vif->pkt_out++;
1957         vif->bytes_out += skb->len;
1958
1959         /* We are about to write */
1960         /* XXX: extension headers? */
1961         if (skb_cow(skb, sizeof(*ipv6h) + LL_RESERVED_SPACE(dev)))
1962                 goto out_free;
1963
1964         ipv6h = ipv6_hdr(skb);
1965         ipv6h->hop_limit--;
1966
1967         IP6CB(skb)->flags |= IP6SKB_FORWARDED;
1968
1969         return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD, skb, skb->dev, dev,
1970                        ip6mr_forward2_finish);
1971
1972 out_free:
1973         kfree_skb(skb);
1974         return 0;
1975 }
1976
1977 static int ip6mr_find_vif(struct mr6_table *mrt, struct net_device *dev)
1978 {
1979         int ct;
1980
1981         for (ct = mrt->maxvif - 1; ct >= 0; ct--) {
1982                 if (mrt->vif6_table[ct].dev == dev)
1983                         break;
1984         }
1985         return ct;
1986 }
1987
1988 static int ip6_mr_forward(struct net *net, struct mr6_table *mrt,
1989                           struct sk_buff *skb, struct mfc6_cache *cache)
1990 {
1991         int psend = -1;
1992         int vif, ct;
1993
1994         vif = cache->mf6c_parent;
1995         cache->mfc_un.res.pkt++;
1996         cache->mfc_un.res.bytes += skb->len;
1997
1998         /*
1999          * Wrong interface: drop packet and (maybe) send PIM assert.
2000          */
2001         if (mrt->vif6_table[vif].dev != skb->dev) {
2002                 int true_vifi;
2003
2004                 cache->mfc_un.res.wrong_if++;
2005                 true_vifi = ip6mr_find_vif(mrt, skb->dev);
2006
2007                 if (true_vifi >= 0 && mrt->mroute_do_assert &&
2008                     /* pimsm uses asserts, when switching from RPT to SPT,
2009                        so that we cannot check that packet arrived on an oif.
2010                        It is bad, but otherwise we would need to move pretty
2011                        large chunk of pimd to kernel. Ough... --ANK
2012                      */
2013                     (mrt->mroute_do_pim ||
2014                      cache->mfc_un.res.ttls[true_vifi] < 255) &&
2015                     time_after(jiffies,
2016                                cache->mfc_un.res.last_assert + MFC_ASSERT_THRESH)) {
2017                         cache->mfc_un.res.last_assert = jiffies;
2018                         ip6mr_cache_report(mrt, skb, true_vifi, MRT6MSG_WRONGMIF);
2019                 }
2020                 goto dont_forward;
2021         }
2022
2023         mrt->vif6_table[vif].pkt_in++;
2024         mrt->vif6_table[vif].bytes_in += skb->len;
2025
2026         /*
2027          *      Forward the frame
2028          */
2029         for (ct = cache->mfc_un.res.maxvif - 1; ct >= cache->mfc_un.res.minvif; ct--) {
2030                 if (ipv6_hdr(skb)->hop_limit > cache->mfc_un.res.ttls[ct]) {
2031                         if (psend != -1) {
2032                                 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
2033                                 if (skb2)
2034                                         ip6mr_forward2(net, mrt, skb2, cache, psend);
2035                         }
2036                         psend = ct;
2037                 }
2038         }
2039         if (psend != -1) {
2040                 ip6mr_forward2(net, mrt, skb, cache, psend);
2041                 return 0;
2042         }
2043
2044 dont_forward:
2045         kfree_skb(skb);
2046         return 0;
2047 }
2048
2049
2050 /*
2051  *      Multicast packets for forwarding arrive here
2052  */
2053
2054 int ip6_mr_input(struct sk_buff *skb)
2055 {
2056         struct mfc6_cache *cache;
2057         struct net *net = dev_net(skb->dev);
2058         struct mr6_table *mrt;
2059         struct flowi6 fl6 = {
2060                 .flowi6_iif     = skb->dev->ifindex,
2061                 .flowi6_mark    = skb->mark,
2062         };
2063         int err;
2064
2065         err = ip6mr_fib_lookup(net, &fl6, &mrt);
2066         if (err < 0) {
2067                 kfree_skb(skb);
2068                 return err;
2069         }
2070
2071         read_lock(&mrt_lock);
2072         cache = ip6mr_cache_find(mrt,
2073                                  &ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr);
2074
2075         /*
2076          *      No usable cache entry
2077          */
2078         if (cache == NULL) {
2079                 int vif;
2080
2081                 vif = ip6mr_find_vif(mrt, skb->dev);
2082                 if (vif >= 0) {
2083                         int err = ip6mr_cache_unresolved(mrt, vif, skb);
2084                         read_unlock(&mrt_lock);
2085
2086                         return err;
2087                 }
2088                 read_unlock(&mrt_lock);
2089                 kfree_skb(skb);
2090                 return -ENODEV;
2091         }
2092
2093         ip6_mr_forward(net, mrt, skb, cache);
2094
2095         read_unlock(&mrt_lock);
2096
2097         return 0;
2098 }
2099
2100
2101 static int __ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
2102                                struct mfc6_cache *c, struct rtmsg *rtm)
2103 {
2104         int ct;
2105         struct rtnexthop *nhp;
2106         u8 *b = skb_tail_pointer(skb);
2107         struct rtattr *mp_head;
2108
2109         /* If cache is unresolved, don't try to parse IIF and OIF */
2110         if (c->mf6c_parent >= MAXMIFS)
2111                 return -ENOENT;
2112
2113         if (MIF_EXISTS(mrt, c->mf6c_parent))
2114                 RTA_PUT(skb, RTA_IIF, 4, &mrt->vif6_table[c->mf6c_parent].dev->ifindex);
2115
2116         mp_head = (struct rtattr *)skb_put(skb, RTA_LENGTH(0));
2117
2118         for (ct = c->mfc_un.res.minvif; ct < c->mfc_un.res.maxvif; ct++) {
2119                 if (MIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) {
2120                         if (skb_tailroom(skb) < RTA_ALIGN(RTA_ALIGN(sizeof(*nhp)) + 4))
2121                                 goto rtattr_failure;
2122                         nhp = (struct rtnexthop *)skb_put(skb, RTA_ALIGN(sizeof(*nhp)));
2123                         nhp->rtnh_flags = 0;
2124                         nhp->rtnh_hops = c->mfc_un.res.ttls[ct];
2125                         nhp->rtnh_ifindex = mrt->vif6_table[ct].dev->ifindex;
2126                         nhp->rtnh_len = sizeof(*nhp);
2127                 }
2128         }
2129         mp_head->rta_type = RTA_MULTIPATH;
2130         mp_head->rta_len = skb_tail_pointer(skb) - (u8 *)mp_head;
2131         rtm->rtm_type = RTN_MULTICAST;
2132         return 1;
2133
2134 rtattr_failure:
2135         nlmsg_trim(skb, b);
2136         return -EMSGSIZE;
2137 }
2138
2139 int ip6mr_get_route(struct net *net,
2140                     struct sk_buff *skb, struct rtmsg *rtm, int nowait)
2141 {
2142         int err;
2143         struct mr6_table *mrt;
2144         struct mfc6_cache *cache;
2145         struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
2146
2147         mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
2148         if (mrt == NULL)
2149                 return -ENOENT;
2150
2151         read_lock(&mrt_lock);
2152         cache = ip6mr_cache_find(mrt, &rt->rt6i_src.addr, &rt->rt6i_dst.addr);
2153
2154         if (!cache) {
2155                 struct sk_buff *skb2;
2156                 struct ipv6hdr *iph;
2157                 struct net_device *dev;
2158                 int vif;
2159
2160                 if (nowait) {
2161                         read_unlock(&mrt_lock);
2162                         return -EAGAIN;
2163                 }
2164
2165                 dev = skb->dev;
2166                 if (dev == NULL || (vif = ip6mr_find_vif(mrt, dev)) < 0) {
2167                         read_unlock(&mrt_lock);
2168                         return -ENODEV;
2169                 }
2170
2171                 /* really correct? */
2172                 skb2 = alloc_skb(sizeof(struct ipv6hdr), GFP_ATOMIC);
2173                 if (!skb2) {
2174                         read_unlock(&mrt_lock);
2175                         return -ENOMEM;
2176                 }
2177
2178                 skb_reset_transport_header(skb2);
2179
2180                 skb_put(skb2, sizeof(struct ipv6hdr));
2181                 skb_reset_network_header(skb2);
2182
2183                 iph = ipv6_hdr(skb2);
2184                 iph->version = 0;
2185                 iph->priority = 0;
2186                 iph->flow_lbl[0] = 0;
2187                 iph->flow_lbl[1] = 0;
2188                 iph->flow_lbl[2] = 0;
2189                 iph->payload_len = 0;
2190                 iph->nexthdr = IPPROTO_NONE;
2191                 iph->hop_limit = 0;
2192                 ipv6_addr_copy(&iph->saddr, &rt->rt6i_src.addr);
2193                 ipv6_addr_copy(&iph->daddr, &rt->rt6i_dst.addr);
2194
2195                 err = ip6mr_cache_unresolved(mrt, vif, skb2);
2196                 read_unlock(&mrt_lock);
2197
2198                 return err;
2199         }
2200
2201         if (!nowait && (rtm->rtm_flags&RTM_F_NOTIFY))
2202                 cache->mfc_flags |= MFC_NOTIFY;
2203
2204         err = __ip6mr_fill_mroute(mrt, skb, cache, rtm);
2205         read_unlock(&mrt_lock);
2206         return err;
2207 }
2208
2209 static int ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
2210                              u32 pid, u32 seq, struct mfc6_cache *c)
2211 {
2212         struct nlmsghdr *nlh;
2213         struct rtmsg *rtm;
2214
2215         nlh = nlmsg_put(skb, pid, seq, RTM_NEWROUTE, sizeof(*rtm), NLM_F_MULTI);
2216         if (nlh == NULL)
2217                 return -EMSGSIZE;
2218
2219         rtm = nlmsg_data(nlh);
2220         rtm->rtm_family   = RTNL_FAMILY_IPMR;
2221         rtm->rtm_dst_len  = 128;
2222         rtm->rtm_src_len  = 128;
2223         rtm->rtm_tos      = 0;
2224         rtm->rtm_table    = mrt->id;
2225         NLA_PUT_U32(skb, RTA_TABLE, mrt->id);
2226         rtm->rtm_scope    = RT_SCOPE_UNIVERSE;
2227         rtm->rtm_protocol = RTPROT_UNSPEC;
2228         rtm->rtm_flags    = 0;
2229
2230         NLA_PUT(skb, RTA_SRC, 16, &c->mf6c_origin);
2231         NLA_PUT(skb, RTA_DST, 16, &c->mf6c_mcastgrp);
2232
2233         if (__ip6mr_fill_mroute(mrt, skb, c, rtm) < 0)
2234                 goto nla_put_failure;
2235
2236         return nlmsg_end(skb, nlh);
2237
2238 nla_put_failure:
2239         nlmsg_cancel(skb, nlh);
2240         return -EMSGSIZE;
2241 }
2242
2243 static int ip6mr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb)
2244 {
2245         struct net *net = sock_net(skb->sk);
2246         struct mr6_table *mrt;
2247         struct mfc6_cache *mfc;
2248         unsigned int t = 0, s_t;
2249         unsigned int h = 0, s_h;
2250         unsigned int e = 0, s_e;
2251
2252         s_t = cb->args[0];
2253         s_h = cb->args[1];
2254         s_e = cb->args[2];
2255
2256         read_lock(&mrt_lock);
2257         ip6mr_for_each_table(mrt, net) {
2258                 if (t < s_t)
2259                         goto next_table;
2260                 if (t > s_t)
2261                         s_h = 0;
2262                 for (h = s_h; h < MFC6_LINES; h++) {
2263                         list_for_each_entry(mfc, &mrt->mfc6_cache_array[h], list) {
2264                                 if (e < s_e)
2265                                         goto next_entry;
2266                                 if (ip6mr_fill_mroute(mrt, skb,
2267                                                       NETLINK_CB(cb->skb).pid,
2268                                                       cb->nlh->nlmsg_seq,
2269                                                       mfc) < 0)
2270                                         goto done;
2271 next_entry:
2272                                 e++;
2273                         }
2274                         e = s_e = 0;
2275                 }
2276                 s_h = 0;
2277 next_table:
2278                 t++;
2279         }
2280 done:
2281         read_unlock(&mrt_lock);
2282
2283         cb->args[2] = e;
2284         cb->args[1] = h;
2285         cb->args[0] = t;
2286
2287         return skb->len;
2288 }