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