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