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