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