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