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