Showing error 1488

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: net/ipv6/addrconf.c
Line in file: 2970
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-05-21 20:30:05 UTC


Source:

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