xref: /openbmc/linux/net/ipv6/addrconf.c (revision 9acd9f3ae92d0dc0ca7504fb48c1040e8bbc39fe)
1 /*
2  *	IPv6 Address [auto]configuration
3  *	Linux INET6 implementation
4  *
5  *	Authors:
6  *	Pedro Roque		<roque@di.fc.ul.pt>
7  *	Alexey Kuznetsov	<kuznet@ms2.inr.ac.ru>
8  *
9  *	$Id: addrconf.c,v 1.69 2001/10/31 21:55:54 davem Exp $
10  *
11  *	This program is free software; you can redistribute it and/or
12  *      modify it under the terms of the GNU General Public License
13  *      as published by the Free Software Foundation; either version
14  *      2 of the License, or (at your option) any later version.
15  */
16 
17 /*
18  *	Changes:
19  *
20  *	Janos Farkas			:	delete timer on ifdown
21  *	<chexum@bankinf.banki.hu>
22  *	Andi Kleen			:	kill double kfree on module
23  *						unload.
24  *	Maciej W. Rozycki		:	FDDI support
25  *	sekiya@USAGI			:	Don't send too many RS
26  *						packets.
27  *	yoshfuji@USAGI			:       Fixed interval between DAD
28  *						packets.
29  *	YOSHIFUJI Hideaki @USAGI	:	improved accuracy of
30  *						address validation timer.
31  *	YOSHIFUJI Hideaki @USAGI	:	Privacy Extensions (RFC3041)
32  *						support.
33  *	Yuji SEKIYA @USAGI		:	Don't assign a same IPv6
34  *						address on a same interface.
35  *	YOSHIFUJI Hideaki @USAGI	:	ARCnet support
36  *	YOSHIFUJI Hideaki @USAGI	:	convert /proc/net/if_inet6 to
37  *						seq_file.
38  *	YOSHIFUJI Hideaki @USAGI	:	improved source address
39  *						selection; consider scope,
40  *						status etc.
41  */
42 
43 #include <linux/errno.h>
44 #include <linux/types.h>
45 #include <linux/socket.h>
46 #include <linux/sockios.h>
47 #include <linux/net.h>
48 #include <linux/in6.h>
49 #include <linux/netdevice.h>
50 #include <linux/if_addr.h>
51 #include <linux/if_arp.h>
52 #include <linux/if_arcnet.h>
53 #include <linux/if_infiniband.h>
54 #include <linux/route.h>
55 #include <linux/inetdevice.h>
56 #include <linux/init.h>
57 #ifdef CONFIG_SYSCTL
58 #include <linux/sysctl.h>
59 #endif
60 #include <linux/capability.h>
61 #include <linux/delay.h>
62 #include <linux/notifier.h>
63 #include <linux/string.h>
64 
65 #include <net/net_namespace.h>
66 #include <net/sock.h>
67 #include <net/snmp.h>
68 
69 #include <net/ipv6.h>
70 #include <net/protocol.h>
71 #include <net/ndisc.h>
72 #include <net/ip6_route.h>
73 #include <net/addrconf.h>
74 #include <net/tcp.h>
75 #include <net/ip.h>
76 #include <net/netlink.h>
77 #include <net/pkt_sched.h>
78 #include <linux/if_tunnel.h>
79 #include <linux/rtnetlink.h>
80 
81 #ifdef CONFIG_IPV6_PRIVACY
82 #include <linux/random.h>
83 #endif
84 
85 #include <asm/uaccess.h>
86 #include <asm/unaligned.h>
87 
88 #include <linux/proc_fs.h>
89 #include <linux/seq_file.h>
90 
91 /* Set to 3 to get tracing... */
92 #define ACONF_DEBUG 2
93 
94 #if ACONF_DEBUG >= 3
95 #define ADBG(x) printk x
96 #else
97 #define ADBG(x)
98 #endif
99 
100 #define	INFINITY_LIFE_TIME	0xFFFFFFFF
101 #define TIME_DELTA(a,b) ((unsigned long)((long)(a) - (long)(b)))
102 
103 #ifdef CONFIG_SYSCTL
104 static void addrconf_sysctl_register(struct inet6_dev *idev);
105 static void addrconf_sysctl_unregister(struct inet6_dev *idev);
106 #else
107 static inline void addrconf_sysctl_register(struct inet6_dev *idev)
108 {
109 }
110 
111 static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
112 {
113 }
114 #endif
115 
116 #ifdef CONFIG_IPV6_PRIVACY
117 static int __ipv6_regen_rndid(struct inet6_dev *idev);
118 static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
119 static void ipv6_regen_rndid(unsigned long data);
120 
121 static int desync_factor = MAX_DESYNC_FACTOR * HZ;
122 #endif
123 
124 static int ipv6_count_addresses(struct inet6_dev *idev);
125 
126 /*
127  *	Configured unicast address hash table
128  */
129 static struct inet6_ifaddr		*inet6_addr_lst[IN6_ADDR_HSIZE];
130 static DEFINE_RWLOCK(addrconf_hash_lock);
131 
132 static void addrconf_verify(unsigned long);
133 
134 static DEFINE_TIMER(addr_chk_timer, addrconf_verify, 0, 0);
135 static DEFINE_SPINLOCK(addrconf_verify_lock);
136 
137 static void addrconf_join_anycast(struct inet6_ifaddr *ifp);
138 static void addrconf_leave_anycast(struct inet6_ifaddr *ifp);
139 
140 static int addrconf_ifdown(struct net_device *dev, int how);
141 
142 static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags);
143 static void addrconf_dad_timer(unsigned long data);
144 static void addrconf_dad_completed(struct inet6_ifaddr *ifp);
145 static void addrconf_dad_run(struct inet6_dev *idev);
146 static void addrconf_rs_timer(unsigned long data);
147 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
148 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
149 
150 static void inet6_prefix_notify(int event, struct inet6_dev *idev,
151 				struct prefix_info *pinfo);
152 static int ipv6_chk_same_addr(struct net *net, const struct in6_addr *addr,
153 			      struct net_device *dev);
154 
155 static ATOMIC_NOTIFIER_HEAD(inet6addr_chain);
156 
157 struct ipv6_devconf ipv6_devconf __read_mostly = {
158 	.forwarding		= 0,
159 	.hop_limit		= IPV6_DEFAULT_HOPLIMIT,
160 	.mtu6			= IPV6_MIN_MTU,
161 	.accept_ra		= 1,
162 	.accept_redirects	= 1,
163 	.autoconf		= 1,
164 	.force_mld_version	= 0,
165 	.dad_transmits		= 1,
166 	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
167 	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
168 	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
169 #ifdef CONFIG_IPV6_PRIVACY
170 	.use_tempaddr 		= 0,
171 	.temp_valid_lft		= TEMP_VALID_LIFETIME,
172 	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
173 	.regen_max_retry	= REGEN_MAX_RETRY,
174 	.max_desync_factor	= MAX_DESYNC_FACTOR,
175 #endif
176 	.max_addresses		= IPV6_MAX_ADDRESSES,
177 	.accept_ra_defrtr	= 1,
178 	.accept_ra_pinfo	= 1,
179 #ifdef CONFIG_IPV6_ROUTER_PREF
180 	.accept_ra_rtr_pref	= 1,
181 	.rtr_probe_interval	= 60 * HZ,
182 #ifdef CONFIG_IPV6_ROUTE_INFO
183 	.accept_ra_rt_info_max_plen = 0,
184 #endif
185 #endif
186 	.proxy_ndp		= 0,
187 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
188 };
189 
190 static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
191 	.forwarding		= 0,
192 	.hop_limit		= IPV6_DEFAULT_HOPLIMIT,
193 	.mtu6			= IPV6_MIN_MTU,
194 	.accept_ra		= 1,
195 	.accept_redirects	= 1,
196 	.autoconf		= 1,
197 	.dad_transmits		= 1,
198 	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
199 	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
200 	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
201 #ifdef CONFIG_IPV6_PRIVACY
202 	.use_tempaddr		= 0,
203 	.temp_valid_lft		= TEMP_VALID_LIFETIME,
204 	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
205 	.regen_max_retry	= REGEN_MAX_RETRY,
206 	.max_desync_factor	= MAX_DESYNC_FACTOR,
207 #endif
208 	.max_addresses		= IPV6_MAX_ADDRESSES,
209 	.accept_ra_defrtr	= 1,
210 	.accept_ra_pinfo	= 1,
211 #ifdef CONFIG_IPV6_ROUTER_PREF
212 	.accept_ra_rtr_pref	= 1,
213 	.rtr_probe_interval	= 60 * HZ,
214 #ifdef CONFIG_IPV6_ROUTE_INFO
215 	.accept_ra_rt_info_max_plen = 0,
216 #endif
217 #endif
218 	.proxy_ndp		= 0,
219 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
220 };
221 
222 /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */
223 const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
224 const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT;
225 
226 /* Check if a valid qdisc is available */
227 static inline int addrconf_qdisc_ok(struct net_device *dev)
228 {
229 	return (dev->qdisc != &noop_qdisc);
230 }
231 
232 static void addrconf_del_timer(struct inet6_ifaddr *ifp)
233 {
234 	if (del_timer(&ifp->timer))
235 		__in6_ifa_put(ifp);
236 }
237 
238 enum addrconf_timer_t
239 {
240 	AC_NONE,
241 	AC_DAD,
242 	AC_RS,
243 };
244 
245 static void addrconf_mod_timer(struct inet6_ifaddr *ifp,
246 			       enum addrconf_timer_t what,
247 			       unsigned long when)
248 {
249 	if (!del_timer(&ifp->timer))
250 		in6_ifa_hold(ifp);
251 
252 	switch (what) {
253 	case AC_DAD:
254 		ifp->timer.function = addrconf_dad_timer;
255 		break;
256 	case AC_RS:
257 		ifp->timer.function = addrconf_rs_timer;
258 		break;
259 	default:;
260 	}
261 	ifp->timer.expires = jiffies + when;
262 	add_timer(&ifp->timer);
263 }
264 
265 static int snmp6_alloc_dev(struct inet6_dev *idev)
266 {
267 	if (snmp_mib_init((void **)idev->stats.ipv6,
268 			  sizeof(struct ipstats_mib)) < 0)
269 		goto err_ip;
270 	if (snmp_mib_init((void **)idev->stats.icmpv6,
271 			  sizeof(struct icmpv6_mib)) < 0)
272 		goto err_icmp;
273 	if (snmp_mib_init((void **)idev->stats.icmpv6msg,
274 			  sizeof(struct icmpv6msg_mib)) < 0)
275 		goto err_icmpmsg;
276 
277 	return 0;
278 
279 err_icmpmsg:
280 	snmp_mib_free((void **)idev->stats.icmpv6);
281 err_icmp:
282 	snmp_mib_free((void **)idev->stats.ipv6);
283 err_ip:
284 	return -ENOMEM;
285 }
286 
287 static void snmp6_free_dev(struct inet6_dev *idev)
288 {
289 	snmp_mib_free((void **)idev->stats.icmpv6msg);
290 	snmp_mib_free((void **)idev->stats.icmpv6);
291 	snmp_mib_free((void **)idev->stats.ipv6);
292 }
293 
294 /* Nobody refers to this device, we may destroy it. */
295 
296 static void in6_dev_finish_destroy_rcu(struct rcu_head *head)
297 {
298 	struct inet6_dev *idev = container_of(head, struct inet6_dev, rcu);
299 	kfree(idev);
300 }
301 
302 void in6_dev_finish_destroy(struct inet6_dev *idev)
303 {
304 	struct net_device *dev = idev->dev;
305 	BUG_TRAP(idev->addr_list==NULL);
306 	BUG_TRAP(idev->mc_list==NULL);
307 #ifdef NET_REFCNT_DEBUG
308 	printk(KERN_DEBUG "in6_dev_finish_destroy: %s\n", dev ? dev->name : "NIL");
309 #endif
310 	dev_put(dev);
311 	if (!idev->dead) {
312 		printk("Freeing alive inet6 device %p\n", idev);
313 		return;
314 	}
315 	snmp6_free_dev(idev);
316 	call_rcu(&idev->rcu, in6_dev_finish_destroy_rcu);
317 }
318 
319 EXPORT_SYMBOL(in6_dev_finish_destroy);
320 
321 static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
322 {
323 	struct inet6_dev *ndev;
324 	struct in6_addr maddr;
325 
326 	ASSERT_RTNL();
327 
328 	if (dev->mtu < IPV6_MIN_MTU)
329 		return NULL;
330 
331 	ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL);
332 
333 	if (ndev == NULL)
334 		return NULL;
335 
336 	rwlock_init(&ndev->lock);
337 	ndev->dev = dev;
338 	memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
339 	ndev->cnf.mtu6 = dev->mtu;
340 	ndev->cnf.sysctl = NULL;
341 	ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
342 	if (ndev->nd_parms == NULL) {
343 		kfree(ndev);
344 		return NULL;
345 	}
346 	/* We refer to the device */
347 	dev_hold(dev);
348 
349 	if (snmp6_alloc_dev(ndev) < 0) {
350 		ADBG((KERN_WARNING
351 			"%s(): cannot allocate memory for statistics; dev=%s.\n",
352 			__func__, dev->name));
353 		neigh_parms_release(&nd_tbl, ndev->nd_parms);
354 		ndev->dead = 1;
355 		in6_dev_finish_destroy(ndev);
356 		return NULL;
357 	}
358 
359 	if (snmp6_register_dev(ndev) < 0) {
360 		ADBG((KERN_WARNING
361 			"%s(): cannot create /proc/net/dev_snmp6/%s\n",
362 			__func__, dev->name));
363 		neigh_parms_release(&nd_tbl, ndev->nd_parms);
364 		ndev->dead = 1;
365 		in6_dev_finish_destroy(ndev);
366 		return NULL;
367 	}
368 
369 	/* One reference from device.  We must do this before
370 	 * we invoke __ipv6_regen_rndid().
371 	 */
372 	in6_dev_hold(ndev);
373 
374 #ifdef CONFIG_IPV6_PRIVACY
375 	setup_timer(&ndev->regen_timer, ipv6_regen_rndid, (unsigned long)ndev);
376 	if ((dev->flags&IFF_LOOPBACK) ||
377 	    dev->type == ARPHRD_TUNNEL ||
378 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
379 	    dev->type == ARPHRD_SIT ||
380 #endif
381 	    dev->type == ARPHRD_NONE) {
382 		printk(KERN_INFO
383 		       "%s: Disabled Privacy Extensions\n",
384 		       dev->name);
385 		ndev->cnf.use_tempaddr = -1;
386 
387 		if (dev->type == ARPHRD_SIT && (dev->priv_flags & IFF_ISATAP)) {
388 			printk(KERN_INFO
389 			       "%s: Disabled Multicast RS\n",
390 			       dev->name);
391 			ndev->cnf.rtr_solicits = 0;
392 		}
393 	} else {
394 		in6_dev_hold(ndev);
395 		ipv6_regen_rndid((unsigned long) ndev);
396 	}
397 #endif
398 
399 	if (netif_running(dev) && addrconf_qdisc_ok(dev))
400 		ndev->if_flags |= IF_READY;
401 
402 	ipv6_mc_init_dev(ndev);
403 	ndev->tstamp = jiffies;
404 	addrconf_sysctl_register(ndev);
405 	/* protected by rtnl_lock */
406 	rcu_assign_pointer(dev->ip6_ptr, ndev);
407 
408 	/* Join all-node multicast group */
409 	ipv6_addr_all_nodes(&maddr);
410 	ipv6_dev_mc_inc(dev, &maddr);
411 
412 	return ndev;
413 }
414 
415 struct inet6_dev * ipv6_find_idev(struct net_device *dev)
416 {
417 	struct inet6_dev *idev;
418 
419 	ASSERT_RTNL();
420 
421 	if ((idev = __in6_dev_get(dev)) == NULL) {
422 		if ((idev = ipv6_add_dev(dev)) == NULL)
423 			return NULL;
424 	}
425 
426 	if (dev->flags&IFF_UP)
427 		ipv6_mc_up(idev);
428 	return idev;
429 }
430 
431 #ifdef CONFIG_SYSCTL
432 static void dev_forward_change(struct inet6_dev *idev)
433 {
434 	struct net_device *dev;
435 	struct inet6_ifaddr *ifa;
436 	struct in6_addr addr;
437 
438 	if (!idev)
439 		return;
440 	dev = idev->dev;
441 	if (dev && (dev->flags & IFF_MULTICAST)) {
442 		ipv6_addr_all_routers(&addr);
443 
444 		if (idev->cnf.forwarding)
445 			ipv6_dev_mc_inc(dev, &addr);
446 		else
447 			ipv6_dev_mc_dec(dev, &addr);
448 	}
449 	for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) {
450 		if (ifa->flags&IFA_F_TENTATIVE)
451 			continue;
452 		if (idev->cnf.forwarding)
453 			addrconf_join_anycast(ifa);
454 		else
455 			addrconf_leave_anycast(ifa);
456 	}
457 }
458 
459 
460 static void addrconf_forward_change(struct net *net, __s32 newf)
461 {
462 	struct net_device *dev;
463 	struct inet6_dev *idev;
464 
465 	read_lock(&dev_base_lock);
466 	for_each_netdev(net, dev) {
467 		rcu_read_lock();
468 		idev = __in6_dev_get(dev);
469 		if (idev) {
470 			int changed = (!idev->cnf.forwarding) ^ (!newf);
471 			idev->cnf.forwarding = newf;
472 			if (changed)
473 				dev_forward_change(idev);
474 		}
475 		rcu_read_unlock();
476 	}
477 	read_unlock(&dev_base_lock);
478 }
479 
480 static void addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old)
481 {
482 	struct net *net;
483 
484 	net = (struct net *)table->extra2;
485 	if (p == &net->ipv6.devconf_dflt->forwarding)
486 		return;
487 
488 	if (p == &net->ipv6.devconf_all->forwarding) {
489 		__s32 newf = net->ipv6.devconf_all->forwarding;
490 		net->ipv6.devconf_dflt->forwarding = newf;
491 		addrconf_forward_change(net, newf);
492 	} else if ((!*p) ^ (!old))
493 		dev_forward_change((struct inet6_dev *)table->extra1);
494 
495 	if (*p)
496 		rt6_purge_dflt_routers(net);
497 }
498 #endif
499 
500 /* Nobody refers to this ifaddr, destroy it */
501 
502 void inet6_ifa_finish_destroy(struct inet6_ifaddr *ifp)
503 {
504 	BUG_TRAP(ifp->if_next==NULL);
505 	BUG_TRAP(ifp->lst_next==NULL);
506 #ifdef NET_REFCNT_DEBUG
507 	printk(KERN_DEBUG "inet6_ifa_finish_destroy\n");
508 #endif
509 
510 	in6_dev_put(ifp->idev);
511 
512 	if (del_timer(&ifp->timer))
513 		printk("Timer is still running, when freeing ifa=%p\n", ifp);
514 
515 	if (!ifp->dead) {
516 		printk("Freeing alive inet6 address %p\n", ifp);
517 		return;
518 	}
519 	dst_release(&ifp->rt->u.dst);
520 
521 	kfree(ifp);
522 }
523 
524 static void
525 ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
526 {
527 	struct inet6_ifaddr *ifa, **ifap;
528 	int ifp_scope = ipv6_addr_src_scope(&ifp->addr);
529 
530 	/*
531 	 * Each device address list is sorted in order of scope -
532 	 * global before linklocal.
533 	 */
534 	for (ifap = &idev->addr_list; (ifa = *ifap) != NULL;
535 	     ifap = &ifa->if_next) {
536 		if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr))
537 			break;
538 	}
539 
540 	ifp->if_next = *ifap;
541 	*ifap = ifp;
542 }
543 
544 /*
545  *	Hash function taken from net_alias.c
546  */
547 static u8 ipv6_addr_hash(const struct in6_addr *addr)
548 {
549 	__u32 word;
550 
551 	/*
552 	 * We perform the hash function over the last 64 bits of the address
553 	 * This will include the IEEE address token on links that support it.
554 	 */
555 
556 	word = (__force u32)(addr->s6_addr32[2] ^ addr->s6_addr32[3]);
557 	word ^= (word >> 16);
558 	word ^= (word >> 8);
559 
560 	return ((word ^ (word >> 4)) & 0x0f);
561 }
562 
563 /* On success it returns ifp with increased reference count */
564 
565 static struct inet6_ifaddr *
566 ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen,
567 	      int scope, u32 flags)
568 {
569 	struct inet6_ifaddr *ifa = NULL;
570 	struct rt6_info *rt;
571 	int hash;
572 	int err = 0;
573 
574 	rcu_read_lock_bh();
575 	if (idev->dead) {
576 		err = -ENODEV;			/*XXX*/
577 		goto out2;
578 	}
579 
580 	write_lock(&addrconf_hash_lock);
581 
582 	/* Ignore adding duplicate addresses on an interface */
583 	if (ipv6_chk_same_addr(dev_net(idev->dev), addr, idev->dev)) {
584 		ADBG(("ipv6_add_addr: already assigned\n"));
585 		err = -EEXIST;
586 		goto out;
587 	}
588 
589 	ifa = kzalloc(sizeof(struct inet6_ifaddr), GFP_ATOMIC);
590 
591 	if (ifa == NULL) {
592 		ADBG(("ipv6_add_addr: malloc failed\n"));
593 		err = -ENOBUFS;
594 		goto out;
595 	}
596 
597 	rt = addrconf_dst_alloc(idev, addr, 0);
598 	if (IS_ERR(rt)) {
599 		err = PTR_ERR(rt);
600 		goto out;
601 	}
602 
603 	ipv6_addr_copy(&ifa->addr, addr);
604 
605 	spin_lock_init(&ifa->lock);
606 	init_timer(&ifa->timer);
607 	ifa->timer.data = (unsigned long) ifa;
608 	ifa->scope = scope;
609 	ifa->prefix_len = pfxlen;
610 	ifa->flags = flags | IFA_F_TENTATIVE;
611 	ifa->cstamp = ifa->tstamp = jiffies;
612 
613 	ifa->rt = rt;
614 
615 	/*
616 	 * part one of RFC 4429, section 3.3
617 	 * We should not configure an address as
618 	 * optimistic if we do not yet know the link
619 	 * layer address of our nexhop router
620 	 */
621 
622 	if (rt->rt6i_nexthop == NULL)
623 		ifa->flags &= ~IFA_F_OPTIMISTIC;
624 
625 	ifa->idev = idev;
626 	in6_dev_hold(idev);
627 	/* For caller */
628 	in6_ifa_hold(ifa);
629 
630 	/* Add to big hash table */
631 	hash = ipv6_addr_hash(addr);
632 
633 	ifa->lst_next = inet6_addr_lst[hash];
634 	inet6_addr_lst[hash] = ifa;
635 	in6_ifa_hold(ifa);
636 	write_unlock(&addrconf_hash_lock);
637 
638 	write_lock(&idev->lock);
639 	/* Add to inet6_dev unicast addr list. */
640 	ipv6_link_dev_addr(idev, ifa);
641 
642 #ifdef CONFIG_IPV6_PRIVACY
643 	if (ifa->flags&IFA_F_TEMPORARY) {
644 		ifa->tmp_next = idev->tempaddr_list;
645 		idev->tempaddr_list = ifa;
646 		in6_ifa_hold(ifa);
647 	}
648 #endif
649 
650 	in6_ifa_hold(ifa);
651 	write_unlock(&idev->lock);
652 out2:
653 	rcu_read_unlock_bh();
654 
655 	if (likely(err == 0))
656 		atomic_notifier_call_chain(&inet6addr_chain, NETDEV_UP, ifa);
657 	else {
658 		kfree(ifa);
659 		ifa = ERR_PTR(err);
660 	}
661 
662 	return ifa;
663 out:
664 	write_unlock(&addrconf_hash_lock);
665 	goto out2;
666 }
667 
668 /* This function wants to get referenced ifp and releases it before return */
669 
670 static void ipv6_del_addr(struct inet6_ifaddr *ifp)
671 {
672 	struct inet6_ifaddr *ifa, **ifap;
673 	struct inet6_dev *idev = ifp->idev;
674 	int hash;
675 	int deleted = 0, onlink = 0;
676 	unsigned long expires = jiffies;
677 
678 	hash = ipv6_addr_hash(&ifp->addr);
679 
680 	ifp->dead = 1;
681 
682 	write_lock_bh(&addrconf_hash_lock);
683 	for (ifap = &inet6_addr_lst[hash]; (ifa=*ifap) != NULL;
684 	     ifap = &ifa->lst_next) {
685 		if (ifa == ifp) {
686 			*ifap = ifa->lst_next;
687 			__in6_ifa_put(ifp);
688 			ifa->lst_next = NULL;
689 			break;
690 		}
691 	}
692 	write_unlock_bh(&addrconf_hash_lock);
693 
694 	write_lock_bh(&idev->lock);
695 #ifdef CONFIG_IPV6_PRIVACY
696 	if (ifp->flags&IFA_F_TEMPORARY) {
697 		for (ifap = &idev->tempaddr_list; (ifa=*ifap) != NULL;
698 		     ifap = &ifa->tmp_next) {
699 			if (ifa == ifp) {
700 				*ifap = ifa->tmp_next;
701 				if (ifp->ifpub) {
702 					in6_ifa_put(ifp->ifpub);
703 					ifp->ifpub = NULL;
704 				}
705 				__in6_ifa_put(ifp);
706 				ifa->tmp_next = NULL;
707 				break;
708 			}
709 		}
710 	}
711 #endif
712 
713 	for (ifap = &idev->addr_list; (ifa=*ifap) != NULL;) {
714 		if (ifa == ifp) {
715 			*ifap = ifa->if_next;
716 			__in6_ifa_put(ifp);
717 			ifa->if_next = NULL;
718 			if (!(ifp->flags & IFA_F_PERMANENT) || onlink > 0)
719 				break;
720 			deleted = 1;
721 			continue;
722 		} else if (ifp->flags & IFA_F_PERMANENT) {
723 			if (ipv6_prefix_equal(&ifa->addr, &ifp->addr,
724 					      ifp->prefix_len)) {
725 				if (ifa->flags & IFA_F_PERMANENT) {
726 					onlink = 1;
727 					if (deleted)
728 						break;
729 				} else {
730 					unsigned long lifetime;
731 
732 					if (!onlink)
733 						onlink = -1;
734 
735 					spin_lock(&ifa->lock);
736 					lifetime = min_t(unsigned long,
737 							 ifa->valid_lft, 0x7fffffffUL/HZ);
738 					if (time_before(expires,
739 							ifa->tstamp + lifetime * HZ))
740 						expires = ifa->tstamp + lifetime * HZ;
741 					spin_unlock(&ifa->lock);
742 				}
743 			}
744 		}
745 		ifap = &ifa->if_next;
746 	}
747 	write_unlock_bh(&idev->lock);
748 
749 	ipv6_ifa_notify(RTM_DELADDR, ifp);
750 
751 	atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifp);
752 
753 	addrconf_del_timer(ifp);
754 
755 	/*
756 	 * Purge or update corresponding prefix
757 	 *
758 	 * 1) we don't purge prefix here if address was not permanent.
759 	 *    prefix is managed by its own lifetime.
760 	 * 2) if there're no addresses, delete prefix.
761 	 * 3) if there're still other permanent address(es),
762 	 *    corresponding prefix is still permanent.
763 	 * 4) otherwise, update prefix lifetime to the
764 	 *    longest valid lifetime among the corresponding
765 	 *    addresses on the device.
766 	 *    Note: subsequent RA will update lifetime.
767 	 *
768 	 * --yoshfuji
769 	 */
770 	if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) {
771 		struct in6_addr prefix;
772 		struct rt6_info *rt;
773 		struct net *net = dev_net(ifp->idev->dev);
774 		ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
775 		rt = rt6_lookup(net, &prefix, NULL, ifp->idev->dev->ifindex, 1);
776 
777 		if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
778 			if (onlink == 0) {
779 				ip6_del_rt(rt);
780 				rt = NULL;
781 			} else if (!(rt->rt6i_flags & RTF_EXPIRES)) {
782 				rt->rt6i_expires = expires;
783 				rt->rt6i_flags |= RTF_EXPIRES;
784 			}
785 		}
786 		dst_release(&rt->u.dst);
787 	}
788 
789 	in6_ifa_put(ifp);
790 }
791 
792 #ifdef CONFIG_IPV6_PRIVACY
793 static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *ift)
794 {
795 	struct inet6_dev *idev = ifp->idev;
796 	struct in6_addr addr, *tmpaddr;
797 	unsigned long tmp_prefered_lft, tmp_valid_lft, tmp_cstamp, tmp_tstamp;
798 	unsigned long regen_advance;
799 	int tmp_plen;
800 	int ret = 0;
801 	int max_addresses;
802 	u32 addr_flags;
803 
804 	write_lock(&idev->lock);
805 	if (ift) {
806 		spin_lock_bh(&ift->lock);
807 		memcpy(&addr.s6_addr[8], &ift->addr.s6_addr[8], 8);
808 		spin_unlock_bh(&ift->lock);
809 		tmpaddr = &addr;
810 	} else {
811 		tmpaddr = NULL;
812 	}
813 retry:
814 	in6_dev_hold(idev);
815 	if (idev->cnf.use_tempaddr <= 0) {
816 		write_unlock(&idev->lock);
817 		printk(KERN_INFO
818 			"ipv6_create_tempaddr(): use_tempaddr is disabled.\n");
819 		in6_dev_put(idev);
820 		ret = -1;
821 		goto out;
822 	}
823 	spin_lock_bh(&ifp->lock);
824 	if (ifp->regen_count++ >= idev->cnf.regen_max_retry) {
825 		idev->cnf.use_tempaddr = -1;	/*XXX*/
826 		spin_unlock_bh(&ifp->lock);
827 		write_unlock(&idev->lock);
828 		printk(KERN_WARNING
829 			"ipv6_create_tempaddr(): regeneration time exceeded. disabled temporary address support.\n");
830 		in6_dev_put(idev);
831 		ret = -1;
832 		goto out;
833 	}
834 	in6_ifa_hold(ifp);
835 	memcpy(addr.s6_addr, ifp->addr.s6_addr, 8);
836 	if (__ipv6_try_regen_rndid(idev, tmpaddr) < 0) {
837 		spin_unlock_bh(&ifp->lock);
838 		write_unlock(&idev->lock);
839 		printk(KERN_WARNING
840 			"ipv6_create_tempaddr(): regeneration of randomized interface id failed.\n");
841 		in6_ifa_put(ifp);
842 		in6_dev_put(idev);
843 		ret = -1;
844 		goto out;
845 	}
846 	memcpy(&addr.s6_addr[8], idev->rndid, 8);
847 	tmp_valid_lft = min_t(__u32,
848 			      ifp->valid_lft,
849 			      idev->cnf.temp_valid_lft);
850 	tmp_prefered_lft = min_t(__u32,
851 				 ifp->prefered_lft,
852 				 idev->cnf.temp_prefered_lft - desync_factor / HZ);
853 	tmp_plen = ifp->prefix_len;
854 	max_addresses = idev->cnf.max_addresses;
855 	tmp_cstamp = ifp->cstamp;
856 	tmp_tstamp = ifp->tstamp;
857 	spin_unlock_bh(&ifp->lock);
858 
859 	regen_advance = idev->cnf.regen_max_retry *
860 	                idev->cnf.dad_transmits *
861 	                idev->nd_parms->retrans_time / HZ;
862 	write_unlock(&idev->lock);
863 
864 	/* A temporary address is created only if this calculated Preferred
865 	 * Lifetime is greater than REGEN_ADVANCE time units.  In particular,
866 	 * an implementation must not create a temporary address with a zero
867 	 * Preferred Lifetime.
868 	 */
869 	if (tmp_prefered_lft <= regen_advance) {
870 		in6_ifa_put(ifp);
871 		in6_dev_put(idev);
872 		ret = -1;
873 		goto out;
874 	}
875 
876 	addr_flags = IFA_F_TEMPORARY;
877 	/* set in addrconf_prefix_rcv() */
878 	if (ifp->flags & IFA_F_OPTIMISTIC)
879 		addr_flags |= IFA_F_OPTIMISTIC;
880 
881 	ift = !max_addresses ||
882 	      ipv6_count_addresses(idev) < max_addresses ?
883 		ipv6_add_addr(idev, &addr, tmp_plen,
884 			      ipv6_addr_type(&addr)&IPV6_ADDR_SCOPE_MASK,
885 			      addr_flags) : NULL;
886 	if (!ift || IS_ERR(ift)) {
887 		in6_ifa_put(ifp);
888 		in6_dev_put(idev);
889 		printk(KERN_INFO
890 			"ipv6_create_tempaddr(): retry temporary address regeneration.\n");
891 		tmpaddr = &addr;
892 		write_lock(&idev->lock);
893 		goto retry;
894 	}
895 
896 	spin_lock_bh(&ift->lock);
897 	ift->ifpub = ifp;
898 	ift->valid_lft = tmp_valid_lft;
899 	ift->prefered_lft = tmp_prefered_lft;
900 	ift->cstamp = tmp_cstamp;
901 	ift->tstamp = tmp_tstamp;
902 	spin_unlock_bh(&ift->lock);
903 
904 	addrconf_dad_start(ift, 0);
905 	in6_ifa_put(ift);
906 	in6_dev_put(idev);
907 out:
908 	return ret;
909 }
910 #endif
911 
912 /*
913  *	Choose an appropriate source address (RFC3484)
914  */
915 enum {
916 	IPV6_SADDR_RULE_INIT = 0,
917 	IPV6_SADDR_RULE_LOCAL,
918 	IPV6_SADDR_RULE_SCOPE,
919 	IPV6_SADDR_RULE_PREFERRED,
920 #ifdef CONFIG_IPV6_MIP6
921 	IPV6_SADDR_RULE_HOA,
922 #endif
923 	IPV6_SADDR_RULE_OIF,
924 	IPV6_SADDR_RULE_LABEL,
925 #ifdef CONFIG_IPV6_PRIVACY
926 	IPV6_SADDR_RULE_PRIVACY,
927 #endif
928 	IPV6_SADDR_RULE_ORCHID,
929 	IPV6_SADDR_RULE_PREFIX,
930 	IPV6_SADDR_RULE_MAX
931 };
932 
933 struct ipv6_saddr_score {
934 	int			rule;
935 	int			addr_type;
936 	struct inet6_ifaddr	*ifa;
937 	DECLARE_BITMAP(scorebits, IPV6_SADDR_RULE_MAX);
938 	int			scopedist;
939 	int			matchlen;
940 };
941 
942 struct ipv6_saddr_dst {
943 	const struct in6_addr *addr;
944 	int ifindex;
945 	int scope;
946 	int label;
947 	unsigned int prefs;
948 };
949 
950 static inline int ipv6_saddr_preferred(int type)
951 {
952 	if (type & (IPV6_ADDR_MAPPED|IPV6_ADDR_COMPATv4|
953 		    IPV6_ADDR_LOOPBACK|IPV6_ADDR_RESERVED))
954 		return 1;
955 	return 0;
956 }
957 
958 static int ipv6_get_saddr_eval(struct ipv6_saddr_score *score,
959 			       struct ipv6_saddr_dst *dst,
960 			       int i)
961 {
962 	int ret;
963 
964 	if (i <= score->rule) {
965 		switch (i) {
966 		case IPV6_SADDR_RULE_SCOPE:
967 			ret = score->scopedist;
968 			break;
969 		case IPV6_SADDR_RULE_PREFIX:
970 			ret = score->matchlen;
971 			break;
972 		default:
973 			ret = !!test_bit(i, score->scorebits);
974 		}
975 		goto out;
976 	}
977 
978 	switch (i) {
979 	case IPV6_SADDR_RULE_INIT:
980 		/* Rule 0: remember if hiscore is not ready yet */
981 		ret = !!score->ifa;
982 		break;
983 	case IPV6_SADDR_RULE_LOCAL:
984 		/* Rule 1: Prefer same address */
985 		ret = ipv6_addr_equal(&score->ifa->addr, dst->addr);
986 		break;
987 	case IPV6_SADDR_RULE_SCOPE:
988 		/* Rule 2: Prefer appropriate scope
989 		 *
990 		 *      ret
991 		 *       ^
992 		 *    -1 |  d 15
993 		 *    ---+--+-+---> scope
994 		 *       |
995 		 *       |             d is scope of the destination.
996 		 *  B-d  |  \
997 		 *       |   \      <- smaller scope is better if
998 		 *  B-15 |    \        if scope is enough for destinaion.
999 		 *       |             ret = B - scope (-1 <= scope >= d <= 15).
1000 		 * d-C-1 | /
1001 		 *       |/         <- greater is better
1002 		 *   -C  /             if scope is not enough for destination.
1003 		 *      /|             ret = scope - C (-1 <= d < scope <= 15).
1004 		 *
1005 		 * d - C - 1 < B -15 (for all -1 <= d <= 15).
1006 		 * C > d + 14 - B >= 15 + 14 - B = 29 - B.
1007 		 * Assume B = 0 and we get C > 29.
1008 		 */
1009 		ret = __ipv6_addr_src_scope(score->addr_type);
1010 		if (ret >= dst->scope)
1011 			ret = -ret;
1012 		else
1013 			ret -= 128;	/* 30 is enough */
1014 		score->scopedist = ret;
1015 		break;
1016 	case IPV6_SADDR_RULE_PREFERRED:
1017 		/* Rule 3: Avoid deprecated and optimistic addresses */
1018 		ret = ipv6_saddr_preferred(score->addr_type) ||
1019 		      !(score->ifa->flags & (IFA_F_DEPRECATED|IFA_F_OPTIMISTIC));
1020 		break;
1021 #ifdef CONFIG_IPV6_MIP6
1022 	case IPV6_SADDR_RULE_HOA:
1023 	    {
1024 		/* Rule 4: Prefer home address */
1025 		int prefhome = !(dst->prefs & IPV6_PREFER_SRC_COA);
1026 		ret = !(score->ifa->flags & IFA_F_HOMEADDRESS) ^ prefhome;
1027 		break;
1028 	    }
1029 #endif
1030 	case IPV6_SADDR_RULE_OIF:
1031 		/* Rule 5: Prefer outgoing interface */
1032 		ret = (!dst->ifindex ||
1033 		       dst->ifindex == score->ifa->idev->dev->ifindex);
1034 		break;
1035 	case IPV6_SADDR_RULE_LABEL:
1036 		/* Rule 6: Prefer matching label */
1037 		ret = ipv6_addr_label(&score->ifa->addr, score->addr_type,
1038 				      score->ifa->idev->dev->ifindex) == dst->label;
1039 		break;
1040 #ifdef CONFIG_IPV6_PRIVACY
1041 	case IPV6_SADDR_RULE_PRIVACY:
1042 	    {
1043 		/* Rule 7: Prefer public address
1044 		 * Note: prefer temprary address if use_tempaddr >= 2
1045 		 */
1046 		int preftmp = dst->prefs & (IPV6_PREFER_SRC_PUBLIC|IPV6_PREFER_SRC_TMP) ?
1047 				!!(dst->prefs & IPV6_PREFER_SRC_TMP) :
1048 				score->ifa->idev->cnf.use_tempaddr >= 2;
1049 		ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
1050 		break;
1051 	    }
1052 #endif
1053 	case IPV6_SADDR_RULE_ORCHID:
1054 		/* Rule 8-: Prefer ORCHID vs ORCHID or
1055 		 *	    non-ORCHID vs non-ORCHID
1056 		 */
1057 		ret = !(ipv6_addr_orchid(&score->ifa->addr) ^
1058 			ipv6_addr_orchid(dst->addr));
1059 		break;
1060 	case IPV6_SADDR_RULE_PREFIX:
1061 		/* Rule 8: Use longest matching prefix */
1062 		score->matchlen = ret = ipv6_addr_diff(&score->ifa->addr,
1063 						       dst->addr);
1064 		break;
1065 	default:
1066 		ret = 0;
1067 	}
1068 
1069 	if (ret)
1070 		__set_bit(i, score->scorebits);
1071 	score->rule = i;
1072 out:
1073 	return ret;
1074 }
1075 
1076 int ipv6_dev_get_saddr(struct net_device *dst_dev,
1077 		       const struct in6_addr *daddr, unsigned int prefs,
1078 		       struct in6_addr *saddr)
1079 {
1080 	struct ipv6_saddr_score scores[2],
1081 				*score = &scores[0], *hiscore = &scores[1];
1082 	struct net *net = dev_net(dst_dev);
1083 	struct ipv6_saddr_dst dst;
1084 	struct net_device *dev;
1085 	int dst_type;
1086 
1087 	dst_type = __ipv6_addr_type(daddr);
1088 	dst.addr = daddr;
1089 	dst.ifindex = dst_dev ? dst_dev->ifindex : 0;
1090 	dst.scope = __ipv6_addr_src_scope(dst_type);
1091 	dst.label = ipv6_addr_label(daddr, dst_type, dst.ifindex);
1092 	dst.prefs = prefs;
1093 
1094 	hiscore->rule = -1;
1095 	hiscore->ifa = NULL;
1096 
1097 	read_lock(&dev_base_lock);
1098 	rcu_read_lock();
1099 
1100 	for_each_netdev(net, dev) {
1101 		struct inet6_dev *idev;
1102 
1103 		/* Candidate Source Address (section 4)
1104 		 *  - multicast and link-local destination address,
1105 		 *    the set of candidate source address MUST only
1106 		 *    include addresses assigned to interfaces
1107 		 *    belonging to the same link as the outgoing
1108 		 *    interface.
1109 		 * (- For site-local destination addresses, the
1110 		 *    set of candidate source addresses MUST only
1111 		 *    include addresses assigned to interfaces
1112 		 *    belonging to the same site as the outgoing
1113 		 *    interface.)
1114 		 */
1115 		if (((dst_type & IPV6_ADDR_MULTICAST) ||
1116 		     dst.scope <= IPV6_ADDR_SCOPE_LINKLOCAL) &&
1117 		    dst.ifindex && dev->ifindex != dst.ifindex)
1118 			continue;
1119 
1120 		idev = __in6_dev_get(dev);
1121 		if (!idev)
1122 			continue;
1123 
1124 		read_lock_bh(&idev->lock);
1125 		for (score->ifa = idev->addr_list; score->ifa; score->ifa = score->ifa->if_next) {
1126 			int i;
1127 
1128 			/*
1129 			 * - Tentative Address (RFC2462 section 5.4)
1130 			 *  - A tentative address is not considered
1131 			 *    "assigned to an interface" in the traditional
1132 			 *    sense, unless it is also flagged as optimistic.
1133 			 * - Candidate Source Address (section 4)
1134 			 *  - In any case, anycast addresses, multicast
1135 			 *    addresses, and the unspecified address MUST
1136 			 *    NOT be included in a candidate set.
1137 			 */
1138 			if ((score->ifa->flags & IFA_F_TENTATIVE) &&
1139 			    (!(score->ifa->flags & IFA_F_OPTIMISTIC)))
1140 				continue;
1141 
1142 			score->addr_type = __ipv6_addr_type(&score->ifa->addr);
1143 
1144 			if (unlikely(score->addr_type == IPV6_ADDR_ANY ||
1145 				     score->addr_type & IPV6_ADDR_MULTICAST)) {
1146 				LIMIT_NETDEBUG(KERN_DEBUG
1147 					       "ADDRCONF: unspecified / multicast address "
1148 					       "assigned as unicast address on %s",
1149 					       dev->name);
1150 				continue;
1151 			}
1152 
1153 			score->rule = -1;
1154 			bitmap_zero(score->scorebits, IPV6_SADDR_RULE_MAX);
1155 
1156 			for (i = 0; i < IPV6_SADDR_RULE_MAX; i++) {
1157 				int minihiscore, miniscore;
1158 
1159 				minihiscore = ipv6_get_saddr_eval(hiscore, &dst, i);
1160 				miniscore = ipv6_get_saddr_eval(score, &dst, i);
1161 
1162 				if (minihiscore > miniscore) {
1163 					if (i == IPV6_SADDR_RULE_SCOPE &&
1164 					    score->scopedist > 0) {
1165 						/*
1166 						 * special case:
1167 						 * each remaining entry
1168 						 * has too small (not enough)
1169 						 * scope, because ifa entries
1170 						 * are sorted by their scope
1171 						 * values.
1172 						 */
1173 						goto try_nextdev;
1174 					}
1175 					break;
1176 				} else if (minihiscore < miniscore) {
1177 					struct ipv6_saddr_score *tmp;
1178 
1179 					if (hiscore->ifa)
1180 						in6_ifa_put(hiscore->ifa);
1181 
1182 					in6_ifa_hold(score->ifa);
1183 
1184 					tmp = hiscore;
1185 					hiscore = score;
1186 					score = tmp;
1187 
1188 					/* restore our iterator */
1189 					score->ifa = hiscore->ifa;
1190 
1191 					break;
1192 				}
1193 			}
1194 		}
1195 try_nextdev:
1196 		read_unlock_bh(&idev->lock);
1197 	}
1198 	rcu_read_unlock();
1199 	read_unlock(&dev_base_lock);
1200 
1201 	if (!hiscore->ifa)
1202 		return -EADDRNOTAVAIL;
1203 
1204 	ipv6_addr_copy(saddr, &hiscore->ifa->addr);
1205 	in6_ifa_put(hiscore->ifa);
1206 	return 0;
1207 }
1208 
1209 EXPORT_SYMBOL(ipv6_dev_get_saddr);
1210 
1211 int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
1212 		    unsigned char banned_flags)
1213 {
1214 	struct inet6_dev *idev;
1215 	int err = -EADDRNOTAVAIL;
1216 
1217 	rcu_read_lock();
1218 	if ((idev = __in6_dev_get(dev)) != NULL) {
1219 		struct inet6_ifaddr *ifp;
1220 
1221 		read_lock_bh(&idev->lock);
1222 		for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) {
1223 			if (ifp->scope == IFA_LINK && !(ifp->flags & banned_flags)) {
1224 				ipv6_addr_copy(addr, &ifp->addr);
1225 				err = 0;
1226 				break;
1227 			}
1228 		}
1229 		read_unlock_bh(&idev->lock);
1230 	}
1231 	rcu_read_unlock();
1232 	return err;
1233 }
1234 
1235 static int ipv6_count_addresses(struct inet6_dev *idev)
1236 {
1237 	int cnt = 0;
1238 	struct inet6_ifaddr *ifp;
1239 
1240 	read_lock_bh(&idev->lock);
1241 	for (ifp=idev->addr_list; ifp; ifp=ifp->if_next)
1242 		cnt++;
1243 	read_unlock_bh(&idev->lock);
1244 	return cnt;
1245 }
1246 
1247 int ipv6_chk_addr(struct net *net, struct in6_addr *addr,
1248 		  struct net_device *dev, int strict)
1249 {
1250 	struct inet6_ifaddr * ifp;
1251 	u8 hash = ipv6_addr_hash(addr);
1252 
1253 	read_lock_bh(&addrconf_hash_lock);
1254 	for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
1255 		if (!net_eq(dev_net(ifp->idev->dev), net))
1256 			continue;
1257 		if (ipv6_addr_equal(&ifp->addr, addr) &&
1258 		    !(ifp->flags&IFA_F_TENTATIVE)) {
1259 			if (dev == NULL || ifp->idev->dev == dev ||
1260 			    !(ifp->scope&(IFA_LINK|IFA_HOST) || strict))
1261 				break;
1262 		}
1263 	}
1264 	read_unlock_bh(&addrconf_hash_lock);
1265 	return ifp != NULL;
1266 }
1267 EXPORT_SYMBOL(ipv6_chk_addr);
1268 
1269 static
1270 int ipv6_chk_same_addr(struct net *net, const struct in6_addr *addr,
1271 		       struct net_device *dev)
1272 {
1273 	struct inet6_ifaddr * ifp;
1274 	u8 hash = ipv6_addr_hash(addr);
1275 
1276 	for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
1277 		if (!net_eq(dev_net(ifp->idev->dev), net))
1278 			continue;
1279 		if (ipv6_addr_equal(&ifp->addr, addr)) {
1280 			if (dev == NULL || ifp->idev->dev == dev)
1281 				break;
1282 		}
1283 	}
1284 	return ifp != NULL;
1285 }
1286 
1287 int ipv6_chk_prefix(struct in6_addr *addr, struct net_device *dev)
1288 {
1289 	struct inet6_dev *idev;
1290 	struct inet6_ifaddr *ifa;
1291 	int	onlink;
1292 
1293 	onlink = 0;
1294 	rcu_read_lock();
1295 	idev = __in6_dev_get(dev);
1296 	if (idev) {
1297 		read_lock_bh(&idev->lock);
1298 		for (ifa = idev->addr_list; ifa; ifa = ifa->if_next) {
1299 			onlink = ipv6_prefix_equal(addr, &ifa->addr,
1300 						   ifa->prefix_len);
1301 			if (onlink)
1302 				break;
1303 		}
1304 		read_unlock_bh(&idev->lock);
1305 	}
1306 	rcu_read_unlock();
1307 	return onlink;
1308 }
1309 
1310 EXPORT_SYMBOL(ipv6_chk_prefix);
1311 
1312 struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
1313 				     struct net_device *dev, int strict)
1314 {
1315 	struct inet6_ifaddr * ifp;
1316 	u8 hash = ipv6_addr_hash(addr);
1317 
1318 	read_lock_bh(&addrconf_hash_lock);
1319 	for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
1320 		if (!net_eq(dev_net(ifp->idev->dev), net))
1321 			continue;
1322 		if (ipv6_addr_equal(&ifp->addr, addr)) {
1323 			if (dev == NULL || ifp->idev->dev == dev ||
1324 			    !(ifp->scope&(IFA_LINK|IFA_HOST) || strict)) {
1325 				in6_ifa_hold(ifp);
1326 				break;
1327 			}
1328 		}
1329 	}
1330 	read_unlock_bh(&addrconf_hash_lock);
1331 
1332 	return ifp;
1333 }
1334 
1335 int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
1336 {
1337 	const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
1338 	const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
1339 	__be32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr;
1340 	__be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
1341 	int sk_ipv6only = ipv6_only_sock(sk);
1342 	int sk2_ipv6only = inet_v6_ipv6only(sk2);
1343 	int addr_type = ipv6_addr_type(sk_rcv_saddr6);
1344 	int addr_type2 = sk2_rcv_saddr6 ? ipv6_addr_type(sk2_rcv_saddr6) : IPV6_ADDR_MAPPED;
1345 
1346 	if (!sk2_rcv_saddr && !sk_ipv6only)
1347 		return 1;
1348 
1349 	if (addr_type2 == IPV6_ADDR_ANY &&
1350 	    !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
1351 		return 1;
1352 
1353 	if (addr_type == IPV6_ADDR_ANY &&
1354 	    !(sk_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
1355 		return 1;
1356 
1357 	if (sk2_rcv_saddr6 &&
1358 	    ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
1359 		return 1;
1360 
1361 	if (addr_type == IPV6_ADDR_MAPPED &&
1362 	    !sk2_ipv6only &&
1363 	    (!sk2_rcv_saddr || !sk_rcv_saddr || sk_rcv_saddr == sk2_rcv_saddr))
1364 		return 1;
1365 
1366 	return 0;
1367 }
1368 
1369 /* Gets referenced address, destroys ifaddr */
1370 
1371 static void addrconf_dad_stop(struct inet6_ifaddr *ifp)
1372 {
1373 	if (ifp->flags&IFA_F_PERMANENT) {
1374 		spin_lock_bh(&ifp->lock);
1375 		addrconf_del_timer(ifp);
1376 		ifp->flags |= IFA_F_TENTATIVE;
1377 		spin_unlock_bh(&ifp->lock);
1378 		in6_ifa_put(ifp);
1379 #ifdef CONFIG_IPV6_PRIVACY
1380 	} else if (ifp->flags&IFA_F_TEMPORARY) {
1381 		struct inet6_ifaddr *ifpub;
1382 		spin_lock_bh(&ifp->lock);
1383 		ifpub = ifp->ifpub;
1384 		if (ifpub) {
1385 			in6_ifa_hold(ifpub);
1386 			spin_unlock_bh(&ifp->lock);
1387 			ipv6_create_tempaddr(ifpub, ifp);
1388 			in6_ifa_put(ifpub);
1389 		} else {
1390 			spin_unlock_bh(&ifp->lock);
1391 		}
1392 		ipv6_del_addr(ifp);
1393 #endif
1394 	} else
1395 		ipv6_del_addr(ifp);
1396 }
1397 
1398 void addrconf_dad_failure(struct inet6_ifaddr *ifp)
1399 {
1400 	if (net_ratelimit())
1401 		printk(KERN_INFO "%s: duplicate address detected!\n", ifp->idev->dev->name);
1402 	addrconf_dad_stop(ifp);
1403 }
1404 
1405 /* Join to solicited addr multicast group. */
1406 
1407 void addrconf_join_solict(struct net_device *dev, struct in6_addr *addr)
1408 {
1409 	struct in6_addr maddr;
1410 
1411 	if (dev->flags&(IFF_LOOPBACK|IFF_NOARP))
1412 		return;
1413 
1414 	addrconf_addr_solict_mult(addr, &maddr);
1415 	ipv6_dev_mc_inc(dev, &maddr);
1416 }
1417 
1418 void addrconf_leave_solict(struct inet6_dev *idev, struct in6_addr *addr)
1419 {
1420 	struct in6_addr maddr;
1421 
1422 	if (idev->dev->flags&(IFF_LOOPBACK|IFF_NOARP))
1423 		return;
1424 
1425 	addrconf_addr_solict_mult(addr, &maddr);
1426 	__ipv6_dev_mc_dec(idev, &maddr);
1427 }
1428 
1429 static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
1430 {
1431 	struct in6_addr addr;
1432 	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
1433 	if (ipv6_addr_any(&addr))
1434 		return;
1435 	ipv6_dev_ac_inc(ifp->idev->dev, &addr);
1436 }
1437 
1438 static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
1439 {
1440 	struct in6_addr addr;
1441 	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
1442 	if (ipv6_addr_any(&addr))
1443 		return;
1444 	__ipv6_dev_ac_dec(ifp->idev, &addr);
1445 }
1446 
1447 static int addrconf_ifid_eui48(u8 *eui, struct net_device *dev)
1448 {
1449 	if (dev->addr_len != ETH_ALEN)
1450 		return -1;
1451 	memcpy(eui, dev->dev_addr, 3);
1452 	memcpy(eui + 5, dev->dev_addr + 3, 3);
1453 
1454 	/*
1455 	 * The zSeries OSA network cards can be shared among various
1456 	 * OS instances, but the OSA cards have only one MAC address.
1457 	 * This leads to duplicate address conflicts in conjunction
1458 	 * with IPv6 if more than one instance uses the same card.
1459 	 *
1460 	 * The driver for these cards can deliver a unique 16-bit
1461 	 * identifier for each instance sharing the same card.  It is
1462 	 * placed instead of 0xFFFE in the interface identifier.  The
1463 	 * "u" bit of the interface identifier is not inverted in this
1464 	 * case.  Hence the resulting interface identifier has local
1465 	 * scope according to RFC2373.
1466 	 */
1467 	if (dev->dev_id) {
1468 		eui[3] = (dev->dev_id >> 8) & 0xFF;
1469 		eui[4] = dev->dev_id & 0xFF;
1470 	} else {
1471 		eui[3] = 0xFF;
1472 		eui[4] = 0xFE;
1473 		eui[0] ^= 2;
1474 	}
1475 	return 0;
1476 }
1477 
1478 static int addrconf_ifid_arcnet(u8 *eui, struct net_device *dev)
1479 {
1480 	/* XXX: inherit EUI-64 from other interface -- yoshfuji */
1481 	if (dev->addr_len != ARCNET_ALEN)
1482 		return -1;
1483 	memset(eui, 0, 7);
1484 	eui[7] = *(u8*)dev->dev_addr;
1485 	return 0;
1486 }
1487 
1488 static int addrconf_ifid_infiniband(u8 *eui, struct net_device *dev)
1489 {
1490 	if (dev->addr_len != INFINIBAND_ALEN)
1491 		return -1;
1492 	memcpy(eui, dev->dev_addr + 12, 8);
1493 	eui[0] |= 2;
1494 	return 0;
1495 }
1496 
1497 int __ipv6_isatap_ifid(u8 *eui, __be32 addr)
1498 {
1499 	eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
1500 		  ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
1501 		  ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
1502 		  ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
1503 		  ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
1504 		  ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
1505 	eui[1] = 0;
1506 	eui[2] = 0x5E;
1507 	eui[3] = 0xFE;
1508 	memcpy(eui + 4, &addr, 4);
1509 	return 0;
1510 }
1511 EXPORT_SYMBOL(__ipv6_isatap_ifid);
1512 
1513 static int addrconf_ifid_sit(u8 *eui, struct net_device *dev)
1514 {
1515 	if (dev->priv_flags & IFF_ISATAP)
1516 		return __ipv6_isatap_ifid(eui, *(__be32 *)dev->dev_addr);
1517 	return -1;
1518 }
1519 
1520 static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
1521 {
1522 	switch (dev->type) {
1523 	case ARPHRD_ETHER:
1524 	case ARPHRD_FDDI:
1525 	case ARPHRD_IEEE802_TR:
1526 		return addrconf_ifid_eui48(eui, dev);
1527 	case ARPHRD_ARCNET:
1528 		return addrconf_ifid_arcnet(eui, dev);
1529 	case ARPHRD_INFINIBAND:
1530 		return addrconf_ifid_infiniband(eui, dev);
1531 	case ARPHRD_SIT:
1532 		return addrconf_ifid_sit(eui, dev);
1533 	}
1534 	return -1;
1535 }
1536 
1537 static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)
1538 {
1539 	int err = -1;
1540 	struct inet6_ifaddr *ifp;
1541 
1542 	read_lock_bh(&idev->lock);
1543 	for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) {
1544 		if (ifp->scope == IFA_LINK && !(ifp->flags&IFA_F_TENTATIVE)) {
1545 			memcpy(eui, ifp->addr.s6_addr+8, 8);
1546 			err = 0;
1547 			break;
1548 		}
1549 	}
1550 	read_unlock_bh(&idev->lock);
1551 	return err;
1552 }
1553 
1554 #ifdef CONFIG_IPV6_PRIVACY
1555 /* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */
1556 static int __ipv6_regen_rndid(struct inet6_dev *idev)
1557 {
1558 regen:
1559 	get_random_bytes(idev->rndid, sizeof(idev->rndid));
1560 	idev->rndid[0] &= ~0x02;
1561 
1562 	/*
1563 	 * <draft-ietf-ipngwg-temp-addresses-v2-00.txt>:
1564 	 * check if generated address is not inappropriate
1565 	 *
1566 	 *  - Reserved subnet anycast (RFC 2526)
1567 	 *	11111101 11....11 1xxxxxxx
1568 	 *  - ISATAP (RFC4214) 6.1
1569 	 *	00-00-5E-FE-xx-xx-xx-xx
1570 	 *  - value 0
1571 	 *  - XXX: already assigned to an address on the device
1572 	 */
1573 	if (idev->rndid[0] == 0xfd &&
1574 	    (idev->rndid[1]&idev->rndid[2]&idev->rndid[3]&idev->rndid[4]&idev->rndid[5]&idev->rndid[6]) == 0xff &&
1575 	    (idev->rndid[7]&0x80))
1576 		goto regen;
1577 	if ((idev->rndid[0]|idev->rndid[1]) == 0) {
1578 		if (idev->rndid[2] == 0x5e && idev->rndid[3] == 0xfe)
1579 			goto regen;
1580 		if ((idev->rndid[2]|idev->rndid[3]|idev->rndid[4]|idev->rndid[5]|idev->rndid[6]|idev->rndid[7]) == 0x00)
1581 			goto regen;
1582 	}
1583 
1584 	return 0;
1585 }
1586 
1587 static void ipv6_regen_rndid(unsigned long data)
1588 {
1589 	struct inet6_dev *idev = (struct inet6_dev *) data;
1590 	unsigned long expires;
1591 
1592 	rcu_read_lock_bh();
1593 	write_lock_bh(&idev->lock);
1594 
1595 	if (idev->dead)
1596 		goto out;
1597 
1598 	if (__ipv6_regen_rndid(idev) < 0)
1599 		goto out;
1600 
1601 	expires = jiffies +
1602 		idev->cnf.temp_prefered_lft * HZ -
1603 		idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
1604 	if (time_before(expires, jiffies)) {
1605 		printk(KERN_WARNING
1606 			"ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
1607 			idev->dev->name);
1608 		goto out;
1609 	}
1610 
1611 	if (!mod_timer(&idev->regen_timer, expires))
1612 		in6_dev_hold(idev);
1613 
1614 out:
1615 	write_unlock_bh(&idev->lock);
1616 	rcu_read_unlock_bh();
1617 	in6_dev_put(idev);
1618 }
1619 
1620 static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr) {
1621 	int ret = 0;
1622 
1623 	if (tmpaddr && memcmp(idev->rndid, &tmpaddr->s6_addr[8], 8) == 0)
1624 		ret = __ipv6_regen_rndid(idev);
1625 	return ret;
1626 }
1627 #endif
1628 
1629 /*
1630  *	Add prefix route.
1631  */
1632 
1633 static void
1634 addrconf_prefix_route(struct in6_addr *pfx, int plen, struct net_device *dev,
1635 		      unsigned long expires, u32 flags)
1636 {
1637 	struct fib6_config cfg = {
1638 		.fc_table = RT6_TABLE_PREFIX,
1639 		.fc_metric = IP6_RT_PRIO_ADDRCONF,
1640 		.fc_ifindex = dev->ifindex,
1641 		.fc_expires = expires,
1642 		.fc_dst_len = plen,
1643 		.fc_flags = RTF_UP | flags,
1644 		.fc_nlinfo.nl_net = dev_net(dev),
1645 	};
1646 
1647 	ipv6_addr_copy(&cfg.fc_dst, pfx);
1648 
1649 	/* Prevent useless cloning on PtP SIT.
1650 	   This thing is done here expecting that the whole
1651 	   class of non-broadcast devices need not cloning.
1652 	 */
1653 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
1654 	if (dev->type == ARPHRD_SIT && (dev->flags & IFF_POINTOPOINT))
1655 		cfg.fc_flags |= RTF_NONEXTHOP;
1656 #endif
1657 
1658 	ip6_route_add(&cfg);
1659 }
1660 
1661 /* Create "default" multicast route to the interface */
1662 
1663 static void addrconf_add_mroute(struct net_device *dev)
1664 {
1665 	struct fib6_config cfg = {
1666 		.fc_table = RT6_TABLE_LOCAL,
1667 		.fc_metric = IP6_RT_PRIO_ADDRCONF,
1668 		.fc_ifindex = dev->ifindex,
1669 		.fc_dst_len = 8,
1670 		.fc_flags = RTF_UP,
1671 		.fc_nlinfo.nl_net = dev_net(dev),
1672 	};
1673 
1674 	ipv6_addr_set(&cfg.fc_dst, htonl(0xFF000000), 0, 0, 0);
1675 
1676 	ip6_route_add(&cfg);
1677 }
1678 
1679 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
1680 static void sit_route_add(struct net_device *dev)
1681 {
1682 	struct fib6_config cfg = {
1683 		.fc_table = RT6_TABLE_MAIN,
1684 		.fc_metric = IP6_RT_PRIO_ADDRCONF,
1685 		.fc_ifindex = dev->ifindex,
1686 		.fc_dst_len = 96,
1687 		.fc_flags = RTF_UP | RTF_NONEXTHOP,
1688 		.fc_nlinfo.nl_net = dev_net(dev),
1689 	};
1690 
1691 	/* prefix length - 96 bits "::d.d.d.d" */
1692 	ip6_route_add(&cfg);
1693 }
1694 #endif
1695 
1696 static void addrconf_add_lroute(struct net_device *dev)
1697 {
1698 	struct in6_addr addr;
1699 
1700 	ipv6_addr_set(&addr,  htonl(0xFE800000), 0, 0, 0);
1701 	addrconf_prefix_route(&addr, 64, dev, 0, 0);
1702 }
1703 
1704 static struct inet6_dev *addrconf_add_dev(struct net_device *dev)
1705 {
1706 	struct inet6_dev *idev;
1707 
1708 	ASSERT_RTNL();
1709 
1710 	if ((idev = ipv6_find_idev(dev)) == NULL)
1711 		return NULL;
1712 
1713 	/* Add default multicast route */
1714 	addrconf_add_mroute(dev);
1715 
1716 	/* Add link local route */
1717 	addrconf_add_lroute(dev);
1718 	return idev;
1719 }
1720 
1721 void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
1722 {
1723 	struct prefix_info *pinfo;
1724 	__u32 valid_lft;
1725 	__u32 prefered_lft;
1726 	int addr_type;
1727 	unsigned long rt_expires;
1728 	struct inet6_dev *in6_dev;
1729 
1730 	pinfo = (struct prefix_info *) opt;
1731 
1732 	if (len < sizeof(struct prefix_info)) {
1733 		ADBG(("addrconf: prefix option too short\n"));
1734 		return;
1735 	}
1736 
1737 	/*
1738 	 *	Validation checks ([ADDRCONF], page 19)
1739 	 */
1740 
1741 	addr_type = ipv6_addr_type(&pinfo->prefix);
1742 
1743 	if (addr_type & (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL))
1744 		return;
1745 
1746 	valid_lft = ntohl(pinfo->valid);
1747 	prefered_lft = ntohl(pinfo->prefered);
1748 
1749 	if (prefered_lft > valid_lft) {
1750 		if (net_ratelimit())
1751 			printk(KERN_WARNING "addrconf: prefix option has invalid lifetime\n");
1752 		return;
1753 	}
1754 
1755 	in6_dev = in6_dev_get(dev);
1756 
1757 	if (in6_dev == NULL) {
1758 		if (net_ratelimit())
1759 			printk(KERN_DEBUG "addrconf: device %s not configured\n", dev->name);
1760 		return;
1761 	}
1762 
1763 	/*
1764 	 *	Two things going on here:
1765 	 *	1) Add routes for on-link prefixes
1766 	 *	2) Configure prefixes with the auto flag set
1767 	 */
1768 
1769 	/* Avoid arithmetic overflow. Really, we could
1770 	   save rt_expires in seconds, likely valid_lft,
1771 	   but it would require division in fib gc, that it
1772 	   not good.
1773 	 */
1774 	if (valid_lft >= 0x7FFFFFFF/HZ)
1775 		rt_expires = 0x7FFFFFFF - (0x7FFFFFFF % HZ);
1776 	else
1777 		rt_expires = valid_lft * HZ;
1778 
1779 	/*
1780 	 * We convert this (in jiffies) to clock_t later.
1781 	 * Avoid arithmetic overflow there as well.
1782 	 * Overflow can happen only if HZ < USER_HZ.
1783 	 */
1784 	if (HZ < USER_HZ && rt_expires > 0x7FFFFFFF / USER_HZ)
1785 		rt_expires = 0x7FFFFFFF / USER_HZ;
1786 
1787 	if (pinfo->onlink) {
1788 		struct rt6_info *rt;
1789 		rt = rt6_lookup(dev_net(dev), &pinfo->prefix, NULL,
1790 				dev->ifindex, 1);
1791 
1792 		if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
1793 			if (rt->rt6i_flags&RTF_EXPIRES) {
1794 				if (valid_lft == 0) {
1795 					ip6_del_rt(rt);
1796 					rt = NULL;
1797 				} else {
1798 					rt->rt6i_expires = jiffies + rt_expires;
1799 				}
1800 			}
1801 		} else if (valid_lft) {
1802 			addrconf_prefix_route(&pinfo->prefix, pinfo->prefix_len,
1803 					      dev, jiffies_to_clock_t(rt_expires), RTF_ADDRCONF|RTF_EXPIRES|RTF_PREFIX_RT);
1804 		}
1805 		if (rt)
1806 			dst_release(&rt->u.dst);
1807 	}
1808 
1809 	/* Try to figure out our local address for this prefix */
1810 
1811 	if (pinfo->autoconf && in6_dev->cnf.autoconf) {
1812 		struct inet6_ifaddr * ifp;
1813 		struct in6_addr addr;
1814 		int create = 0, update_lft = 0;
1815 
1816 		if (pinfo->prefix_len == 64) {
1817 			memcpy(&addr, &pinfo->prefix, 8);
1818 			if (ipv6_generate_eui64(addr.s6_addr + 8, dev) &&
1819 			    ipv6_inherit_eui64(addr.s6_addr + 8, in6_dev)) {
1820 				in6_dev_put(in6_dev);
1821 				return;
1822 			}
1823 			goto ok;
1824 		}
1825 		if (net_ratelimit())
1826 			printk(KERN_DEBUG "IPv6 addrconf: prefix with wrong length %d\n",
1827 			       pinfo->prefix_len);
1828 		in6_dev_put(in6_dev);
1829 		return;
1830 
1831 ok:
1832 
1833 		ifp = ipv6_get_ifaddr(dev_net(dev), &addr, dev, 1);
1834 
1835 		if (ifp == NULL && valid_lft) {
1836 			int max_addresses = in6_dev->cnf.max_addresses;
1837 			u32 addr_flags = 0;
1838 
1839 #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
1840 			if (in6_dev->cnf.optimistic_dad &&
1841 			    !ipv6_devconf.forwarding)
1842 				addr_flags = IFA_F_OPTIMISTIC;
1843 #endif
1844 
1845 			/* Do not allow to create too much of autoconfigured
1846 			 * addresses; this would be too easy way to crash kernel.
1847 			 */
1848 			if (!max_addresses ||
1849 			    ipv6_count_addresses(in6_dev) < max_addresses)
1850 				ifp = ipv6_add_addr(in6_dev, &addr, pinfo->prefix_len,
1851 						    addr_type&IPV6_ADDR_SCOPE_MASK,
1852 						    addr_flags);
1853 
1854 			if (!ifp || IS_ERR(ifp)) {
1855 				in6_dev_put(in6_dev);
1856 				return;
1857 			}
1858 
1859 			update_lft = create = 1;
1860 			ifp->cstamp = jiffies;
1861 			addrconf_dad_start(ifp, RTF_ADDRCONF|RTF_PREFIX_RT);
1862 		}
1863 
1864 		if (ifp) {
1865 			int flags;
1866 			unsigned long now;
1867 #ifdef CONFIG_IPV6_PRIVACY
1868 			struct inet6_ifaddr *ift;
1869 #endif
1870 			u32 stored_lft;
1871 
1872 			/* update lifetime (RFC2462 5.5.3 e) */
1873 			spin_lock(&ifp->lock);
1874 			now = jiffies;
1875 			if (ifp->valid_lft > (now - ifp->tstamp) / HZ)
1876 				stored_lft = ifp->valid_lft - (now - ifp->tstamp) / HZ;
1877 			else
1878 				stored_lft = 0;
1879 			if (!update_lft && stored_lft) {
1880 				if (valid_lft > MIN_VALID_LIFETIME ||
1881 				    valid_lft > stored_lft)
1882 					update_lft = 1;
1883 				else if (stored_lft <= MIN_VALID_LIFETIME) {
1884 					/* valid_lft <= stored_lft is always true */
1885 					/* XXX: IPsec */
1886 					update_lft = 0;
1887 				} else {
1888 					valid_lft = MIN_VALID_LIFETIME;
1889 					if (valid_lft < prefered_lft)
1890 						prefered_lft = valid_lft;
1891 					update_lft = 1;
1892 				}
1893 			}
1894 
1895 			if (update_lft) {
1896 				ifp->valid_lft = valid_lft;
1897 				ifp->prefered_lft = prefered_lft;
1898 				ifp->tstamp = now;
1899 				flags = ifp->flags;
1900 				ifp->flags &= ~IFA_F_DEPRECATED;
1901 				spin_unlock(&ifp->lock);
1902 
1903 				if (!(flags&IFA_F_TENTATIVE))
1904 					ipv6_ifa_notify(0, ifp);
1905 			} else
1906 				spin_unlock(&ifp->lock);
1907 
1908 #ifdef CONFIG_IPV6_PRIVACY
1909 			read_lock_bh(&in6_dev->lock);
1910 			/* update all temporary addresses in the list */
1911 			for (ift=in6_dev->tempaddr_list; ift; ift=ift->tmp_next) {
1912 				/*
1913 				 * When adjusting the lifetimes of an existing
1914 				 * temporary address, only lower the lifetimes.
1915 				 * Implementations must not increase the
1916 				 * lifetimes of an existing temporary address
1917 				 * when processing a Prefix Information Option.
1918 				 */
1919 				if (ifp != ift->ifpub)
1920 					continue;
1921 
1922 				spin_lock(&ift->lock);
1923 				flags = ift->flags;
1924 				if (ift->valid_lft > valid_lft &&
1925 				    ift->valid_lft - valid_lft > (jiffies - ift->tstamp) / HZ)
1926 					ift->valid_lft = valid_lft + (jiffies - ift->tstamp) / HZ;
1927 				if (ift->prefered_lft > prefered_lft &&
1928 				    ift->prefered_lft - prefered_lft > (jiffies - ift->tstamp) / HZ)
1929 					ift->prefered_lft = prefered_lft + (jiffies - ift->tstamp) / HZ;
1930 				spin_unlock(&ift->lock);
1931 				if (!(flags&IFA_F_TENTATIVE))
1932 					ipv6_ifa_notify(0, ift);
1933 			}
1934 
1935 			if (create && in6_dev->cnf.use_tempaddr > 0) {
1936 				/*
1937 				 * When a new public address is created as described in [ADDRCONF],
1938 				 * also create a new temporary address.
1939 				 */
1940 				read_unlock_bh(&in6_dev->lock);
1941 				ipv6_create_tempaddr(ifp, NULL);
1942 			} else {
1943 				read_unlock_bh(&in6_dev->lock);
1944 			}
1945 #endif
1946 			in6_ifa_put(ifp);
1947 			addrconf_verify(0);
1948 		}
1949 	}
1950 	inet6_prefix_notify(RTM_NEWPREFIX, in6_dev, pinfo);
1951 	in6_dev_put(in6_dev);
1952 }
1953 
1954 /*
1955  *	Set destination address.
1956  *	Special case for SIT interfaces where we create a new "virtual"
1957  *	device.
1958  */
1959 int addrconf_set_dstaddr(struct net *net, void __user *arg)
1960 {
1961 	struct in6_ifreq ireq;
1962 	struct net_device *dev;
1963 	int err = -EINVAL;
1964 
1965 	rtnl_lock();
1966 
1967 	err = -EFAULT;
1968 	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
1969 		goto err_exit;
1970 
1971 	dev = __dev_get_by_index(net, ireq.ifr6_ifindex);
1972 
1973 	err = -ENODEV;
1974 	if (dev == NULL)
1975 		goto err_exit;
1976 
1977 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
1978 	if (dev->type == ARPHRD_SIT) {
1979 		struct ifreq ifr;
1980 		mm_segment_t	oldfs;
1981 		struct ip_tunnel_parm p;
1982 
1983 		err = -EADDRNOTAVAIL;
1984 		if (!(ipv6_addr_type(&ireq.ifr6_addr) & IPV6_ADDR_COMPATv4))
1985 			goto err_exit;
1986 
1987 		memset(&p, 0, sizeof(p));
1988 		p.iph.daddr = ireq.ifr6_addr.s6_addr32[3];
1989 		p.iph.saddr = 0;
1990 		p.iph.version = 4;
1991 		p.iph.ihl = 5;
1992 		p.iph.protocol = IPPROTO_IPV6;
1993 		p.iph.ttl = 64;
1994 		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
1995 
1996 		oldfs = get_fs(); set_fs(KERNEL_DS);
1997 		err = dev->do_ioctl(dev, &ifr, SIOCADDTUNNEL);
1998 		set_fs(oldfs);
1999 
2000 		if (err == 0) {
2001 			err = -ENOBUFS;
2002 			dev = __dev_get_by_name(net, p.name);
2003 			if (!dev)
2004 				goto err_exit;
2005 			err = dev_open(dev);
2006 		}
2007 	}
2008 #endif
2009 
2010 err_exit:
2011 	rtnl_unlock();
2012 	return err;
2013 }
2014 
2015 /*
2016  *	Manual configuration of address on an interface
2017  */
2018 static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx,
2019 			  int plen, __u8 ifa_flags, __u32 prefered_lft,
2020 			  __u32 valid_lft)
2021 {
2022 	struct inet6_ifaddr *ifp;
2023 	struct inet6_dev *idev;
2024 	struct net_device *dev;
2025 	int scope;
2026 	u32 flags = RTF_EXPIRES;
2027 
2028 	ASSERT_RTNL();
2029 
2030 	/* check the lifetime */
2031 	if (!valid_lft || prefered_lft > valid_lft)
2032 		return -EINVAL;
2033 
2034 	dev = __dev_get_by_index(net, ifindex);
2035 	if (!dev)
2036 		return -ENODEV;
2037 
2038 	if ((idev = addrconf_add_dev(dev)) == NULL)
2039 		return -ENOBUFS;
2040 
2041 	scope = ipv6_addr_scope(pfx);
2042 
2043 	if (valid_lft == INFINITY_LIFE_TIME) {
2044 		ifa_flags |= IFA_F_PERMANENT;
2045 		flags = 0;
2046 	} else if (valid_lft >= 0x7FFFFFFF/HZ)
2047 		valid_lft = 0x7FFFFFFF/HZ;
2048 
2049 	if (prefered_lft == 0)
2050 		ifa_flags |= IFA_F_DEPRECATED;
2051 	else if ((prefered_lft >= 0x7FFFFFFF/HZ) &&
2052 		 (prefered_lft != INFINITY_LIFE_TIME))
2053 		prefered_lft = 0x7FFFFFFF/HZ;
2054 
2055 	ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags);
2056 
2057 	if (!IS_ERR(ifp)) {
2058 		spin_lock_bh(&ifp->lock);
2059 		ifp->valid_lft = valid_lft;
2060 		ifp->prefered_lft = prefered_lft;
2061 		ifp->tstamp = jiffies;
2062 		spin_unlock_bh(&ifp->lock);
2063 
2064 		addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev,
2065 				      jiffies_to_clock_t(valid_lft * HZ), flags);
2066 		/*
2067 		 * Note that section 3.1 of RFC 4429 indicates
2068 		 * that the Optimistic flag should not be set for
2069 		 * manually configured addresses
2070 		 */
2071 		addrconf_dad_start(ifp, 0);
2072 		in6_ifa_put(ifp);
2073 		addrconf_verify(0);
2074 		return 0;
2075 	}
2076 
2077 	return PTR_ERR(ifp);
2078 }
2079 
2080 static int inet6_addr_del(struct net *net, int ifindex, struct in6_addr *pfx,
2081 			  int plen)
2082 {
2083 	struct inet6_ifaddr *ifp;
2084 	struct inet6_dev *idev;
2085 	struct net_device *dev;
2086 
2087 	dev = __dev_get_by_index(net, ifindex);
2088 	if (!dev)
2089 		return -ENODEV;
2090 
2091 	if ((idev = __in6_dev_get(dev)) == NULL)
2092 		return -ENXIO;
2093 
2094 	read_lock_bh(&idev->lock);
2095 	for (ifp = idev->addr_list; ifp; ifp=ifp->if_next) {
2096 		if (ifp->prefix_len == plen &&
2097 		    ipv6_addr_equal(pfx, &ifp->addr)) {
2098 			in6_ifa_hold(ifp);
2099 			read_unlock_bh(&idev->lock);
2100 
2101 			ipv6_del_addr(ifp);
2102 
2103 			/* If the last address is deleted administratively,
2104 			   disable IPv6 on this interface.
2105 			 */
2106 			if (idev->addr_list == NULL)
2107 				addrconf_ifdown(idev->dev, 1);
2108 			return 0;
2109 		}
2110 	}
2111 	read_unlock_bh(&idev->lock);
2112 	return -EADDRNOTAVAIL;
2113 }
2114 
2115 
2116 int addrconf_add_ifaddr(struct net *net, void __user *arg)
2117 {
2118 	struct in6_ifreq ireq;
2119 	int err;
2120 
2121 	if (!capable(CAP_NET_ADMIN))
2122 		return -EPERM;
2123 
2124 	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
2125 		return -EFAULT;
2126 
2127 	rtnl_lock();
2128 	err = inet6_addr_add(net, ireq.ifr6_ifindex, &ireq.ifr6_addr,
2129 			     ireq.ifr6_prefixlen, IFA_F_PERMANENT,
2130 			     INFINITY_LIFE_TIME, INFINITY_LIFE_TIME);
2131 	rtnl_unlock();
2132 	return err;
2133 }
2134 
2135 int addrconf_del_ifaddr(struct net *net, void __user *arg)
2136 {
2137 	struct in6_ifreq ireq;
2138 	int err;
2139 
2140 	if (!capable(CAP_NET_ADMIN))
2141 		return -EPERM;
2142 
2143 	if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
2144 		return -EFAULT;
2145 
2146 	rtnl_lock();
2147 	err = inet6_addr_del(net, ireq.ifr6_ifindex, &ireq.ifr6_addr,
2148 			     ireq.ifr6_prefixlen);
2149 	rtnl_unlock();
2150 	return err;
2151 }
2152 
2153 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
2154 static void sit_add_v4_addrs(struct inet6_dev *idev)
2155 {
2156 	struct inet6_ifaddr * ifp;
2157 	struct in6_addr addr;
2158 	struct net_device *dev;
2159 	struct net *net = dev_net(idev->dev);
2160 	int scope;
2161 
2162 	ASSERT_RTNL();
2163 
2164 	memset(&addr, 0, sizeof(struct in6_addr));
2165 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4);
2166 
2167 	if (idev->dev->flags&IFF_POINTOPOINT) {
2168 		addr.s6_addr32[0] = htonl(0xfe800000);
2169 		scope = IFA_LINK;
2170 	} else {
2171 		scope = IPV6_ADDR_COMPATv4;
2172 	}
2173 
2174 	if (addr.s6_addr32[3]) {
2175 		ifp = ipv6_add_addr(idev, &addr, 128, scope, IFA_F_PERMANENT);
2176 		if (!IS_ERR(ifp)) {
2177 			spin_lock_bh(&ifp->lock);
2178 			ifp->flags &= ~IFA_F_TENTATIVE;
2179 			spin_unlock_bh(&ifp->lock);
2180 			ipv6_ifa_notify(RTM_NEWADDR, ifp);
2181 			in6_ifa_put(ifp);
2182 		}
2183 		return;
2184 	}
2185 
2186 	for_each_netdev(net, dev) {
2187 		struct in_device * in_dev = __in_dev_get_rtnl(dev);
2188 		if (in_dev && (dev->flags & IFF_UP)) {
2189 			struct in_ifaddr * ifa;
2190 
2191 			int flag = scope;
2192 
2193 			for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
2194 				int plen;
2195 
2196 				addr.s6_addr32[3] = ifa->ifa_local;
2197 
2198 				if (ifa->ifa_scope == RT_SCOPE_LINK)
2199 					continue;
2200 				if (ifa->ifa_scope >= RT_SCOPE_HOST) {
2201 					if (idev->dev->flags&IFF_POINTOPOINT)
2202 						continue;
2203 					flag |= IFA_HOST;
2204 				}
2205 				if (idev->dev->flags&IFF_POINTOPOINT)
2206 					plen = 64;
2207 				else
2208 					plen = 96;
2209 
2210 				ifp = ipv6_add_addr(idev, &addr, plen, flag,
2211 						    IFA_F_PERMANENT);
2212 				if (!IS_ERR(ifp)) {
2213 					spin_lock_bh(&ifp->lock);
2214 					ifp->flags &= ~IFA_F_TENTATIVE;
2215 					spin_unlock_bh(&ifp->lock);
2216 					ipv6_ifa_notify(RTM_NEWADDR, ifp);
2217 					in6_ifa_put(ifp);
2218 				}
2219 			}
2220 		}
2221 	}
2222 }
2223 #endif
2224 
2225 static void init_loopback(struct net_device *dev)
2226 {
2227 	struct inet6_dev  *idev;
2228 	struct inet6_ifaddr * ifp;
2229 
2230 	/* ::1 */
2231 
2232 	ASSERT_RTNL();
2233 
2234 	if ((idev = ipv6_find_idev(dev)) == NULL) {
2235 		printk(KERN_DEBUG "init loopback: add_dev failed\n");
2236 		return;
2237 	}
2238 
2239 	ifp = ipv6_add_addr(idev, &in6addr_loopback, 128, IFA_HOST, IFA_F_PERMANENT);
2240 	if (!IS_ERR(ifp)) {
2241 		spin_lock_bh(&ifp->lock);
2242 		ifp->flags &= ~IFA_F_TENTATIVE;
2243 		spin_unlock_bh(&ifp->lock);
2244 		ipv6_ifa_notify(RTM_NEWADDR, ifp);
2245 		in6_ifa_put(ifp);
2246 	}
2247 }
2248 
2249 static void addrconf_add_linklocal(struct inet6_dev *idev, struct in6_addr *addr)
2250 {
2251 	struct inet6_ifaddr * ifp;
2252 	u32 addr_flags = IFA_F_PERMANENT;
2253 
2254 #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
2255 	if (idev->cnf.optimistic_dad &&
2256 	    !ipv6_devconf.forwarding)
2257 		addr_flags |= IFA_F_OPTIMISTIC;
2258 #endif
2259 
2260 
2261 	ifp = ipv6_add_addr(idev, addr, 64, IFA_LINK, addr_flags);
2262 	if (!IS_ERR(ifp)) {
2263 		addrconf_prefix_route(&ifp->addr, ifp->prefix_len, idev->dev, 0, 0);
2264 		addrconf_dad_start(ifp, 0);
2265 		in6_ifa_put(ifp);
2266 	}
2267 }
2268 
2269 static void addrconf_dev_config(struct net_device *dev)
2270 {
2271 	struct in6_addr addr;
2272 	struct inet6_dev    * idev;
2273 
2274 	ASSERT_RTNL();
2275 
2276 	if ((dev->type != ARPHRD_ETHER) &&
2277 	    (dev->type != ARPHRD_FDDI) &&
2278 	    (dev->type != ARPHRD_IEEE802_TR) &&
2279 	    (dev->type != ARPHRD_ARCNET) &&
2280 	    (dev->type != ARPHRD_INFINIBAND)) {
2281 		/* Alas, we support only Ethernet autoconfiguration. */
2282 		return;
2283 	}
2284 
2285 	idev = addrconf_add_dev(dev);
2286 	if (idev == NULL)
2287 		return;
2288 
2289 	memset(&addr, 0, sizeof(struct in6_addr));
2290 	addr.s6_addr32[0] = htonl(0xFE800000);
2291 
2292 	if (ipv6_generate_eui64(addr.s6_addr + 8, dev) == 0)
2293 		addrconf_add_linklocal(idev, &addr);
2294 }
2295 
2296 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
2297 static void addrconf_sit_config(struct net_device *dev)
2298 {
2299 	struct inet6_dev *idev;
2300 
2301 	ASSERT_RTNL();
2302 
2303 	/*
2304 	 * Configure the tunnel with one of our IPv4
2305 	 * addresses... we should configure all of
2306 	 * our v4 addrs in the tunnel
2307 	 */
2308 
2309 	if ((idev = ipv6_find_idev(dev)) == NULL) {
2310 		printk(KERN_DEBUG "init sit: add_dev failed\n");
2311 		return;
2312 	}
2313 
2314 	if (dev->priv_flags & IFF_ISATAP) {
2315 		struct in6_addr addr;
2316 
2317 		ipv6_addr_set(&addr,  htonl(0xFE800000), 0, 0, 0);
2318 		addrconf_prefix_route(&addr, 64, dev, 0, 0);
2319 		if (!ipv6_generate_eui64(addr.s6_addr + 8, dev))
2320 			addrconf_add_linklocal(idev, &addr);
2321 		return;
2322 	}
2323 
2324 	sit_add_v4_addrs(idev);
2325 
2326 	if (dev->flags&IFF_POINTOPOINT) {
2327 		addrconf_add_mroute(dev);
2328 		addrconf_add_lroute(dev);
2329 	} else
2330 		sit_route_add(dev);
2331 }
2332 #endif
2333 
2334 static inline int
2335 ipv6_inherit_linklocal(struct inet6_dev *idev, struct net_device *link_dev)
2336 {
2337 	struct in6_addr lladdr;
2338 
2339 	if (!ipv6_get_lladdr(link_dev, &lladdr, IFA_F_TENTATIVE)) {
2340 		addrconf_add_linklocal(idev, &lladdr);
2341 		return 0;
2342 	}
2343 	return -1;
2344 }
2345 
2346 static void ip6_tnl_add_linklocal(struct inet6_dev *idev)
2347 {
2348 	struct net_device *link_dev;
2349 	struct net *net = dev_net(idev->dev);
2350 
2351 	/* first try to inherit the link-local address from the link device */
2352 	if (idev->dev->iflink &&
2353 	    (link_dev = __dev_get_by_index(net, idev->dev->iflink))) {
2354 		if (!ipv6_inherit_linklocal(idev, link_dev))
2355 			return;
2356 	}
2357 	/* then try to inherit it from any device */
2358 	for_each_netdev(net, link_dev) {
2359 		if (!ipv6_inherit_linklocal(idev, link_dev))
2360 			return;
2361 	}
2362 	printk(KERN_DEBUG "init ip6-ip6: add_linklocal failed\n");
2363 }
2364 
2365 /*
2366  * Autoconfigure tunnel with a link-local address so routing protocols,
2367  * DHCPv6, MLD etc. can be run over the virtual link
2368  */
2369 
2370 static void addrconf_ip6_tnl_config(struct net_device *dev)
2371 {
2372 	struct inet6_dev *idev;
2373 
2374 	ASSERT_RTNL();
2375 
2376 	if ((idev = addrconf_add_dev(dev)) == NULL) {
2377 		printk(KERN_DEBUG "init ip6-ip6: add_dev failed\n");
2378 		return;
2379 	}
2380 	ip6_tnl_add_linklocal(idev);
2381 }
2382 
2383 static int addrconf_notify(struct notifier_block *this, unsigned long event,
2384 			   void * data)
2385 {
2386 	struct net_device *dev = (struct net_device *) data;
2387 	struct inet6_dev *idev = __in6_dev_get(dev);
2388 	int run_pending = 0;
2389 	int err;
2390 
2391 	switch(event) {
2392 	case NETDEV_REGISTER:
2393 		if (!idev && dev->mtu >= IPV6_MIN_MTU) {
2394 			idev = ipv6_add_dev(dev);
2395 			if (!idev)
2396 				return notifier_from_errno(-ENOMEM);
2397 		}
2398 		break;
2399 	case NETDEV_UP:
2400 	case NETDEV_CHANGE:
2401 		if (dev->flags & IFF_SLAVE)
2402 			break;
2403 
2404 		if (event == NETDEV_UP) {
2405 			if (!addrconf_qdisc_ok(dev)) {
2406 				/* device is not ready yet. */
2407 				printk(KERN_INFO
2408 					"ADDRCONF(NETDEV_UP): %s: "
2409 					"link is not ready\n",
2410 					dev->name);
2411 				break;
2412 			}
2413 
2414 			if (!idev && dev->mtu >= IPV6_MIN_MTU)
2415 				idev = ipv6_add_dev(dev);
2416 
2417 			if (idev)
2418 				idev->if_flags |= IF_READY;
2419 		} else {
2420 			if (!addrconf_qdisc_ok(dev)) {
2421 				/* device is still not ready. */
2422 				break;
2423 			}
2424 
2425 			if (idev) {
2426 				if (idev->if_flags & IF_READY) {
2427 					/* device is already configured. */
2428 					break;
2429 				}
2430 				idev->if_flags |= IF_READY;
2431 			}
2432 
2433 			printk(KERN_INFO
2434 					"ADDRCONF(NETDEV_CHANGE): %s: "
2435 					"link becomes ready\n",
2436 					dev->name);
2437 
2438 			run_pending = 1;
2439 		}
2440 
2441 		switch(dev->type) {
2442 #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
2443 		case ARPHRD_SIT:
2444 			addrconf_sit_config(dev);
2445 			break;
2446 #endif
2447 		case ARPHRD_TUNNEL6:
2448 			addrconf_ip6_tnl_config(dev);
2449 			break;
2450 		case ARPHRD_LOOPBACK:
2451 			init_loopback(dev);
2452 			break;
2453 
2454 		default:
2455 			addrconf_dev_config(dev);
2456 			break;
2457 		}
2458 		if (idev) {
2459 			if (run_pending)
2460 				addrconf_dad_run(idev);
2461 
2462 			/* If the MTU changed during the interface down, when the
2463 			   interface up, the changed MTU must be reflected in the
2464 			   idev as well as routers.
2465 			 */
2466 			if (idev->cnf.mtu6 != dev->mtu && dev->mtu >= IPV6_MIN_MTU) {
2467 				rt6_mtu_change(dev, dev->mtu);
2468 				idev->cnf.mtu6 = dev->mtu;
2469 			}
2470 			idev->tstamp = jiffies;
2471 			inet6_ifinfo_notify(RTM_NEWLINK, idev);
2472 			/* If the changed mtu during down is lower than IPV6_MIN_MTU
2473 			   stop IPv6 on this interface.
2474 			 */
2475 			if (dev->mtu < IPV6_MIN_MTU)
2476 				addrconf_ifdown(dev, event != NETDEV_DOWN);
2477 		}
2478 		break;
2479 
2480 	case NETDEV_CHANGEMTU:
2481 		if (idev && dev->mtu >= IPV6_MIN_MTU) {
2482 			rt6_mtu_change(dev, dev->mtu);
2483 			idev->cnf.mtu6 = dev->mtu;
2484 			break;
2485 		}
2486 
2487 		if (!idev && dev->mtu >= IPV6_MIN_MTU) {
2488 			idev = ipv6_add_dev(dev);
2489 			if (idev)
2490 				break;
2491 		}
2492 
2493 		/* MTU falled under IPV6_MIN_MTU. Stop IPv6 on this interface. */
2494 
2495 	case NETDEV_DOWN:
2496 	case NETDEV_UNREGISTER:
2497 		/*
2498 		 *	Remove all addresses from this interface.
2499 		 */
2500 		addrconf_ifdown(dev, event != NETDEV_DOWN);
2501 		break;
2502 
2503 	case NETDEV_CHANGENAME:
2504 		if (idev) {
2505 			snmp6_unregister_dev(idev);
2506 			addrconf_sysctl_unregister(idev);
2507 			addrconf_sysctl_register(idev);
2508 			err = snmp6_register_dev(idev);
2509 			if (err)
2510 				return notifier_from_errno(err);
2511 		}
2512 		break;
2513 	}
2514 
2515 	return NOTIFY_OK;
2516 }
2517 
2518 /*
2519  *	addrconf module should be notified of a device going up
2520  */
2521 static struct notifier_block ipv6_dev_notf = {
2522 	.notifier_call = addrconf_notify,
2523 	.priority = 0
2524 };
2525 
2526 static int addrconf_ifdown(struct net_device *dev, int how)
2527 {
2528 	struct inet6_dev *idev;
2529 	struct inet6_ifaddr *ifa, **bifa;
2530 	struct net *net = dev_net(dev);
2531 	int i;
2532 
2533 	ASSERT_RTNL();
2534 
2535 	if (dev == init_net.loopback_dev && how == 1)
2536 		how = 0;
2537 
2538 	rt6_ifdown(net, dev);
2539 	neigh_ifdown(&nd_tbl, dev);
2540 
2541 	idev = __in6_dev_get(dev);
2542 	if (idev == NULL)
2543 		return -ENODEV;
2544 
2545 	/* Step 1: remove reference to ipv6 device from parent device.
2546 		   Do not dev_put!
2547 	 */
2548 	if (how == 1) {
2549 		idev->dead = 1;
2550 
2551 		/* protected by rtnl_lock */
2552 		rcu_assign_pointer(dev->ip6_ptr, NULL);
2553 
2554 		/* Step 1.5: remove snmp6 entry */
2555 		snmp6_unregister_dev(idev);
2556 
2557 	}
2558 
2559 	/* Step 2: clear hash table */
2560 	for (i=0; i<IN6_ADDR_HSIZE; i++) {
2561 		bifa = &inet6_addr_lst[i];
2562 
2563 		write_lock_bh(&addrconf_hash_lock);
2564 		while ((ifa = *bifa) != NULL) {
2565 			if (ifa->idev == idev) {
2566 				*bifa = ifa->lst_next;
2567 				ifa->lst_next = NULL;
2568 				addrconf_del_timer(ifa);
2569 				in6_ifa_put(ifa);
2570 				continue;
2571 			}
2572 			bifa = &ifa->lst_next;
2573 		}
2574 		write_unlock_bh(&addrconf_hash_lock);
2575 	}
2576 
2577 	write_lock_bh(&idev->lock);
2578 
2579 	/* Step 3: clear flags for stateless addrconf */
2580 	if (how != 1)
2581 		idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);
2582 
2583 	/* Step 4: clear address list */
2584 #ifdef CONFIG_IPV6_PRIVACY
2585 	if (how == 1 && del_timer(&idev->regen_timer))
2586 		in6_dev_put(idev);
2587 
2588 	/* clear tempaddr list */
2589 	while ((ifa = idev->tempaddr_list) != NULL) {
2590 		idev->tempaddr_list = ifa->tmp_next;
2591 		ifa->tmp_next = NULL;
2592 		ifa->dead = 1;
2593 		write_unlock_bh(&idev->lock);
2594 		spin_lock_bh(&ifa->lock);
2595 
2596 		if (ifa->ifpub) {
2597 			in6_ifa_put(ifa->ifpub);
2598 			ifa->ifpub = NULL;
2599 		}
2600 		spin_unlock_bh(&ifa->lock);
2601 		in6_ifa_put(ifa);
2602 		write_lock_bh(&idev->lock);
2603 	}
2604 #endif
2605 	while ((ifa = idev->addr_list) != NULL) {
2606 		idev->addr_list = ifa->if_next;
2607 		ifa->if_next = NULL;
2608 		ifa->dead = 1;
2609 		addrconf_del_timer(ifa);
2610 		write_unlock_bh(&idev->lock);
2611 
2612 		__ipv6_ifa_notify(RTM_DELADDR, ifa);
2613 		atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifa);
2614 		in6_ifa_put(ifa);
2615 
2616 		write_lock_bh(&idev->lock);
2617 	}
2618 	write_unlock_bh(&idev->lock);
2619 
2620 	/* Step 5: Discard multicast list */
2621 
2622 	if (how == 1)
2623 		ipv6_mc_destroy_dev(idev);
2624 	else
2625 		ipv6_mc_down(idev);
2626 
2627 	idev->tstamp = jiffies;
2628 
2629 	/* Shot the device (if unregistered) */
2630 
2631 	if (how == 1) {
2632 		addrconf_sysctl_unregister(idev);
2633 		neigh_parms_release(&nd_tbl, idev->nd_parms);
2634 		neigh_ifdown(&nd_tbl, dev);
2635 		in6_dev_put(idev);
2636 	}
2637 	return 0;
2638 }
2639 
2640 static void addrconf_rs_timer(unsigned long data)
2641 {
2642 	struct inet6_ifaddr *ifp = (struct inet6_ifaddr *) data;
2643 
2644 	if (ifp->idev->cnf.forwarding)
2645 		goto out;
2646 
2647 	if (ifp->idev->if_flags & IF_RA_RCVD) {
2648 		/*
2649 		 *	Announcement received after solicitation
2650 		 *	was sent
2651 		 */
2652 		goto out;
2653 	}
2654 
2655 	spin_lock(&ifp->lock);
2656 	if (ifp->probes++ < ifp->idev->cnf.rtr_solicits) {
2657 		struct in6_addr all_routers;
2658 
2659 		/* The wait after the last probe can be shorter */
2660 		addrconf_mod_timer(ifp, AC_RS,
2661 				   (ifp->probes == ifp->idev->cnf.rtr_solicits) ?
2662 				   ifp->idev->cnf.rtr_solicit_delay :
2663 				   ifp->idev->cnf.rtr_solicit_interval);
2664 		spin_unlock(&ifp->lock);
2665 
2666 		ipv6_addr_all_routers(&all_routers);
2667 
2668 		ndisc_send_rs(ifp->idev->dev, &ifp->addr, &all_routers);
2669 	} else {
2670 		spin_unlock(&ifp->lock);
2671 		/*
2672 		 * Note: we do not support deprecated "all on-link"
2673 		 * assumption any longer.
2674 		 */
2675 		printk(KERN_DEBUG "%s: no IPv6 routers present\n",
2676 		       ifp->idev->dev->name);
2677 	}
2678 
2679 out:
2680 	in6_ifa_put(ifp);
2681 }
2682 
2683 /*
2684  *	Duplicate Address Detection
2685  */
2686 static void addrconf_dad_kick(struct inet6_ifaddr *ifp)
2687 {
2688 	unsigned long rand_num;
2689 	struct inet6_dev *idev = ifp->idev;
2690 
2691 	if (ifp->flags & IFA_F_OPTIMISTIC)
2692 		rand_num = 0;
2693 	else
2694 		rand_num = net_random() % (idev->cnf.rtr_solicit_delay ? : 1);
2695 
2696 	ifp->probes = idev->cnf.dad_transmits;
2697 	addrconf_mod_timer(ifp, AC_DAD, rand_num);
2698 }
2699 
2700 static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)
2701 {
2702 	struct inet6_dev *idev = ifp->idev;
2703 	struct net_device *dev = idev->dev;
2704 
2705 	addrconf_join_solict(dev, &ifp->addr);
2706 
2707 	net_srandom(ifp->addr.s6_addr32[3]);
2708 
2709 	read_lock_bh(&idev->lock);
2710 	if (ifp->dead)
2711 		goto out;
2712 	spin_lock_bh(&ifp->lock);
2713 
2714 	if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) ||
2715 	    !(ifp->flags&IFA_F_TENTATIVE) ||
2716 	    ifp->flags & IFA_F_NODAD) {
2717 		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC);
2718 		spin_unlock_bh(&ifp->lock);
2719 		read_unlock_bh(&idev->lock);
2720 
2721 		addrconf_dad_completed(ifp);
2722 		return;
2723 	}
2724 
2725 	if (!(idev->if_flags & IF_READY)) {
2726 		spin_unlock_bh(&ifp->lock);
2727 		read_unlock_bh(&idev->lock);
2728 		/*
2729 		 * If the defice is not ready:
2730 		 * - keep it tentative if it is a permanent address.
2731 		 * - otherwise, kill it.
2732 		 */
2733 		in6_ifa_hold(ifp);
2734 		addrconf_dad_stop(ifp);
2735 		return;
2736 	}
2737 
2738 	/*
2739 	 * Optimistic nodes can start receiving
2740 	 * Frames right away
2741 	 */
2742 	if(ifp->flags & IFA_F_OPTIMISTIC)
2743 		ip6_ins_rt(ifp->rt);
2744 
2745 	addrconf_dad_kick(ifp);
2746 	spin_unlock_bh(&ifp->lock);
2747 out:
2748 	read_unlock_bh(&idev->lock);
2749 }
2750 
2751 static void addrconf_dad_timer(unsigned long data)
2752 {
2753 	struct inet6_ifaddr *ifp = (struct inet6_ifaddr *) data;
2754 	struct inet6_dev *idev = ifp->idev;
2755 	struct in6_addr unspec;
2756 	struct in6_addr mcaddr;
2757 
2758 	read_lock_bh(&idev->lock);
2759 	if (idev->dead) {
2760 		read_unlock_bh(&idev->lock);
2761 		goto out;
2762 	}
2763 	spin_lock_bh(&ifp->lock);
2764 	if (ifp->probes == 0) {
2765 		/*
2766 		 * DAD was successful
2767 		 */
2768 
2769 		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC);
2770 		spin_unlock_bh(&ifp->lock);
2771 		read_unlock_bh(&idev->lock);
2772 
2773 		addrconf_dad_completed(ifp);
2774 
2775 		goto out;
2776 	}
2777 
2778 	ifp->probes--;
2779 	addrconf_mod_timer(ifp, AC_DAD, ifp->idev->nd_parms->retrans_time);
2780 	spin_unlock_bh(&ifp->lock);
2781 	read_unlock_bh(&idev->lock);
2782 
2783 	/* send a neighbour solicitation for our addr */
2784 	memset(&unspec, 0, sizeof(unspec));
2785 	addrconf_addr_solict_mult(&ifp->addr, &mcaddr);
2786 	ndisc_send_ns(ifp->idev->dev, NULL, &ifp->addr, &mcaddr, &unspec);
2787 out:
2788 	in6_ifa_put(ifp);
2789 }
2790 
2791 static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
2792 {
2793 	struct net_device *	dev = ifp->idev->dev;
2794 
2795 	/*
2796 	 *	Configure the address for reception. Now it is valid.
2797 	 */
2798 
2799 	ipv6_ifa_notify(RTM_NEWADDR, ifp);
2800 
2801 	/* If added prefix is link local and forwarding is off,
2802 	   start sending router solicitations.
2803 	 */
2804 
2805 	if (ifp->idev->cnf.forwarding == 0 &&
2806 	    ifp->idev->cnf.rtr_solicits > 0 &&
2807 	    (dev->flags&IFF_LOOPBACK) == 0 &&
2808 	    (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
2809 		struct in6_addr all_routers;
2810 
2811 		ipv6_addr_all_routers(&all_routers);
2812 
2813 		/*
2814 		 *	If a host as already performed a random delay
2815 		 *	[...] as part of DAD [...] there is no need
2816 		 *	to delay again before sending the first RS
2817 		 */
2818 		ndisc_send_rs(ifp->idev->dev, &ifp->addr, &all_routers);
2819 
2820 		spin_lock_bh(&ifp->lock);
2821 		ifp->probes = 1;
2822 		ifp->idev->if_flags |= IF_RS_SENT;
2823 		addrconf_mod_timer(ifp, AC_RS, ifp->idev->cnf.rtr_solicit_interval);
2824 		spin_unlock_bh(&ifp->lock);
2825 	}
2826 }
2827 
2828 static void addrconf_dad_run(struct inet6_dev *idev) {
2829 	struct inet6_ifaddr *ifp;
2830 
2831 	read_lock_bh(&idev->lock);
2832 	for (ifp = idev->addr_list; ifp; ifp = ifp->if_next) {
2833 		spin_lock_bh(&ifp->lock);
2834 		if (!(ifp->flags & IFA_F_TENTATIVE)) {
2835 			spin_unlock_bh(&ifp->lock);
2836 			continue;
2837 		}
2838 		spin_unlock_bh(&ifp->lock);
2839 		addrconf_dad_kick(ifp);
2840 	}
2841 	read_unlock_bh(&idev->lock);
2842 }
2843 
2844 #ifdef CONFIG_PROC_FS
2845 struct if6_iter_state {
2846 	struct seq_net_private p;
2847 	int bucket;
2848 };
2849 
2850 static struct inet6_ifaddr *if6_get_first(struct seq_file *seq)
2851 {
2852 	struct inet6_ifaddr *ifa = NULL;
2853 	struct if6_iter_state *state = seq->private;
2854 	struct net *net = seq_file_net(seq);
2855 
2856 	for (state->bucket = 0; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) {
2857 		ifa = inet6_addr_lst[state->bucket];
2858 
2859 		while (ifa && !net_eq(dev_net(ifa->idev->dev), net))
2860 			ifa = ifa->lst_next;
2861 		if (ifa)
2862 			break;
2863 	}
2864 	return ifa;
2865 }
2866 
2867 static struct inet6_ifaddr *if6_get_next(struct seq_file *seq, struct inet6_ifaddr *ifa)
2868 {
2869 	struct if6_iter_state *state = seq->private;
2870 	struct net *net = seq_file_net(seq);
2871 
2872 	ifa = ifa->lst_next;
2873 try_again:
2874 	if (ifa) {
2875 		if (!net_eq(dev_net(ifa->idev->dev), net)) {
2876 			ifa = ifa->lst_next;
2877 			goto try_again;
2878 		}
2879 	}
2880 
2881 	if (!ifa && ++state->bucket < IN6_ADDR_HSIZE) {
2882 		ifa = inet6_addr_lst[state->bucket];
2883 		goto try_again;
2884 	}
2885 
2886 	return ifa;
2887 }
2888 
2889 static struct inet6_ifaddr *if6_get_idx(struct seq_file *seq, loff_t pos)
2890 {
2891 	struct inet6_ifaddr *ifa = if6_get_first(seq);
2892 
2893 	if (ifa)
2894 		while(pos && (ifa = if6_get_next(seq, ifa)) != NULL)
2895 			--pos;
2896 	return pos ? NULL : ifa;
2897 }
2898 
2899 static void *if6_seq_start(struct seq_file *seq, loff_t *pos)
2900 	__acquires(addrconf_hash_lock)
2901 {
2902 	read_lock_bh(&addrconf_hash_lock);
2903 	return if6_get_idx(seq, *pos);
2904 }
2905 
2906 static void *if6_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2907 {
2908 	struct inet6_ifaddr *ifa;
2909 
2910 	ifa = if6_get_next(seq, v);
2911 	++*pos;
2912 	return ifa;
2913 }
2914 
2915 static void if6_seq_stop(struct seq_file *seq, void *v)
2916 	__releases(addrconf_hash_lock)
2917 {
2918 	read_unlock_bh(&addrconf_hash_lock);
2919 }
2920 
2921 static int if6_seq_show(struct seq_file *seq, void *v)
2922 {
2923 	struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
2924 	seq_printf(seq,
2925 		   NIP6_SEQFMT " %02x %02x %02x %02x %8s\n",
2926 		   NIP6(ifp->addr),
2927 		   ifp->idev->dev->ifindex,
2928 		   ifp->prefix_len,
2929 		   ifp->scope,
2930 		   ifp->flags,
2931 		   ifp->idev->dev->name);
2932 	return 0;
2933 }
2934 
2935 static const struct seq_operations if6_seq_ops = {
2936 	.start	= if6_seq_start,
2937 	.next	= if6_seq_next,
2938 	.show	= if6_seq_show,
2939 	.stop	= if6_seq_stop,
2940 };
2941 
2942 static int if6_seq_open(struct inode *inode, struct file *file)
2943 {
2944 	return seq_open_net(inode, file, &if6_seq_ops,
2945 			    sizeof(struct if6_iter_state));
2946 }
2947 
2948 static const struct file_operations if6_fops = {
2949 	.owner		= THIS_MODULE,
2950 	.open		= if6_seq_open,
2951 	.read		= seq_read,
2952 	.llseek		= seq_lseek,
2953 	.release	= seq_release_net,
2954 };
2955 
2956 static int if6_proc_net_init(struct net *net)
2957 {
2958 	if (!proc_net_fops_create(net, "if_inet6", S_IRUGO, &if6_fops))
2959 		return -ENOMEM;
2960 	return 0;
2961 }
2962 
2963 static void if6_proc_net_exit(struct net *net)
2964 {
2965        proc_net_remove(net, "if_inet6");
2966 }
2967 
2968 static struct pernet_operations if6_proc_net_ops = {
2969        .init = if6_proc_net_init,
2970        .exit = if6_proc_net_exit,
2971 };
2972 
2973 int __init if6_proc_init(void)
2974 {
2975 	return register_pernet_subsys(&if6_proc_net_ops);
2976 }
2977 
2978 void if6_proc_exit(void)
2979 {
2980 	unregister_pernet_subsys(&if6_proc_net_ops);
2981 }
2982 #endif	/* CONFIG_PROC_FS */
2983 
2984 #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
2985 /* Check if address is a home address configured on any interface. */
2986 int ipv6_chk_home_addr(struct net *net, struct in6_addr *addr)
2987 {
2988 	int ret = 0;
2989 	struct inet6_ifaddr * ifp;
2990 	u8 hash = ipv6_addr_hash(addr);
2991 	read_lock_bh(&addrconf_hash_lock);
2992 	for (ifp = inet6_addr_lst[hash]; ifp; ifp = ifp->lst_next) {
2993 		if (!net_eq(dev_net(ifp->idev->dev), net))
2994 			continue;
2995 		if (ipv6_addr_equal(&ifp->addr, addr) &&
2996 		    (ifp->flags & IFA_F_HOMEADDRESS)) {
2997 			ret = 1;
2998 			break;
2999 		}
3000 	}
3001 	read_unlock_bh(&addrconf_hash_lock);
3002 	return ret;
3003 }
3004 #endif
3005 
3006 /*
3007  *	Periodic address status verification
3008  */
3009 
3010 static void addrconf_verify(unsigned long foo)
3011 {
3012 	struct inet6_ifaddr *ifp;
3013 	unsigned long now, next;
3014 	int i;
3015 
3016 	spin_lock_bh(&addrconf_verify_lock);
3017 	now = jiffies;
3018 	next = now + ADDR_CHECK_FREQUENCY;
3019 
3020 	del_timer(&addr_chk_timer);
3021 
3022 	for (i=0; i < IN6_ADDR_HSIZE; i++) {
3023 
3024 restart:
3025 		read_lock(&addrconf_hash_lock);
3026 		for (ifp=inet6_addr_lst[i]; ifp; ifp=ifp->lst_next) {
3027 			unsigned long age;
3028 #ifdef CONFIG_IPV6_PRIVACY
3029 			unsigned long regen_advance;
3030 #endif
3031 
3032 			if (ifp->flags & IFA_F_PERMANENT)
3033 				continue;
3034 
3035 			spin_lock(&ifp->lock);
3036 			age = (now - ifp->tstamp) / HZ;
3037 
3038 #ifdef CONFIG_IPV6_PRIVACY
3039 			regen_advance = ifp->idev->cnf.regen_max_retry *
3040 					ifp->idev->cnf.dad_transmits *
3041 					ifp->idev->nd_parms->retrans_time / HZ;
3042 #endif
3043 
3044 			if (ifp->valid_lft != INFINITY_LIFE_TIME &&
3045 			    age >= ifp->valid_lft) {
3046 				spin_unlock(&ifp->lock);
3047 				in6_ifa_hold(ifp);
3048 				read_unlock(&addrconf_hash_lock);
3049 				ipv6_del_addr(ifp);
3050 				goto restart;
3051 			} else if (ifp->prefered_lft == INFINITY_LIFE_TIME) {
3052 				spin_unlock(&ifp->lock);
3053 				continue;
3054 			} else if (age >= ifp->prefered_lft) {
3055 				/* jiffies - ifp->tsamp > age >= ifp->prefered_lft */
3056 				int deprecate = 0;
3057 
3058 				if (!(ifp->flags&IFA_F_DEPRECATED)) {
3059 					deprecate = 1;
3060 					ifp->flags |= IFA_F_DEPRECATED;
3061 				}
3062 
3063 				if (time_before(ifp->tstamp + ifp->valid_lft * HZ, next))
3064 					next = ifp->tstamp + ifp->valid_lft * HZ;
3065 
3066 				spin_unlock(&ifp->lock);
3067 
3068 				if (deprecate) {
3069 					in6_ifa_hold(ifp);
3070 					read_unlock(&addrconf_hash_lock);
3071 
3072 					ipv6_ifa_notify(0, ifp);
3073 					in6_ifa_put(ifp);
3074 					goto restart;
3075 				}
3076 #ifdef CONFIG_IPV6_PRIVACY
3077 			} else if ((ifp->flags&IFA_F_TEMPORARY) &&
3078 				   !(ifp->flags&IFA_F_TENTATIVE)) {
3079 				if (age >= ifp->prefered_lft - regen_advance) {
3080 					struct inet6_ifaddr *ifpub = ifp->ifpub;
3081 					if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
3082 						next = ifp->tstamp + ifp->prefered_lft * HZ;
3083 					if (!ifp->regen_count && ifpub) {
3084 						ifp->regen_count++;
3085 						in6_ifa_hold(ifp);
3086 						in6_ifa_hold(ifpub);
3087 						spin_unlock(&ifp->lock);
3088 						read_unlock(&addrconf_hash_lock);
3089 						spin_lock(&ifpub->lock);
3090 						ifpub->regen_count = 0;
3091 						spin_unlock(&ifpub->lock);
3092 						ipv6_create_tempaddr(ifpub, ifp);
3093 						in6_ifa_put(ifpub);
3094 						in6_ifa_put(ifp);
3095 						goto restart;
3096 					}
3097 				} else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next))
3098 					next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ;
3099 				spin_unlock(&ifp->lock);
3100 #endif
3101 			} else {
3102 				/* ifp->prefered_lft <= ifp->valid_lft */
3103 				if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
3104 					next = ifp->tstamp + ifp->prefered_lft * HZ;
3105 				spin_unlock(&ifp->lock);
3106 			}
3107 		}
3108 		read_unlock(&addrconf_hash_lock);
3109 	}
3110 
3111 	addr_chk_timer.expires = time_before(next, jiffies + HZ) ? jiffies + HZ : next;
3112 	add_timer(&addr_chk_timer);
3113 	spin_unlock_bh(&addrconf_verify_lock);
3114 }
3115 
3116 static struct in6_addr *extract_addr(struct nlattr *addr, struct nlattr *local)
3117 {
3118 	struct in6_addr *pfx = NULL;
3119 
3120 	if (addr)
3121 		pfx = nla_data(addr);
3122 
3123 	if (local) {
3124 		if (pfx && nla_memcmp(local, pfx, sizeof(*pfx)))
3125 			pfx = NULL;
3126 		else
3127 			pfx = nla_data(local);
3128 	}
3129 
3130 	return pfx;
3131 }
3132 
3133 static const struct nla_policy ifa_ipv6_policy[IFA_MAX+1] = {
3134 	[IFA_ADDRESS]		= { .len = sizeof(struct in6_addr) },
3135 	[IFA_LOCAL]		= { .len = sizeof(struct in6_addr) },
3136 	[IFA_CACHEINFO]		= { .len = sizeof(struct ifa_cacheinfo) },
3137 };
3138 
3139 static int
3140 inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
3141 {
3142 	struct net *net = sock_net(skb->sk);
3143 	struct ifaddrmsg *ifm;
3144 	struct nlattr *tb[IFA_MAX+1];
3145 	struct in6_addr *pfx;
3146 	int err;
3147 
3148 	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
3149 	if (err < 0)
3150 		return err;
3151 
3152 	ifm = nlmsg_data(nlh);
3153 	pfx = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL]);
3154 	if (pfx == NULL)
3155 		return -EINVAL;
3156 
3157 	return inet6_addr_del(net, ifm->ifa_index, pfx, ifm->ifa_prefixlen);
3158 }
3159 
3160 static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
3161 			     u32 prefered_lft, u32 valid_lft)
3162 {
3163 	u32 flags = RTF_EXPIRES;
3164 
3165 	if (!valid_lft || (prefered_lft > valid_lft))
3166 		return -EINVAL;
3167 
3168 	if (valid_lft == INFINITY_LIFE_TIME) {
3169 		ifa_flags |= IFA_F_PERMANENT;
3170 		flags = 0;
3171 	} else if (valid_lft >= 0x7FFFFFFF/HZ)
3172 		valid_lft = 0x7FFFFFFF/HZ;
3173 
3174 	if (prefered_lft == 0)
3175 		ifa_flags |= IFA_F_DEPRECATED;
3176 	else if ((prefered_lft >= 0x7FFFFFFF/HZ) &&
3177 		 (prefered_lft != INFINITY_LIFE_TIME))
3178 		prefered_lft = 0x7FFFFFFF/HZ;
3179 
3180 	spin_lock_bh(&ifp->lock);
3181 	ifp->flags = (ifp->flags & ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | IFA_F_HOMEADDRESS)) | ifa_flags;
3182 	ifp->tstamp = jiffies;
3183 	ifp->valid_lft = valid_lft;
3184 	ifp->prefered_lft = prefered_lft;
3185 
3186 	spin_unlock_bh(&ifp->lock);
3187 	if (!(ifp->flags&IFA_F_TENTATIVE))
3188 		ipv6_ifa_notify(0, ifp);
3189 
3190 	addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev,
3191 			      jiffies_to_clock_t(valid_lft * HZ), flags);
3192 	addrconf_verify(0);
3193 
3194 	return 0;
3195 }
3196 
3197 static int
3198 inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
3199 {
3200 	struct net *net = sock_net(skb->sk);
3201 	struct ifaddrmsg *ifm;
3202 	struct nlattr *tb[IFA_MAX+1];
3203 	struct in6_addr *pfx;
3204 	struct inet6_ifaddr *ifa;
3205 	struct net_device *dev;
3206 	u32 valid_lft = INFINITY_LIFE_TIME, preferred_lft = INFINITY_LIFE_TIME;
3207 	u8 ifa_flags;
3208 	int err;
3209 
3210 	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
3211 	if (err < 0)
3212 		return err;
3213 
3214 	ifm = nlmsg_data(nlh);
3215 	pfx = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL]);
3216 	if (pfx == NULL)
3217 		return -EINVAL;
3218 
3219 	if (tb[IFA_CACHEINFO]) {
3220 		struct ifa_cacheinfo *ci;
3221 
3222 		ci = nla_data(tb[IFA_CACHEINFO]);
3223 		valid_lft = ci->ifa_valid;
3224 		preferred_lft = ci->ifa_prefered;
3225 	} else {
3226 		preferred_lft = INFINITY_LIFE_TIME;
3227 		valid_lft = INFINITY_LIFE_TIME;
3228 	}
3229 
3230 	dev =  __dev_get_by_index(net, ifm->ifa_index);
3231 	if (dev == NULL)
3232 		return -ENODEV;
3233 
3234 	/* We ignore other flags so far. */
3235 	ifa_flags = ifm->ifa_flags & (IFA_F_NODAD | IFA_F_HOMEADDRESS);
3236 
3237 	ifa = ipv6_get_ifaddr(net, pfx, dev, 1);
3238 	if (ifa == NULL) {
3239 		/*
3240 		 * It would be best to check for !NLM_F_CREATE here but
3241 		 * userspace alreay relies on not having to provide this.
3242 		 */
3243 		return inet6_addr_add(net, ifm->ifa_index, pfx,
3244 				      ifm->ifa_prefixlen, ifa_flags,
3245 				      preferred_lft, valid_lft);
3246 	}
3247 
3248 	if (nlh->nlmsg_flags & NLM_F_EXCL ||
3249 	    !(nlh->nlmsg_flags & NLM_F_REPLACE))
3250 		err = -EEXIST;
3251 	else
3252 		err = inet6_addr_modify(ifa, ifa_flags, preferred_lft, valid_lft);
3253 
3254 	in6_ifa_put(ifa);
3255 
3256 	return err;
3257 }
3258 
3259 static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u8 flags,
3260 			  u8 scope, int ifindex)
3261 {
3262 	struct ifaddrmsg *ifm;
3263 
3264 	ifm = nlmsg_data(nlh);
3265 	ifm->ifa_family = AF_INET6;
3266 	ifm->ifa_prefixlen = prefixlen;
3267 	ifm->ifa_flags = flags;
3268 	ifm->ifa_scope = scope;
3269 	ifm->ifa_index = ifindex;
3270 }
3271 
3272 static int put_cacheinfo(struct sk_buff *skb, unsigned long cstamp,
3273 			 unsigned long tstamp, u32 preferred, u32 valid)
3274 {
3275 	struct ifa_cacheinfo ci;
3276 
3277 	ci.cstamp = (u32)(TIME_DELTA(cstamp, INITIAL_JIFFIES) / HZ * 100
3278 			+ TIME_DELTA(cstamp, INITIAL_JIFFIES) % HZ * 100 / HZ);
3279 	ci.tstamp = (u32)(TIME_DELTA(tstamp, INITIAL_JIFFIES) / HZ * 100
3280 			+ TIME_DELTA(tstamp, INITIAL_JIFFIES) % HZ * 100 / HZ);
3281 	ci.ifa_prefered = preferred;
3282 	ci.ifa_valid = valid;
3283 
3284 	return nla_put(skb, IFA_CACHEINFO, sizeof(ci), &ci);
3285 }
3286 
3287 static inline int rt_scope(int ifa_scope)
3288 {
3289 	if (ifa_scope & IFA_HOST)
3290 		return RT_SCOPE_HOST;
3291 	else if (ifa_scope & IFA_LINK)
3292 		return RT_SCOPE_LINK;
3293 	else if (ifa_scope & IFA_SITE)
3294 		return RT_SCOPE_SITE;
3295 	else
3296 		return RT_SCOPE_UNIVERSE;
3297 }
3298 
3299 static inline int inet6_ifaddr_msgsize(void)
3300 {
3301 	return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
3302 	       + nla_total_size(16) /* IFA_ADDRESS */
3303 	       + nla_total_size(sizeof(struct ifa_cacheinfo));
3304 }
3305 
3306 static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
3307 			     u32 pid, u32 seq, int event, unsigned int flags)
3308 {
3309 	struct nlmsghdr  *nlh;
3310 	u32 preferred, valid;
3311 
3312 	nlh = nlmsg_put(skb, pid, seq, event, sizeof(struct ifaddrmsg), flags);
3313 	if (nlh == NULL)
3314 		return -EMSGSIZE;
3315 
3316 	put_ifaddrmsg(nlh, ifa->prefix_len, ifa->flags, rt_scope(ifa->scope),
3317 		      ifa->idev->dev->ifindex);
3318 
3319 	if (!(ifa->flags&IFA_F_PERMANENT)) {
3320 		preferred = ifa->prefered_lft;
3321 		valid = ifa->valid_lft;
3322 		if (preferred != INFINITY_LIFE_TIME) {
3323 			long tval = (jiffies - ifa->tstamp)/HZ;
3324 			preferred -= tval;
3325 			if (valid != INFINITY_LIFE_TIME)
3326 				valid -= tval;
3327 		}
3328 	} else {
3329 		preferred = INFINITY_LIFE_TIME;
3330 		valid = INFINITY_LIFE_TIME;
3331 	}
3332 
3333 	if (nla_put(skb, IFA_ADDRESS, 16, &ifa->addr) < 0 ||
3334 	    put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0) {
3335 		nlmsg_cancel(skb, nlh);
3336 		return -EMSGSIZE;
3337 	}
3338 
3339 	return nlmsg_end(skb, nlh);
3340 }
3341 
3342 static int inet6_fill_ifmcaddr(struct sk_buff *skb, struct ifmcaddr6 *ifmca,
3343 				u32 pid, u32 seq, int event, u16 flags)
3344 {
3345 	struct nlmsghdr  *nlh;
3346 	u8 scope = RT_SCOPE_UNIVERSE;
3347 	int ifindex = ifmca->idev->dev->ifindex;
3348 
3349 	if (ipv6_addr_scope(&ifmca->mca_addr) & IFA_SITE)
3350 		scope = RT_SCOPE_SITE;
3351 
3352 	nlh = nlmsg_put(skb, pid, seq, event, sizeof(struct ifaddrmsg), flags);
3353 	if (nlh == NULL)
3354 		return -EMSGSIZE;
3355 
3356 	put_ifaddrmsg(nlh, 128, IFA_F_PERMANENT, scope, ifindex);
3357 	if (nla_put(skb, IFA_MULTICAST, 16, &ifmca->mca_addr) < 0 ||
3358 	    put_cacheinfo(skb, ifmca->mca_cstamp, ifmca->mca_tstamp,
3359 			  INFINITY_LIFE_TIME, INFINITY_LIFE_TIME) < 0) {
3360 		nlmsg_cancel(skb, nlh);
3361 		return -EMSGSIZE;
3362 	}
3363 
3364 	return nlmsg_end(skb, nlh);
3365 }
3366 
3367 static int inet6_fill_ifacaddr(struct sk_buff *skb, struct ifacaddr6 *ifaca,
3368 				u32 pid, u32 seq, int event, unsigned int flags)
3369 {
3370 	struct nlmsghdr  *nlh;
3371 	u8 scope = RT_SCOPE_UNIVERSE;
3372 	int ifindex = ifaca->aca_idev->dev->ifindex;
3373 
3374 	if (ipv6_addr_scope(&ifaca->aca_addr) & IFA_SITE)
3375 		scope = RT_SCOPE_SITE;
3376 
3377 	nlh = nlmsg_put(skb, pid, seq, event, sizeof(struct ifaddrmsg), flags);
3378 	if (nlh == NULL)
3379 		return -EMSGSIZE;
3380 
3381 	put_ifaddrmsg(nlh, 128, IFA_F_PERMANENT, scope, ifindex);
3382 	if (nla_put(skb, IFA_ANYCAST, 16, &ifaca->aca_addr) < 0 ||
3383 	    put_cacheinfo(skb, ifaca->aca_cstamp, ifaca->aca_tstamp,
3384 			  INFINITY_LIFE_TIME, INFINITY_LIFE_TIME) < 0) {
3385 		nlmsg_cancel(skb, nlh);
3386 		return -EMSGSIZE;
3387 	}
3388 
3389 	return nlmsg_end(skb, nlh);
3390 }
3391 
3392 enum addr_type_t
3393 {
3394 	UNICAST_ADDR,
3395 	MULTICAST_ADDR,
3396 	ANYCAST_ADDR,
3397 };
3398 
3399 static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
3400 			   enum addr_type_t type)
3401 {
3402 	int idx, ip_idx;
3403 	int s_idx, s_ip_idx;
3404 	int err = 1;
3405 	struct net_device *dev;
3406 	struct inet6_dev *idev = NULL;
3407 	struct inet6_ifaddr *ifa;
3408 	struct ifmcaddr6 *ifmca;
3409 	struct ifacaddr6 *ifaca;
3410 	struct net *net = sock_net(skb->sk);
3411 
3412 	s_idx = cb->args[0];
3413 	s_ip_idx = ip_idx = cb->args[1];
3414 
3415 	idx = 0;
3416 	for_each_netdev(net, dev) {
3417 		if (idx < s_idx)
3418 			goto cont;
3419 		if (idx > s_idx)
3420 			s_ip_idx = 0;
3421 		ip_idx = 0;
3422 		if ((idev = in6_dev_get(dev)) == NULL)
3423 			goto cont;
3424 		read_lock_bh(&idev->lock);
3425 		switch (type) {
3426 		case UNICAST_ADDR:
3427 			/* unicast address incl. temp addr */
3428 			for (ifa = idev->addr_list; ifa;
3429 			     ifa = ifa->if_next, ip_idx++) {
3430 				if (ip_idx < s_ip_idx)
3431 					continue;
3432 				err = inet6_fill_ifaddr(skb, ifa,
3433 							NETLINK_CB(cb->skb).pid,
3434 							cb->nlh->nlmsg_seq,
3435 							RTM_NEWADDR,
3436 							NLM_F_MULTI);
3437 			}
3438 			break;
3439 		case MULTICAST_ADDR:
3440 			/* multicast address */
3441 			for (ifmca = idev->mc_list; ifmca;
3442 			     ifmca = ifmca->next, ip_idx++) {
3443 				if (ip_idx < s_ip_idx)
3444 					continue;
3445 				err = inet6_fill_ifmcaddr(skb, ifmca,
3446 							  NETLINK_CB(cb->skb).pid,
3447 							  cb->nlh->nlmsg_seq,
3448 							  RTM_GETMULTICAST,
3449 							  NLM_F_MULTI);
3450 			}
3451 			break;
3452 		case ANYCAST_ADDR:
3453 			/* anycast address */
3454 			for (ifaca = idev->ac_list; ifaca;
3455 			     ifaca = ifaca->aca_next, ip_idx++) {
3456 				if (ip_idx < s_ip_idx)
3457 					continue;
3458 				err = inet6_fill_ifacaddr(skb, ifaca,
3459 							  NETLINK_CB(cb->skb).pid,
3460 							  cb->nlh->nlmsg_seq,
3461 							  RTM_GETANYCAST,
3462 							  NLM_F_MULTI);
3463 			}
3464 			break;
3465 		default:
3466 			break;
3467 		}
3468 		read_unlock_bh(&idev->lock);
3469 		in6_dev_put(idev);
3470 
3471 		if (err <= 0)
3472 			break;
3473 cont:
3474 		idx++;
3475 	}
3476 	cb->args[0] = idx;
3477 	cb->args[1] = ip_idx;
3478 	return skb->len;
3479 }
3480 
3481 static int inet6_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
3482 {
3483 	enum addr_type_t type = UNICAST_ADDR;
3484 
3485 	return inet6_dump_addr(skb, cb, type);
3486 }
3487 
3488 static int inet6_dump_ifmcaddr(struct sk_buff *skb, struct netlink_callback *cb)
3489 {
3490 	enum addr_type_t type = MULTICAST_ADDR;
3491 
3492 	return inet6_dump_addr(skb, cb, type);
3493 }
3494 
3495 
3496 static int inet6_dump_ifacaddr(struct sk_buff *skb, struct netlink_callback *cb)
3497 {
3498 	enum addr_type_t type = ANYCAST_ADDR;
3499 
3500 	return inet6_dump_addr(skb, cb, type);
3501 }
3502 
3503 static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr* nlh,
3504 			     void *arg)
3505 {
3506 	struct net *net = sock_net(in_skb->sk);
3507 	struct ifaddrmsg *ifm;
3508 	struct nlattr *tb[IFA_MAX+1];
3509 	struct in6_addr *addr = NULL;
3510 	struct net_device *dev = NULL;
3511 	struct inet6_ifaddr *ifa;
3512 	struct sk_buff *skb;
3513 	int err;
3514 
3515 	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
3516 	if (err < 0)
3517 		goto errout;
3518 
3519 	addr = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL]);
3520 	if (addr == NULL) {
3521 		err = -EINVAL;
3522 		goto errout;
3523 	}
3524 
3525 	ifm = nlmsg_data(nlh);
3526 	if (ifm->ifa_index)
3527 		dev = __dev_get_by_index(net, ifm->ifa_index);
3528 
3529 	if ((ifa = ipv6_get_ifaddr(net, addr, dev, 1)) == NULL) {
3530 		err = -EADDRNOTAVAIL;
3531 		goto errout;
3532 	}
3533 
3534 	if ((skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_KERNEL)) == NULL) {
3535 		err = -ENOBUFS;
3536 		goto errout_ifa;
3537 	}
3538 
3539 	err = inet6_fill_ifaddr(skb, ifa, NETLINK_CB(in_skb).pid,
3540 				nlh->nlmsg_seq, RTM_NEWADDR, 0);
3541 	if (err < 0) {
3542 		/* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */
3543 		WARN_ON(err == -EMSGSIZE);
3544 		kfree_skb(skb);
3545 		goto errout_ifa;
3546 	}
3547 	err = rtnl_unicast(skb, net, NETLINK_CB(in_skb).pid);
3548 errout_ifa:
3549 	in6_ifa_put(ifa);
3550 errout:
3551 	return err;
3552 }
3553 
3554 static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
3555 {
3556 	struct sk_buff *skb;
3557 	struct net *net = dev_net(ifa->idev->dev);
3558 	int err = -ENOBUFS;
3559 
3560 	skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC);
3561 	if (skb == NULL)
3562 		goto errout;
3563 
3564 	err = inet6_fill_ifaddr(skb, ifa, 0, 0, event, 0);
3565 	if (err < 0) {
3566 		/* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */
3567 		WARN_ON(err == -EMSGSIZE);
3568 		kfree_skb(skb);
3569 		goto errout;
3570 	}
3571 	err = rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
3572 errout:
3573 	if (err < 0)
3574 		rtnl_set_sk_err(net, RTNLGRP_IPV6_IFADDR, err);
3575 }
3576 
3577 static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
3578 				__s32 *array, int bytes)
3579 {
3580 	BUG_ON(bytes < (DEVCONF_MAX * 4));
3581 
3582 	memset(array, 0, bytes);
3583 	array[DEVCONF_FORWARDING] = cnf->forwarding;
3584 	array[DEVCONF_HOPLIMIT] = cnf->hop_limit;
3585 	array[DEVCONF_MTU6] = cnf->mtu6;
3586 	array[DEVCONF_ACCEPT_RA] = cnf->accept_ra;
3587 	array[DEVCONF_ACCEPT_REDIRECTS] = cnf->accept_redirects;
3588 	array[DEVCONF_AUTOCONF] = cnf->autoconf;
3589 	array[DEVCONF_DAD_TRANSMITS] = cnf->dad_transmits;
3590 	array[DEVCONF_RTR_SOLICITS] = cnf->rtr_solicits;
3591 	array[DEVCONF_RTR_SOLICIT_INTERVAL] = cnf->rtr_solicit_interval;
3592 	array[DEVCONF_RTR_SOLICIT_DELAY] = cnf->rtr_solicit_delay;
3593 	array[DEVCONF_FORCE_MLD_VERSION] = cnf->force_mld_version;
3594 #ifdef CONFIG_IPV6_PRIVACY
3595 	array[DEVCONF_USE_TEMPADDR] = cnf->use_tempaddr;
3596 	array[DEVCONF_TEMP_VALID_LFT] = cnf->temp_valid_lft;
3597 	array[DEVCONF_TEMP_PREFERED_LFT] = cnf->temp_prefered_lft;
3598 	array[DEVCONF_REGEN_MAX_RETRY] = cnf->regen_max_retry;
3599 	array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor;
3600 #endif
3601 	array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses;
3602 	array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr;
3603 	array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo;
3604 #ifdef CONFIG_IPV6_ROUTER_PREF
3605 	array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref;
3606 	array[DEVCONF_RTR_PROBE_INTERVAL] = cnf->rtr_probe_interval;
3607 #ifdef CONFIG_IPV6_ROUTE_INFO
3608 	array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen;
3609 #endif
3610 #endif
3611 	array[DEVCONF_PROXY_NDP] = cnf->proxy_ndp;
3612 	array[DEVCONF_ACCEPT_SOURCE_ROUTE] = cnf->accept_source_route;
3613 #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
3614 	array[DEVCONF_OPTIMISTIC_DAD] = cnf->optimistic_dad;
3615 #endif
3616 #ifdef CONFIG_IPV6_MROUTE
3617 	array[DEVCONF_MC_FORWARDING] = cnf->mc_forwarding;
3618 #endif
3619 }
3620 
3621 static inline size_t inet6_if_nlmsg_size(void)
3622 {
3623 	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
3624 	       + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
3625 	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
3626 	       + nla_total_size(4) /* IFLA_MTU */
3627 	       + nla_total_size(4) /* IFLA_LINK */
3628 	       + nla_total_size( /* IFLA_PROTINFO */
3629 			nla_total_size(4) /* IFLA_INET6_FLAGS */
3630 			+ nla_total_size(sizeof(struct ifla_cacheinfo))
3631 			+ nla_total_size(DEVCONF_MAX * 4) /* IFLA_INET6_CONF */
3632 			+ nla_total_size(IPSTATS_MIB_MAX * 8) /* IFLA_INET6_STATS */
3633 			+ nla_total_size(ICMP6_MIB_MAX * 8) /* IFLA_INET6_ICMP6STATS */
3634 		 );
3635 }
3636 
3637 static inline void __snmp6_fill_stats(u64 *stats, void **mib, int items,
3638 				      int bytes)
3639 {
3640 	int i;
3641 	int pad = bytes - sizeof(u64) * items;
3642 	BUG_ON(pad < 0);
3643 
3644 	/* Use put_unaligned() because stats may not be aligned for u64. */
3645 	put_unaligned(items, &stats[0]);
3646 	for (i = 1; i < items; i++)
3647 		put_unaligned(snmp_fold_field(mib, i), &stats[i]);
3648 
3649 	memset(&stats[items], 0, pad);
3650 }
3651 
3652 static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
3653 			     int bytes)
3654 {
3655 	switch(attrtype) {
3656 	case IFLA_INET6_STATS:
3657 		__snmp6_fill_stats(stats, (void **)idev->stats.ipv6, IPSTATS_MIB_MAX, bytes);
3658 		break;
3659 	case IFLA_INET6_ICMP6STATS:
3660 		__snmp6_fill_stats(stats, (void **)idev->stats.icmpv6, ICMP6_MIB_MAX, bytes);
3661 		break;
3662 	}
3663 }
3664 
3665 static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev,
3666 			     u32 pid, u32 seq, int event, unsigned int flags)
3667 {
3668 	struct net_device *dev = idev->dev;
3669 	struct nlattr *nla;
3670 	struct ifinfomsg *hdr;
3671 	struct nlmsghdr *nlh;
3672 	void *protoinfo;
3673 	struct ifla_cacheinfo ci;
3674 
3675 	nlh = nlmsg_put(skb, pid, seq, event, sizeof(*hdr), flags);
3676 	if (nlh == NULL)
3677 		return -EMSGSIZE;
3678 
3679 	hdr = nlmsg_data(nlh);
3680 	hdr->ifi_family = AF_INET6;
3681 	hdr->__ifi_pad = 0;
3682 	hdr->ifi_type = dev->type;
3683 	hdr->ifi_index = dev->ifindex;
3684 	hdr->ifi_flags = dev_get_flags(dev);
3685 	hdr->ifi_change = 0;
3686 
3687 	NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name);
3688 
3689 	if (dev->addr_len)
3690 		NLA_PUT(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr);
3691 
3692 	NLA_PUT_U32(skb, IFLA_MTU, dev->mtu);
3693 	if (dev->ifindex != dev->iflink)
3694 		NLA_PUT_U32(skb, IFLA_LINK, dev->iflink);
3695 
3696 	protoinfo = nla_nest_start(skb, IFLA_PROTINFO);
3697 	if (protoinfo == NULL)
3698 		goto nla_put_failure;
3699 
3700 	NLA_PUT_U32(skb, IFLA_INET6_FLAGS, idev->if_flags);
3701 
3702 	ci.max_reasm_len = IPV6_MAXPLEN;
3703 	ci.tstamp = (__u32)(TIME_DELTA(idev->tstamp, INITIAL_JIFFIES) / HZ * 100
3704 		    + TIME_DELTA(idev->tstamp, INITIAL_JIFFIES) % HZ * 100 / HZ);
3705 	ci.reachable_time = idev->nd_parms->reachable_time;
3706 	ci.retrans_time = idev->nd_parms->retrans_time;
3707 	NLA_PUT(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci);
3708 
3709 	nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32));
3710 	if (nla == NULL)
3711 		goto nla_put_failure;
3712 	ipv6_store_devconf(&idev->cnf, nla_data(nla), nla_len(nla));
3713 
3714 	/* XXX - MC not implemented */
3715 
3716 	nla = nla_reserve(skb, IFLA_INET6_STATS, IPSTATS_MIB_MAX * sizeof(u64));
3717 	if (nla == NULL)
3718 		goto nla_put_failure;
3719 	snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_STATS, nla_len(nla));
3720 
3721 	nla = nla_reserve(skb, IFLA_INET6_ICMP6STATS, ICMP6_MIB_MAX * sizeof(u64));
3722 	if (nla == NULL)
3723 		goto nla_put_failure;
3724 	snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_ICMP6STATS, nla_len(nla));
3725 
3726 	nla_nest_end(skb, protoinfo);
3727 	return nlmsg_end(skb, nlh);
3728 
3729 nla_put_failure:
3730 	nlmsg_cancel(skb, nlh);
3731 	return -EMSGSIZE;
3732 }
3733 
3734 static int inet6_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
3735 {
3736 	struct net *net = sock_net(skb->sk);
3737 	int idx, err;
3738 	int s_idx = cb->args[0];
3739 	struct net_device *dev;
3740 	struct inet6_dev *idev;
3741 
3742 	read_lock(&dev_base_lock);
3743 	idx = 0;
3744 	for_each_netdev(net, dev) {
3745 		if (idx < s_idx)
3746 			goto cont;
3747 		if ((idev = in6_dev_get(dev)) == NULL)
3748 			goto cont;
3749 		err = inet6_fill_ifinfo(skb, idev, NETLINK_CB(cb->skb).pid,
3750 				cb->nlh->nlmsg_seq, RTM_NEWLINK, NLM_F_MULTI);
3751 		in6_dev_put(idev);
3752 		if (err <= 0)
3753 			break;
3754 cont:
3755 		idx++;
3756 	}
3757 	read_unlock(&dev_base_lock);
3758 	cb->args[0] = idx;
3759 
3760 	return skb->len;
3761 }
3762 
3763 void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
3764 {
3765 	struct sk_buff *skb;
3766 	struct net *net = dev_net(idev->dev);
3767 	int err = -ENOBUFS;
3768 
3769 	skb = nlmsg_new(inet6_if_nlmsg_size(), GFP_ATOMIC);
3770 	if (skb == NULL)
3771 		goto errout;
3772 
3773 	err = inet6_fill_ifinfo(skb, idev, 0, 0, event, 0);
3774 	if (err < 0) {
3775 		/* -EMSGSIZE implies BUG in inet6_if_nlmsg_size() */
3776 		WARN_ON(err == -EMSGSIZE);
3777 		kfree_skb(skb);
3778 		goto errout;
3779 	}
3780 	err = rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
3781 errout:
3782 	if (err < 0)
3783 		rtnl_set_sk_err(net, RTNLGRP_IPV6_IFADDR, err);
3784 }
3785 
3786 static inline size_t inet6_prefix_nlmsg_size(void)
3787 {
3788 	return NLMSG_ALIGN(sizeof(struct prefixmsg))
3789 	       + nla_total_size(sizeof(struct in6_addr))
3790 	       + nla_total_size(sizeof(struct prefix_cacheinfo));
3791 }
3792 
3793 static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
3794 			     struct prefix_info *pinfo, u32 pid, u32 seq,
3795 			     int event, unsigned int flags)
3796 {
3797 	struct prefixmsg *pmsg;
3798 	struct nlmsghdr *nlh;
3799 	struct prefix_cacheinfo	ci;
3800 
3801 	nlh = nlmsg_put(skb, pid, seq, event, sizeof(*pmsg), flags);
3802 	if (nlh == NULL)
3803 		return -EMSGSIZE;
3804 
3805 	pmsg = nlmsg_data(nlh);
3806 	pmsg->prefix_family = AF_INET6;
3807 	pmsg->prefix_pad1 = 0;
3808 	pmsg->prefix_pad2 = 0;
3809 	pmsg->prefix_ifindex = idev->dev->ifindex;
3810 	pmsg->prefix_len = pinfo->prefix_len;
3811 	pmsg->prefix_type = pinfo->type;
3812 	pmsg->prefix_pad3 = 0;
3813 	pmsg->prefix_flags = 0;
3814 	if (pinfo->onlink)
3815 		pmsg->prefix_flags |= IF_PREFIX_ONLINK;
3816 	if (pinfo->autoconf)
3817 		pmsg->prefix_flags |= IF_PREFIX_AUTOCONF;
3818 
3819 	NLA_PUT(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix);
3820 
3821 	ci.preferred_time = ntohl(pinfo->prefered);
3822 	ci.valid_time = ntohl(pinfo->valid);
3823 	NLA_PUT(skb, PREFIX_CACHEINFO, sizeof(ci), &ci);
3824 
3825 	return nlmsg_end(skb, nlh);
3826 
3827 nla_put_failure:
3828 	nlmsg_cancel(skb, nlh);
3829 	return -EMSGSIZE;
3830 }
3831 
3832 static void inet6_prefix_notify(int event, struct inet6_dev *idev,
3833 			 struct prefix_info *pinfo)
3834 {
3835 	struct sk_buff *skb;
3836 	struct net *net = dev_net(idev->dev);
3837 	int err = -ENOBUFS;
3838 
3839 	skb = nlmsg_new(inet6_prefix_nlmsg_size(), GFP_ATOMIC);
3840 	if (skb == NULL)
3841 		goto errout;
3842 
3843 	err = inet6_fill_prefix(skb, idev, pinfo, 0, 0, event, 0);
3844 	if (err < 0) {
3845 		/* -EMSGSIZE implies BUG in inet6_prefix_nlmsg_size() */
3846 		WARN_ON(err == -EMSGSIZE);
3847 		kfree_skb(skb);
3848 		goto errout;
3849 	}
3850 	err = rtnl_notify(skb, net, 0, RTNLGRP_IPV6_PREFIX, NULL, GFP_ATOMIC);
3851 errout:
3852 	if (err < 0)
3853 		rtnl_set_sk_err(net, RTNLGRP_IPV6_PREFIX, err);
3854 }
3855 
3856 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
3857 {
3858 	inet6_ifa_notify(event ? : RTM_NEWADDR, ifp);
3859 
3860 	switch (event) {
3861 	case RTM_NEWADDR:
3862 		/*
3863 		 * If the address was optimistic
3864 		 * we inserted the route at the start of
3865 		 * our DAD process, so we don't need
3866 		 * to do it again
3867 		 */
3868 		if (!(ifp->rt->rt6i_node))
3869 			ip6_ins_rt(ifp->rt);
3870 		if (ifp->idev->cnf.forwarding)
3871 			addrconf_join_anycast(ifp);
3872 		break;
3873 	case RTM_DELADDR:
3874 		if (ifp->idev->cnf.forwarding)
3875 			addrconf_leave_anycast(ifp);
3876 		addrconf_leave_solict(ifp->idev, &ifp->addr);
3877 		dst_hold(&ifp->rt->u.dst);
3878 		if (ip6_del_rt(ifp->rt))
3879 			dst_free(&ifp->rt->u.dst);
3880 		break;
3881 	}
3882 }
3883 
3884 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
3885 {
3886 	rcu_read_lock_bh();
3887 	if (likely(ifp->idev->dead == 0))
3888 		__ipv6_ifa_notify(event, ifp);
3889 	rcu_read_unlock_bh();
3890 }
3891 
3892 #ifdef CONFIG_SYSCTL
3893 
3894 static
3895 int addrconf_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
3896 			   void __user *buffer, size_t *lenp, loff_t *ppos)
3897 {
3898 	int *valp = ctl->data;
3899 	int val = *valp;
3900 	int ret;
3901 
3902 	ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
3903 
3904 	if (write)
3905 		addrconf_fixup_forwarding(ctl, valp, val);
3906 	return ret;
3907 }
3908 
3909 static int addrconf_sysctl_forward_strategy(ctl_table *table,
3910 					    int __user *name, int nlen,
3911 					    void __user *oldval,
3912 					    size_t __user *oldlenp,
3913 					    void __user *newval, size_t newlen)
3914 {
3915 	int *valp = table->data;
3916 	int val = *valp;
3917 	int new;
3918 
3919 	if (!newval || !newlen)
3920 		return 0;
3921 	if (newlen != sizeof(int))
3922 		return -EINVAL;
3923 	if (get_user(new, (int __user *)newval))
3924 		return -EFAULT;
3925 	if (new == *valp)
3926 		return 0;
3927 	if (oldval && oldlenp) {
3928 		size_t len;
3929 		if (get_user(len, oldlenp))
3930 			return -EFAULT;
3931 		if (len) {
3932 			if (len > table->maxlen)
3933 				len = table->maxlen;
3934 			if (copy_to_user(oldval, valp, len))
3935 				return -EFAULT;
3936 			if (put_user(len, oldlenp))
3937 				return -EFAULT;
3938 		}
3939 	}
3940 
3941 	*valp = new;
3942 	addrconf_fixup_forwarding(table, valp, val);
3943 	return 1;
3944 }
3945 
3946 static struct addrconf_sysctl_table
3947 {
3948 	struct ctl_table_header *sysctl_header;
3949 	ctl_table addrconf_vars[DEVCONF_MAX+1];
3950 	char *dev_name;
3951 } addrconf_sysctl __read_mostly = {
3952 	.sysctl_header = NULL,
3953 	.addrconf_vars = {
3954 		{
3955 			.ctl_name	=	NET_IPV6_FORWARDING,
3956 			.procname	=	"forwarding",
3957 			.data		=	&ipv6_devconf.forwarding,
3958 			.maxlen		=	sizeof(int),
3959 			.mode		=	0644,
3960 			.proc_handler	=	&addrconf_sysctl_forward,
3961 			.strategy	=	&addrconf_sysctl_forward_strategy,
3962 		},
3963 		{
3964 			.ctl_name	=	NET_IPV6_HOP_LIMIT,
3965 			.procname	=	"hop_limit",
3966 			.data		=	&ipv6_devconf.hop_limit,
3967 			.maxlen		=	sizeof(int),
3968 			.mode		=	0644,
3969 			.proc_handler	=	proc_dointvec,
3970 		},
3971 		{
3972 			.ctl_name	=	NET_IPV6_MTU,
3973 			.procname	=	"mtu",
3974 			.data		=	&ipv6_devconf.mtu6,
3975 			.maxlen		=	sizeof(int),
3976 			.mode		=	0644,
3977 			.proc_handler	=	&proc_dointvec,
3978 		},
3979 		{
3980 			.ctl_name	=	NET_IPV6_ACCEPT_RA,
3981 			.procname	=	"accept_ra",
3982 			.data		=	&ipv6_devconf.accept_ra,
3983 			.maxlen		=	sizeof(int),
3984 			.mode		=	0644,
3985 			.proc_handler	=	&proc_dointvec,
3986 		},
3987 		{
3988 			.ctl_name	=	NET_IPV6_ACCEPT_REDIRECTS,
3989 			.procname	=	"accept_redirects",
3990 			.data		=	&ipv6_devconf.accept_redirects,
3991 			.maxlen		=	sizeof(int),
3992 			.mode		=	0644,
3993 			.proc_handler	=	&proc_dointvec,
3994 		},
3995 		{
3996 			.ctl_name	=	NET_IPV6_AUTOCONF,
3997 			.procname	=	"autoconf",
3998 			.data		=	&ipv6_devconf.autoconf,
3999 			.maxlen		=	sizeof(int),
4000 			.mode		=	0644,
4001 			.proc_handler	=	&proc_dointvec,
4002 		},
4003 		{
4004 			.ctl_name	=	NET_IPV6_DAD_TRANSMITS,
4005 			.procname	=	"dad_transmits",
4006 			.data		=	&ipv6_devconf.dad_transmits,
4007 			.maxlen		=	sizeof(int),
4008 			.mode		=	0644,
4009 			.proc_handler	=	&proc_dointvec,
4010 		},
4011 		{
4012 			.ctl_name	=	NET_IPV6_RTR_SOLICITS,
4013 			.procname	=	"router_solicitations",
4014 			.data		=	&ipv6_devconf.rtr_solicits,
4015 			.maxlen		=	sizeof(int),
4016 			.mode		=	0644,
4017 			.proc_handler	=	&proc_dointvec,
4018 		},
4019 		{
4020 			.ctl_name	=	NET_IPV6_RTR_SOLICIT_INTERVAL,
4021 			.procname	=	"router_solicitation_interval",
4022 			.data		=	&ipv6_devconf.rtr_solicit_interval,
4023 			.maxlen		=	sizeof(int),
4024 			.mode		=	0644,
4025 			.proc_handler	=	&proc_dointvec_jiffies,
4026 			.strategy	=	&sysctl_jiffies,
4027 		},
4028 		{
4029 			.ctl_name	=	NET_IPV6_RTR_SOLICIT_DELAY,
4030 			.procname	=	"router_solicitation_delay",
4031 			.data		=	&ipv6_devconf.rtr_solicit_delay,
4032 			.maxlen		=	sizeof(int),
4033 			.mode		=	0644,
4034 			.proc_handler	=	&proc_dointvec_jiffies,
4035 			.strategy	=	&sysctl_jiffies,
4036 		},
4037 		{
4038 			.ctl_name	=	NET_IPV6_FORCE_MLD_VERSION,
4039 			.procname	=	"force_mld_version",
4040 			.data		=	&ipv6_devconf.force_mld_version,
4041 			.maxlen		=	sizeof(int),
4042 			.mode		=	0644,
4043 			.proc_handler	=	&proc_dointvec,
4044 		},
4045 #ifdef CONFIG_IPV6_PRIVACY
4046 		{
4047 			.ctl_name	=	NET_IPV6_USE_TEMPADDR,
4048 			.procname	=	"use_tempaddr",
4049 			.data		=	&ipv6_devconf.use_tempaddr,
4050 			.maxlen		=	sizeof(int),
4051 			.mode		=	0644,
4052 			.proc_handler	=	&proc_dointvec,
4053 		},
4054 		{
4055 			.ctl_name	=	NET_IPV6_TEMP_VALID_LFT,
4056 			.procname	=	"temp_valid_lft",
4057 			.data		=	&ipv6_devconf.temp_valid_lft,
4058 			.maxlen		=	sizeof(int),
4059 			.mode		=	0644,
4060 			.proc_handler	=	&proc_dointvec,
4061 		},
4062 		{
4063 			.ctl_name	=	NET_IPV6_TEMP_PREFERED_LFT,
4064 			.procname	=	"temp_prefered_lft",
4065 			.data		=	&ipv6_devconf.temp_prefered_lft,
4066 			.maxlen		=	sizeof(int),
4067 			.mode		=	0644,
4068 			.proc_handler	=	&proc_dointvec,
4069 		},
4070 		{
4071 			.ctl_name	=	NET_IPV6_REGEN_MAX_RETRY,
4072 			.procname	=	"regen_max_retry",
4073 			.data		=	&ipv6_devconf.regen_max_retry,
4074 			.maxlen		=	sizeof(int),
4075 			.mode		=	0644,
4076 			.proc_handler	=	&proc_dointvec,
4077 		},
4078 		{
4079 			.ctl_name	=	NET_IPV6_MAX_DESYNC_FACTOR,
4080 			.procname	=	"max_desync_factor",
4081 			.data		=	&ipv6_devconf.max_desync_factor,
4082 			.maxlen		=	sizeof(int),
4083 			.mode		=	0644,
4084 			.proc_handler	=	&proc_dointvec,
4085 		},
4086 #endif
4087 		{
4088 			.ctl_name	=	NET_IPV6_MAX_ADDRESSES,
4089 			.procname	=	"max_addresses",
4090 			.data		=	&ipv6_devconf.max_addresses,
4091 			.maxlen		=	sizeof(int),
4092 			.mode		=	0644,
4093 			.proc_handler	=	&proc_dointvec,
4094 		},
4095 		{
4096 			.ctl_name	=	NET_IPV6_ACCEPT_RA_DEFRTR,
4097 			.procname	=	"accept_ra_defrtr",
4098 			.data		=	&ipv6_devconf.accept_ra_defrtr,
4099 			.maxlen		=	sizeof(int),
4100 			.mode		=	0644,
4101 			.proc_handler	=	&proc_dointvec,
4102 		},
4103 		{
4104 			.ctl_name	=	NET_IPV6_ACCEPT_RA_PINFO,
4105 			.procname	=	"accept_ra_pinfo",
4106 			.data		=	&ipv6_devconf.accept_ra_pinfo,
4107 			.maxlen		=	sizeof(int),
4108 			.mode		=	0644,
4109 			.proc_handler	=	&proc_dointvec,
4110 		},
4111 #ifdef CONFIG_IPV6_ROUTER_PREF
4112 		{
4113 			.ctl_name	=	NET_IPV6_ACCEPT_RA_RTR_PREF,
4114 			.procname	=	"accept_ra_rtr_pref",
4115 			.data		=	&ipv6_devconf.accept_ra_rtr_pref,
4116 			.maxlen		=	sizeof(int),
4117 			.mode		=	0644,
4118 			.proc_handler	=	&proc_dointvec,
4119 		},
4120 		{
4121 			.ctl_name	=	NET_IPV6_RTR_PROBE_INTERVAL,
4122 			.procname	=	"router_probe_interval",
4123 			.data		=	&ipv6_devconf.rtr_probe_interval,
4124 			.maxlen		=	sizeof(int),
4125 			.mode		=	0644,
4126 			.proc_handler	=	&proc_dointvec_jiffies,
4127 			.strategy	=	&sysctl_jiffies,
4128 		},
4129 #ifdef CONFIG_IPV6_ROUTE_INFO
4130 		{
4131 			.ctl_name	=	NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN,
4132 			.procname	=	"accept_ra_rt_info_max_plen",
4133 			.data		=	&ipv6_devconf.accept_ra_rt_info_max_plen,
4134 			.maxlen		=	sizeof(int),
4135 			.mode		=	0644,
4136 			.proc_handler	=	&proc_dointvec,
4137 		},
4138 #endif
4139 #endif
4140 		{
4141 			.ctl_name	=	NET_IPV6_PROXY_NDP,
4142 			.procname	=	"proxy_ndp",
4143 			.data		=	&ipv6_devconf.proxy_ndp,
4144 			.maxlen		=	sizeof(int),
4145 			.mode		=	0644,
4146 			.proc_handler	=	&proc_dointvec,
4147 		},
4148 		{
4149 			.ctl_name	=	NET_IPV6_ACCEPT_SOURCE_ROUTE,
4150 			.procname	=	"accept_source_route",
4151 			.data		=	&ipv6_devconf.accept_source_route,
4152 			.maxlen		=	sizeof(int),
4153 			.mode		=	0644,
4154 			.proc_handler	=	&proc_dointvec,
4155 		},
4156 #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
4157 		{
4158 			.ctl_name	=	CTL_UNNUMBERED,
4159 			.procname       =       "optimistic_dad",
4160 			.data           =       &ipv6_devconf.optimistic_dad,
4161 			.maxlen         =       sizeof(int),
4162 			.mode           =       0644,
4163 			.proc_handler   =       &proc_dointvec,
4164 
4165 		},
4166 #endif
4167 #ifdef CONFIG_IPV6_MROUTE
4168 		{
4169 			.ctl_name	=	CTL_UNNUMBERED,
4170 			.procname	=	"mc_forwarding",
4171 			.data		=	&ipv6_devconf.mc_forwarding,
4172 			.maxlen		=	sizeof(int),
4173 			.mode		=	0644,
4174 			.proc_handler	=	&proc_dointvec,
4175 		},
4176 #endif
4177 		{
4178 			.ctl_name	=	0,	/* sentinel */
4179 		}
4180 	},
4181 };
4182 
4183 static int __addrconf_sysctl_register(struct net *net, char *dev_name,
4184 		int ctl_name, struct inet6_dev *idev, struct ipv6_devconf *p)
4185 {
4186 	int i;
4187 	struct addrconf_sysctl_table *t;
4188 
4189 #define ADDRCONF_CTL_PATH_DEV	3
4190 
4191 	struct ctl_path addrconf_ctl_path[] = {
4192 		{ .procname = "net", .ctl_name = CTL_NET, },
4193 		{ .procname = "ipv6", .ctl_name = NET_IPV6, },
4194 		{ .procname = "conf", .ctl_name = NET_IPV6_CONF, },
4195 		{ /* to be set */ },
4196 		{ },
4197 	};
4198 
4199 
4200 	t = kmemdup(&addrconf_sysctl, sizeof(*t), GFP_KERNEL);
4201 	if (t == NULL)
4202 		goto out;
4203 
4204 	for (i=0; t->addrconf_vars[i].data; i++) {
4205 		t->addrconf_vars[i].data += (char*)p - (char*)&ipv6_devconf;
4206 		t->addrconf_vars[i].extra1 = idev; /* embedded; no ref */
4207 		t->addrconf_vars[i].extra2 = net;
4208 	}
4209 
4210 	/*
4211 	 * Make a copy of dev_name, because '.procname' is regarded as const
4212 	 * by sysctl and we wouldn't want anyone to change it under our feet
4213 	 * (see SIOCSIFNAME).
4214 	 */
4215 	t->dev_name = kstrdup(dev_name, GFP_KERNEL);
4216 	if (!t->dev_name)
4217 		goto free;
4218 
4219 	addrconf_ctl_path[ADDRCONF_CTL_PATH_DEV].procname = t->dev_name;
4220 	addrconf_ctl_path[ADDRCONF_CTL_PATH_DEV].ctl_name = ctl_name;
4221 
4222 	t->sysctl_header = register_net_sysctl_table(net, addrconf_ctl_path,
4223 			t->addrconf_vars);
4224 	if (t->sysctl_header == NULL)
4225 		goto free_procname;
4226 
4227 	p->sysctl = t;
4228 	return 0;
4229 
4230 free_procname:
4231 	kfree(t->dev_name);
4232 free:
4233 	kfree(t);
4234 out:
4235 	return -ENOBUFS;
4236 }
4237 
4238 static void __addrconf_sysctl_unregister(struct ipv6_devconf *p)
4239 {
4240 	struct addrconf_sysctl_table *t;
4241 
4242 	if (p->sysctl == NULL)
4243 		return;
4244 
4245 	t = p->sysctl;
4246 	p->sysctl = NULL;
4247 	unregister_sysctl_table(t->sysctl_header);
4248 	kfree(t->dev_name);
4249 	kfree(t);
4250 }
4251 
4252 static void addrconf_sysctl_register(struct inet6_dev *idev)
4253 {
4254 	neigh_sysctl_register(idev->dev, idev->nd_parms, NET_IPV6,
4255 			      NET_IPV6_NEIGH, "ipv6",
4256 			      &ndisc_ifinfo_sysctl_change,
4257 			      NULL);
4258 	__addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name,
4259 			idev->dev->ifindex, idev, &idev->cnf);
4260 }
4261 
4262 static void addrconf_sysctl_unregister(struct inet6_dev *idev)
4263 {
4264 	__addrconf_sysctl_unregister(&idev->cnf);
4265 	neigh_sysctl_unregister(idev->nd_parms);
4266 }
4267 
4268 
4269 #endif
4270 
4271 static int addrconf_init_net(struct net *net)
4272 {
4273 	int err;
4274 	struct ipv6_devconf *all, *dflt;
4275 
4276 	err = -ENOMEM;
4277 	all = &ipv6_devconf;
4278 	dflt = &ipv6_devconf_dflt;
4279 
4280 	if (net != &init_net) {
4281 		all = kmemdup(all, sizeof(ipv6_devconf), GFP_KERNEL);
4282 		if (all == NULL)
4283 			goto err_alloc_all;
4284 
4285 		dflt = kmemdup(dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL);
4286 		if (dflt == NULL)
4287 			goto err_alloc_dflt;
4288 	}
4289 
4290 	net->ipv6.devconf_all = all;
4291 	net->ipv6.devconf_dflt = dflt;
4292 
4293 #ifdef CONFIG_SYSCTL
4294 	err = __addrconf_sysctl_register(net, "all", NET_PROTO_CONF_ALL,
4295 			NULL, all);
4296 	if (err < 0)
4297 		goto err_reg_all;
4298 
4299 	err = __addrconf_sysctl_register(net, "default", NET_PROTO_CONF_DEFAULT,
4300 			NULL, dflt);
4301 	if (err < 0)
4302 		goto err_reg_dflt;
4303 #endif
4304 	return 0;
4305 
4306 #ifdef CONFIG_SYSCTL
4307 err_reg_dflt:
4308 	__addrconf_sysctl_unregister(all);
4309 err_reg_all:
4310 	kfree(dflt);
4311 #endif
4312 err_alloc_dflt:
4313 	kfree(all);
4314 err_alloc_all:
4315 	return err;
4316 }
4317 
4318 static void addrconf_exit_net(struct net *net)
4319 {
4320 #ifdef CONFIG_SYSCTL
4321 	__addrconf_sysctl_unregister(net->ipv6.devconf_dflt);
4322 	__addrconf_sysctl_unregister(net->ipv6.devconf_all);
4323 #endif
4324 	if (net != &init_net) {
4325 		kfree(net->ipv6.devconf_dflt);
4326 		kfree(net->ipv6.devconf_all);
4327 	}
4328 }
4329 
4330 static struct pernet_operations addrconf_ops = {
4331 	.init = addrconf_init_net,
4332 	.exit = addrconf_exit_net,
4333 };
4334 
4335 /*
4336  *      Device notifier
4337  */
4338 
4339 int register_inet6addr_notifier(struct notifier_block *nb)
4340 {
4341 	return atomic_notifier_chain_register(&inet6addr_chain, nb);
4342 }
4343 
4344 EXPORT_SYMBOL(register_inet6addr_notifier);
4345 
4346 int unregister_inet6addr_notifier(struct notifier_block *nb)
4347 {
4348 	return atomic_notifier_chain_unregister(&inet6addr_chain,nb);
4349 }
4350 
4351 EXPORT_SYMBOL(unregister_inet6addr_notifier);
4352 
4353 
4354 static int addrconf_net_init(struct net *net)
4355 {
4356 	return 0;
4357 }
4358 
4359 static void addrconf_net_exit(struct net *net)
4360 {
4361 	struct net_device *dev;
4362 
4363 	rtnl_lock();
4364 	/* clean dev list */
4365 	for_each_netdev(net, dev) {
4366 		if (__in6_dev_get(dev) == NULL)
4367 			continue;
4368 		addrconf_ifdown(dev, 1);
4369 	}
4370 	addrconf_ifdown(net->loopback_dev, 2);
4371 	rtnl_unlock();
4372 }
4373 
4374 static struct pernet_operations addrconf_net_ops = {
4375 	.init = addrconf_net_init,
4376 	.exit = addrconf_net_exit,
4377 };
4378 
4379 /*
4380  *	Init / cleanup code
4381  */
4382 
4383 int __init addrconf_init(void)
4384 {
4385 	int err;
4386 
4387 	if ((err = ipv6_addr_label_init()) < 0) {
4388 		printk(KERN_CRIT "IPv6 Addrconf: cannot initialize default policy table: %d.\n",
4389 			err);
4390 		return err;
4391 	}
4392 
4393 	register_pernet_subsys(&addrconf_ops);
4394 
4395 	/* The addrconf netdev notifier requires that loopback_dev
4396 	 * has it's ipv6 private information allocated and setup
4397 	 * before it can bring up and give link-local addresses
4398 	 * to other devices which are up.
4399 	 *
4400 	 * Unfortunately, loopback_dev is not necessarily the first
4401 	 * entry in the global dev_base list of net devices.  In fact,
4402 	 * it is likely to be the very last entry on that list.
4403 	 * So this causes the notifier registry below to try and
4404 	 * give link-local addresses to all devices besides loopback_dev
4405 	 * first, then loopback_dev, which cases all the non-loopback_dev
4406 	 * devices to fail to get a link-local address.
4407 	 *
4408 	 * So, as a temporary fix, allocate the ipv6 structure for
4409 	 * loopback_dev first by hand.
4410 	 * Longer term, all of the dependencies ipv6 has upon the loopback
4411 	 * device and it being up should be removed.
4412 	 */
4413 	rtnl_lock();
4414 	if (!ipv6_add_dev(init_net.loopback_dev))
4415 		err = -ENOMEM;
4416 	rtnl_unlock();
4417 	if (err)
4418 		goto errlo;
4419 
4420 	err = register_pernet_device(&addrconf_net_ops);
4421 	if (err)
4422 		return err;
4423 
4424 	register_netdevice_notifier(&ipv6_dev_notf);
4425 
4426 	addrconf_verify(0);
4427 
4428 	err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo);
4429 	if (err < 0)
4430 		goto errout;
4431 
4432 	/* Only the first call to __rtnl_register can fail */
4433 	__rtnl_register(PF_INET6, RTM_NEWADDR, inet6_rtm_newaddr, NULL);
4434 	__rtnl_register(PF_INET6, RTM_DELADDR, inet6_rtm_deladdr, NULL);
4435 	__rtnl_register(PF_INET6, RTM_GETADDR, inet6_rtm_getaddr, inet6_dump_ifaddr);
4436 	__rtnl_register(PF_INET6, RTM_GETMULTICAST, NULL, inet6_dump_ifmcaddr);
4437 	__rtnl_register(PF_INET6, RTM_GETANYCAST, NULL, inet6_dump_ifacaddr);
4438 
4439 	ipv6_addr_label_rtnl_register();
4440 
4441 	return 0;
4442 errout:
4443 	unregister_netdevice_notifier(&ipv6_dev_notf);
4444 errlo:
4445 	unregister_pernet_subsys(&addrconf_ops);
4446 
4447 	return err;
4448 }
4449 
4450 void addrconf_cleanup(void)
4451 {
4452 	struct inet6_ifaddr *ifa;
4453 	int i;
4454 
4455 	unregister_netdevice_notifier(&ipv6_dev_notf);
4456 	unregister_pernet_device(&addrconf_net_ops);
4457 
4458 	unregister_pernet_subsys(&addrconf_ops);
4459 
4460 	rtnl_lock();
4461 
4462 	/*
4463 	 *	Check hash table.
4464 	 */
4465 	write_lock_bh(&addrconf_hash_lock);
4466 	for (i=0; i < IN6_ADDR_HSIZE; i++) {
4467 		for (ifa=inet6_addr_lst[i]; ifa; ) {
4468 			struct inet6_ifaddr *bifa;
4469 
4470 			bifa = ifa;
4471 			ifa = ifa->lst_next;
4472 			printk(KERN_DEBUG "bug: IPv6 address leakage detected: ifa=%p\n", bifa);
4473 			/* Do not free it; something is wrong.
4474 			   Now we can investigate it with debugger.
4475 			 */
4476 		}
4477 	}
4478 	write_unlock_bh(&addrconf_hash_lock);
4479 
4480 	del_timer(&addr_chk_timer);
4481 	rtnl_unlock();
4482 
4483 	unregister_pernet_subsys(&addrconf_net_ops);
4484 }
4485