Lines Matching defs:idev
125 static int addrconf_sysctl_register(struct inet6_dev *idev);
126 static void addrconf_sysctl_unregister(struct inet6_dev *idev);
128 static inline int addrconf_sysctl_register(struct inet6_dev *idev)
133 static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
141 static int ipv6_count_addresses(const struct inet6_dev *idev);
144 const struct inet6_dev *idev);
178 static void addrconf_dad_run(struct inet6_dev *idev, bool restart);
183 static void inet6_prefix_notify(int event, struct inet6_dev *idev,
304 static void addrconf_del_rs_timer(struct inet6_dev *idev)
306 if (del_timer(&idev->rs_timer))
307 __in6_dev_put(idev);
316 static void addrconf_mod_rs_timer(struct inet6_dev *idev,
319 if (!mod_timer(&idev->rs_timer, jiffies + when))
320 in6_dev_hold(idev);
331 static int snmp6_alloc_dev(struct inet6_dev *idev)
335 idev->stats.ipv6 = alloc_percpu(struct ipstats_mib);
336 if (!idev->stats.ipv6)
341 addrconf_stats = per_cpu_ptr(idev->stats.ipv6, i);
346 idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
348 if (!idev->stats.icmpv6dev)
350 idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
352 if (!idev->stats.icmpv6msgdev)
358 kfree(idev->stats.icmpv6dev);
360 free_percpu(idev->stats.ipv6);
474 struct inet6_dev *idev;
478 idev = __in6_dev_get(dev);
479 if (!idev) {
480 idev = ipv6_add_dev(dev);
481 if (IS_ERR(idev))
482 return idev;
486 ipv6_mc_up(idev);
487 return idev;
709 struct inet6_dev *idev;
739 idev = __in6_dev_get(dev);
740 if (!idev)
744 &idev->cnf,
789 static void dev_forward_change(struct inet6_dev *idev)
795 if (!idev)
797 dev = idev->dev;
798 if (idev->cnf.forwarding)
801 if (idev->cnf.forwarding) {
812 read_lock_bh(&idev->lock);
813 list_for_each_entry(ifa, &idev->addr_list, if_list) {
818 read_unlock_bh(&idev->lock);
824 if (idev->cnf.forwarding)
832 dev->ifindex, &idev->cnf);
839 struct inet6_dev *idev;
842 idev = __in6_dev_get(dev);
843 if (idev) {
844 int changed = (!idev->cnf.forwarding) ^ (!newf);
845 idev->cnf.forwarding = newf;
847 dev_forward_change(idev);
902 struct inet6_dev *idev;
905 idev = __in6_dev_get(dev);
906 if (idev) {
907 int changed = (!idev->cnf.ignore_routes_with_linkdown) ^ (!newf);
909 idev->cnf.ignore_routes_with_linkdown = newf;
915 &idev->cnf);
969 in6_dev_put(ifp->idev);
984 ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp)
993 list_for_each(p, &idev->addr_list) {
1016 if (!net_eq(dev_net(ifp->idev->dev), net))
1019 if (!dev || ifp->idev->dev == dev)
1049 ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg,
1054 struct net *net = dev_net(idev->dev);
1062 (!(idev->dev->flags & IFF_LOOPBACK) &&
1063 !netif_is_l3_master(idev->dev) &&
1067 if (idev->dead) {
1072 if (idev->cnf.disable_ipv6) {
1083 .i6vi_dev = idev,
1099 f6i = addrconf_f6i_alloc(net, idev, cfg->pfx, false, gfp_flags);
1106 neigh_parms_data_state_setall(idev->nd_parms);
1129 ifa->idev = idev;
1130 in6_dev_hold(idev);
1137 err = ipv6_add_addr_hash(idev->dev, ifa);
1143 write_lock(&idev->lock);
1146 ipv6_link_dev_addr(idev, ifa);
1149 list_add(&ifa->tmp_list, &idev->tempaddr_list);
1154 write_unlock(&idev->lock);
1164 if (ifa->idev)
1165 in6_dev_put(ifa->idev);
1202 struct inet6_dev *idev = ifp->idev;
1208 list_for_each_entry(ifa, &idev->addr_list, if_list) {
1244 ifp->idev->dev, 0, RTF_DEFAULT, true);
1247 ip6_del_rt(dev_net(ifp->idev->dev), f6i, false);
1279 write_lock_bh(&ifp->idev->lock);
1296 write_unlock_bh(&ifp->idev->lock);
1317 struct inet6_dev *idev = ifp->idev;
1328 write_lock_bh(&idev->lock);
1331 in6_dev_hold(idev);
1332 if (idev->cnf.use_tempaddr <= 0) {
1333 write_unlock_bh(&idev->lock);
1335 in6_dev_put(idev);
1340 if (ifp->regen_count++ >= idev->cnf.regen_max_retry) {
1341 idev->cnf.use_tempaddr = -1; /*XXX*/
1343 write_unlock_bh(&idev->lock);
1346 in6_dev_put(idev);
1356 regen_advance = idev->cnf.regen_max_retry *
1357 idev->cnf.dad_transmits *
1358 max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
1361 * idev->desync_factor if it's larger
1363 cnf_temp_preferred_lft = READ_ONCE(idev->cnf.temp_prefered_lft);
1365 idev->cnf.max_desync_factor,
1368 if (unlikely(idev->desync_factor > max_desync_factor)) {
1370 get_random_bytes(&idev->desync_factor,
1371 sizeof(idev->desync_factor));
1372 idev->desync_factor %= max_desync_factor;
1374 idev->desync_factor = 0;
1380 idev->cnf.temp_valid_lft + age);
1381 cfg.preferred_lft = cnf_temp_preferred_lft + age - idev->desync_factor;
1388 write_unlock_bh(&idev->lock);
1400 in6_dev_put(idev);
1413 ift = ipv6_add_addr(idev, &cfg, block, NULL);
1416 in6_dev_put(idev);
1418 write_lock_bh(&idev->lock);
1430 in6_dev_put(idev);
1482 struct inet6_dev *idev)
1485 if (!idev)
1487 if (!net->ipv6.devconf_all->optimistic_dad && !idev->cnf.optimistic_dad)
1489 if (!net->ipv6.devconf_all->use_optimistic && !idev->cnf.use_optimistic)
1499 struct inet6_dev *idev)
1502 if (!idev)
1504 if (!net->ipv6.devconf_all->optimistic_dad && !idev->cnf.optimistic_dad)
1577 if (!ipv6_use_optimistic_addr(net, score->ifa->idev))
1595 dst->ifindex == score->ifa->idev->dev->ifindex);
1601 score->ifa->idev->dev->ifindex) == dst->label;
1610 score->ifa->idev->cnf.use_tempaddr >= 2;
1649 struct inet6_dev *idev,
1655 list_for_each_entry_rcu(score->ifa, &idev->addr_list, if_list) {
1677 idev->dev->name);
1726 struct inet6_dev *idev;
1728 idev = __in6_dev_get(dst_dev);
1729 if (idev)
1730 hiscore_idx = __ipv6_dev_get_saddr(net, dst, idev,
1733 idev = __in6_dev_get(master);
1734 if (idev)
1735 hiscore_idx = __ipv6_dev_get_saddr(net, dst, idev,
1747 struct inet6_dev *idev;
1783 idev = __in6_dev_get(dst_dev);
1786 (idev && idev->cnf.use_oif_addrs_only)) {
1792 if (idev)
1793 hiscore_idx = __ipv6_dev_get_saddr(net, &dst, idev, scores, hiscore_idx);
1820 idev = __in6_dev_get(dev);
1821 if (!idev)
1823 hiscore_idx = __ipv6_dev_get_saddr(net, &dst, idev, scores, hiscore_idx);
1839 int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
1845 list_for_each_entry_reverse(ifp, &idev->addr_list, if_list) {
1861 struct inet6_dev *idev;
1865 idev = __in6_dev_get(dev);
1866 if (idev) {
1867 read_lock_bh(&idev->lock);
1868 err = __ipv6_get_lladdr(idev, addr, banned_flags);
1869 read_unlock_bh(&idev->lock);
1875 static int ipv6_count_addresses(const struct inet6_dev *idev)
1881 list_for_each_entry_rcu(ifp, &idev->addr_list, if_list)
1921 ndev = ifp->idev->dev;
1964 const struct inet6_dev *idev;
1968 idev = __in6_dev_get(dev);
1969 if (idev) {
1970 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
1985 const struct inet6_dev *idev;
1990 idev = __in6_dev_get(dev);
1991 if (idev) {
1992 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
2027 if (!net_eq(dev_net(ifp->idev->dev), net))
2030 if (!dev || ifp->idev->dev == dev ||
2095 struct inet6_dev *idev = ifp->idev;
2096 struct net *net = dev_net(ifp->idev->dev);
2104 ifp->idev->dev->name, &ifp->addr, eth_hdr(skb)->h_source);
2123 ifp->idev->dev->name);
2129 idev))
2134 if (idev->cnf.max_addresses &&
2135 ipv6_count_addresses(idev) >=
2136 idev->cnf.max_addresses)
2140 ifp->idev->dev->name);
2142 ifp2 = ipv6_add_addr(idev, &cfg, false, NULL);
2180 void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
2184 if (idev->dev->flags&(IFF_LOOPBACK|IFF_NOARP))
2188 __ipv6_dev_mc_dec(idev, &maddr);
2201 __ipv6_dev_ac_inc(ifp->idev, &addr);
2214 __ipv6_dev_ac_dec(ifp->idev, &addr);
2336 static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)
2341 read_lock_bh(&idev->lock);
2342 list_for_each_entry_reverse(ifp, &idev->addr_list, if_list) {
2351 read_unlock_bh(&idev->lock);
2490 struct inet6_dev *idev;
2494 idev = ipv6_find_idev(dev);
2495 if (IS_ERR(idev))
2496 return idev;
2498 if (idev->cnf.disable_ipv6)
2505 return idev;
2508 static void manage_tempaddrs(struct inet6_dev *idev,
2516 read_lock_bh(&idev->lock);
2518 list_for_each_entry(ift, &idev->tempaddr_list, tmp_list) {
2533 max_valid = idev->cnf.temp_valid_lft - age;
2537 max_prefered = idev->cnf.temp_prefered_lft -
2538 idev->desync_factor - age;
2567 if (list_empty(&idev->tempaddr_list) && (valid_lft || prefered_lft))
2570 if (create && idev->cnf.use_tempaddr > 0) {
2574 read_unlock_bh(&idev->lock);
2577 read_unlock_bh(&idev->lock);
2581 static bool is_addr_mode_generate_stable(struct inet6_dev *idev)
2583 return idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_STABLE_PRIVACY ||
2584 idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_RANDOM;
2919 struct inet6_dev *idev;
2941 idev = addrconf_add_dev(dev);
2942 if (IS_ERR(idev))
2943 return PTR_ERR(idev);
2973 ifp = ipv6_add_addr(idev, cfg, true, extack);
2993 manage_tempaddrs(idev, ifp, cfg->valid_lft,
3010 struct inet6_dev *idev;
3020 idev = __in6_dev_get(dev);
3021 if (!idev)
3024 read_lock_bh(&idev->lock);
3025 list_for_each_entry(ifp, &idev->addr_list, if_list) {
3029 read_unlock_bh(&idev->lock);
3033 manage_tempaddrs(idev, ifp, 0, 0, false,
3044 read_unlock_bh(&idev->lock);
3092 static void add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
3105 ifp = ipv6_add_addr(idev, &cfg, true, NULL);
3110 rt_genid_bump_ipv6(dev_net(idev->dev));
3117 static void sit_add_v4_addrs(struct inet6_dev *idev)
3121 struct net *net = dev_net(idev->dev);
3128 memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4);
3130 if (idev->dev->flags&IFF_POINTOPOINT) {
3131 if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
3144 add_addr(idev, &addr, plen, scope);
3145 addrconf_prefix_route(&addr, plen, 0, idev->dev, 0, pflags,
3162 if (idev->dev->flags&IFF_POINTOPOINT)
3167 add_addr(idev, &addr, plen, flag);
3168 addrconf_prefix_route(&addr, plen, 0, idev->dev,
3178 struct inet6_dev *idev;
3184 idev = ipv6_find_idev(dev);
3185 if (IS_ERR(idev)) {
3190 add_addr(idev, &in6addr_loopback, 128, IFA_HOST);
3193 void addrconf_add_linklocal(struct inet6_dev *idev,
3207 if ((dev_net(idev->dev)->ipv6.devconf_all->optimistic_dad ||
3208 idev->cnf.optimistic_dad) &&
3209 !dev_net(idev->dev)->ipv6.devconf_all->forwarding)
3213 ifp = ipv6_add_addr(idev, &cfg, true, NULL);
3215 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, 0, idev->dev,
3241 const struct inet6_dev *idev)
3259 struct net *net = dev_net(idev->dev);
3263 if (idev->cnf.stable_secret.initialized)
3264 secret = idev->cnf.stable_secret.secret;
3276 memcpy(data.hwaddr, idev->dev->perm_addr, idev->dev->addr_len);
3292 if (dad_count > dev_net(idev->dev)->ipv6.sysctl.idgen_retries)
3301 static void ipv6_gen_mode_random_init(struct inet6_dev *idev)
3303 struct ipv6_stable_secret *s = &idev->cnf.stable_secret;
3307 s = &idev->cnf.stable_secret;
3312 static void addrconf_addr_gen(struct inet6_dev *idev, bool prefix_route)
3317 if (netif_is_l3_master(idev->dev))
3321 if (idev->dev->flags & IFF_SLAVE)
3326 switch (idev->cnf.addr_gen_mode) {
3328 ipv6_gen_mode_random_init(idev);
3331 if (!ipv6_generate_stable_address(&addr, 0, idev))
3332 addrconf_add_linklocal(idev, &addr,
3335 addrconf_prefix_route(&addr, 64, 0, idev->dev,
3343 if (ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) == 0)
3344 addrconf_add_linklocal(idev, &addr, 0);
3346 addrconf_prefix_route(&addr, 64, 0, idev->dev,
3358 struct inet6_dev *idev;
3375 idev = __in6_dev_get(dev);
3376 if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
3378 ipv6_mc_up(idev);
3382 idev = addrconf_add_dev(dev);
3383 if (IS_ERR(idev))
3388 idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_EUI64)
3389 idev->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_RANDOM;
3391 addrconf_addr_gen(idev, false);
3397 struct inet6_dev *idev;
3407 idev = ipv6_find_idev(dev);
3408 if (IS_ERR(idev)) {
3414 addrconf_addr_gen(idev, false);
3418 sit_add_v4_addrs(idev);
3428 struct inet6_dev *idev;
3432 idev = ipv6_find_idev(dev);
3433 if (IS_ERR(idev)) {
3438 addrconf_addr_gen(idev, true);
3445 struct inet6_dev *idev,
3455 f6i = addrconf_f6i_alloc(net, idev, &ifp->addr, false,
3471 ifp->rt_priority, idev->dev, 0, 0,
3484 struct inet6_dev *idev;
3486 idev = __in6_dev_get(dev);
3487 if (!idev)
3490 write_lock_bh(&idev->lock);
3492 list_for_each_entry_safe(ifp, tmp, &idev->addr_list, if_list) {
3494 fixup_permanent_addr(net, idev, ifp) < 0) {
3495 write_unlock_bh(&idev->lock);
3498 write_lock_bh(&idev->lock);
3501 idev->dev->name, &ifp->addr);
3505 write_unlock_bh(&idev->lock);
3514 struct inet6_dev *idev = __in6_dev_get(dev);
3521 if (!idev && dev->mtu >= IPV6_MIN_MTU) {
3522 idev = ipv6_add_dev(dev);
3523 if (IS_ERR(idev))
3524 return notifier_from_errno(PTR_ERR(idev));
3535 if (idev) {
3537 idev->cnf.mtu6 = dev->mtu;
3541 /* allocate new idev */
3542 idev = ipv6_add_dev(dev);
3543 if (IS_ERR(idev))
3547 if (!(idev->if_flags & IF_READY))
3557 if (idev && idev->cnf.disable_ipv6)
3571 if (!idev && dev->mtu >= IPV6_MIN_MTU)
3572 idev = ipv6_add_dev(dev);
3574 if (!IS_ERR_OR_NULL(idev)) {
3575 idev->if_flags |= IF_READY;
3585 if (!IS_ERR_OR_NULL(idev)) {
3586 if (idev->if_flags & IF_READY) {
3592 ipv6_mc_up(idev);
3595 addrconf_dad_run(idev, true);
3599 idev->if_flags |= IF_READY;
3628 if (!IS_ERR_OR_NULL(idev)) {
3630 addrconf_dad_run(idev, false);
3638 * reflected in the idev as well as routers.
3640 if (idev->cnf.mtu6 != dev->mtu &&
3643 idev->cnf.mtu6 = dev->mtu;
3645 idev->tstamp = jiffies;
3646 inet6_ifinfo_notify(RTM_NEWLINK, idev);
3666 if (idev) {
3667 snmp6_unregister_dev(idev);
3668 addrconf_sysctl_unregister(idev);
3669 err = addrconf_sysctl_register(idev);
3672 err = snmp6_register_dev(idev);
3674 addrconf_sysctl_unregister(idev);
3682 if (idev)
3709 struct inet6_dev *idev;
3712 idev = __in6_dev_get(dev);
3715 ipv6_mc_remap(idev);
3717 ipv6_mc_unmap(idev);
3730 struct inet6_dev *idev;
3741 idev = __in6_dev_get(dev);
3742 if (!idev)
3750 idev->dead = 1;
3756 snmp6_unregister_dev(idev);
3763 if (!unregister && !idev->cnf.disable_ipv6) {
3768 _keep_addr = idev->cnf.keep_addr_on_down;
3780 if (ifa->idev == idev) {
3796 write_lock_bh(&idev->lock);
3798 addrconf_del_rs_timer(idev);
3803 was_ready = idev->if_flags & IF_READY;
3805 idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);
3808 while (!list_empty(&idev->tempaddr_list)) {
3809 ifa = list_first_entry(&idev->tempaddr_list,
3812 write_unlock_bh(&idev->lock);
3821 write_lock_bh(&idev->lock);
3824 list_for_each_entry(ifa, &idev->addr_list, if_list)
3826 write_unlock_bh(&idev->lock);
3866 if (idev->cnf.forwarding)
3868 addrconf_leave_solict(ifa->idev, &ifa->addr);
3872 write_lock_bh(&idev->lock);
3874 write_unlock_bh(&idev->lock);
3881 ipv6_ac_destroy_dev(idev);
3882 ipv6_mc_destroy_dev(idev);
3884 ipv6_mc_down(idev);
3887 idev->tstamp = jiffies;
3891 addrconf_sysctl_unregister(idev);
3892 neigh_parms_release(&nd_tbl, idev->nd_parms);
3894 in6_dev_put(idev);
3901 struct inet6_dev *idev = from_timer(idev, t, rs_timer);
3902 struct net_device *dev = idev->dev;
3905 write_lock(&idev->lock);
3906 if (idev->dead || !(idev->if_flags & IF_READY))
3909 if (!ipv6_accept_ra(idev))
3913 if (idev->if_flags & IF_RA_RCVD)
3916 if (idev->rs_probes++ < idev->cnf.rtr_solicits || idev->cnf.rtr_solicits < 0) {
3917 write_unlock(&idev->lock);
3924 write_lock(&idev->lock);
3925 idev->rs_interval = rfc3315_s14_backoff_update(
3926 idev->rs_interval, idev->cnf.rtr_solicit_max_interval);
3928 addrconf_mod_rs_timer(idev, (idev->rs_probes ==
3929 idev->cnf.rtr_solicits) ?
3930 idev->cnf.rtr_solicit_delay :
3931 idev->rs_interval);
3937 pr_debug("%s: no IPv6 routers present\n", idev->dev->name);
3941 write_unlock(&idev->lock);
3943 in6_dev_put(idev);
3952 struct inet6_dev *idev = ifp->idev;
3958 rand_num = prandom_u32() % (idev->cnf.rtr_solicit_delay ? : 1);
3961 if (idev->cnf.enhanced_dad ||
3962 dev_net(idev->dev)->ipv6.devconf_all->enhanced_dad) {
3968 ifp->dad_probes = idev->cnf.dad_transmits;
3974 struct inet6_dev *idev = ifp->idev;
3975 struct net_device *dev = idev->dev;
3983 read_lock_bh(&idev->lock);
3991 idev->cnf.accept_dad < 1) ||
4002 read_unlock_bh(&idev->lock);
4008 if (!(idev->if_flags & IF_READY)) {
4010 read_unlock_bh(&idev->lock);
4027 if (ipv6_use_optimistic_addr(net, idev)) {
4038 read_unlock_bh(&idev->lock);
4063 struct inet6_dev *idev = ifp->idev;
4083 if ((dev_net(idev->dev)->ipv6.devconf_all->accept_dad > 1 ||
4084 idev->cnf.accept_dad > 1) &&
4085 !idev->cnf.disable_ipv6 &&
4092 if (!ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) &&
4095 idev->cnf.disable_ipv6 = 1;
4098 ifp->idev->dev->name);
4112 addrconf_ifdown(idev->dev, false);
4119 write_lock_bh(&idev->lock);
4120 if (idev->dead || !(idev->if_flags & IF_READY)) {
4121 write_unlock_bh(&idev->lock);
4128 write_unlock_bh(&idev->lock);
4145 write_unlock_bh(&idev->lock);
4154 max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME),
4157 write_unlock_bh(&idev->lock);
4161 ndisc_send_ns(ifp->idev->dev, &ifp->addr, &mcaddr, &in6addr_any,
4168 /* ifp->idev must be at least read locked */
4172 struct inet6_dev *idev = ifp->idev;
4174 list_for_each_entry_reverse(ifpiter, &idev->addr_list, if_list) {
4189 struct net_device *dev = ifp->idev->dev;
4205 read_lock_bh(&ifp->idev->lock);
4208 ipv6_accept_ra(ifp->idev) &&
4209 ifp->idev->cnf.rtr_solicits != 0 &&
4212 read_unlock_bh(&ifp->idev->lock);
4218 ipv6_mc_dad_complete(ifp->idev);
4222 (ifp->idev->cnf.ndisc_notify ||
4225 /*router=*/ !!ifp->idev->cnf.forwarding,
4240 write_lock_bh(&ifp->idev->lock);
4242 ifp->idev->rs_interval = rfc3315_s14_backoff_init(
4243 ifp->idev->cnf.rtr_solicit_interval);
4244 ifp->idev->rs_probes = 1;
4245 ifp->idev->if_flags |= IF_RS_SENT;
4246 addrconf_mod_rs_timer(ifp->idev, ifp->idev->rs_interval);
4248 write_unlock_bh(&ifp->idev->lock);
4261 static void addrconf_dad_run(struct inet6_dev *idev, bool restart)
4265 read_lock_bh(&idev->lock);
4266 list_for_each_entry(ifp, &idev->addr_list, if_list) {
4276 read_unlock_bh(&idev->lock);
4302 if (!net_eq(dev_net(ifa->idev->dev), net))
4326 if (!net_eq(dev_net(ifa->idev->dev), net))
4336 if (!net_eq(dev_net(ifa->idev->dev), net))
4372 ifp->idev->dev->ifindex,
4376 ifp->idev->dev->name);
4426 if (!net_eq(dev_net(ifp->idev->dev), net))
4466 if (!net_eq(dev_net(ifp->idev->dev), net))
4560 unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
4561 ifp->idev->cnf.dad_transmits *
4562 max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
4692 ifp->idev->dev, 0, RTF_DEFAULT, true);
4699 ip6_del_rt(dev_net(ifp->idev->dev), f6i, false);
4704 ifp->rt_priority, ifp->idev->dev,
4795 ifp->rt_priority, ifp->idev->dev,
4804 ifp->rt_priority, ifp->idev->dev,
4811 write_lock_bh(&ifp->idev->lock);
4813 write_unlock_bh(&ifp->idev->lock);
4827 manage_tempaddrs(ifp->idev, ifp, cfg->valid_lft,
4847 struct inet6_dev *idev;
4893 idev = ipv6_find_idev(dev);
4894 if (IS_ERR(idev))
4895 return PTR_ERR(idev);
4897 if (!ipv6_allow_optimistic_dad(net, idev))
5002 ifa->idev->dev->ifindex);
5063 int ifindex = ifmca->idev->dev->ifindex;
5126 static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
5135 read_lock_bh(&idev->lock);
5142 list_for_each_entry(ifa, &idev->addr_list, if_list) {
5158 for (ifmca = idev->mc_list; ifmca;
5170 for (ifaca = idev->ac_list; ifaca;
5182 read_unlock_bh(&idev->lock);
5259 struct inet6_dev *idev;
5280 idev = __in6_dev_get(dev);
5281 if (idev) {
5282 err = in6_dump_addrs(idev, skb, cb, s_ip_idx,
5301 idev = __in6_dev_get(dev);
5302 if (!idev)
5305 if (in6_dump_addrs(idev, skb, cb, s_ip_idx,
5467 struct net *net = dev_net(ifa->idev->dev);
5631 static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
5636 __snmp6_fill_stats64(stats, idev->stats.ipv6, bytes,
5640 __snmp6_fill_statsdev(stats, idev->stats.icmpv6dev->mibs, bytes);
5645 static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev,
5651 if (nla_put_u32(skb, IFLA_INET6_FLAGS, idev->if_flags))
5654 ci.tstamp = cstamp_delta(idev->tstamp);
5655 ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time);
5656 ci.retrans_time = jiffies_to_msecs(NEIGH_VAR(idev->nd_parms, RETRANS_TIME));
5662 ipv6_store_devconf(&idev->cnf, nla_data(nla), nla_len(nla));
5672 snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_STATS, nla_len(nla));
5677 snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_ICMP6STATS, nla_len(nla));
5682 read_lock_bh(&idev->lock);
5683 memcpy(nla_data(nla), idev->token.s6_addr, nla_len(nla));
5684 read_unlock_bh(&idev->lock);
5686 if (nla_put_u8(skb, IFLA_INET6_ADDR_GEN_MODE, idev->cnf.addr_gen_mode))
5707 struct inet6_dev *idev = __in6_dev_get(dev);
5709 if (!idev)
5712 if (inet6_fill_ifla6_attrs(skb, idev, ext_filter_mask) < 0)
5718 static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token)
5721 struct net_device *dev = idev->dev;
5731 if (!ipv6_accept_ra(idev))
5733 if (idev->cnf.rtr_solicits == 0)
5736 write_lock_bh(&idev->lock);
5739 memcpy(idev->token.s6_addr + 8, token->s6_addr + 8, 8);
5741 write_unlock_bh(&idev->lock);
5747 if (!idev->dead && (idev->if_flags & IF_READY) &&
5758 write_lock_bh(&idev->lock);
5761 idev->if_flags |= IF_RS_SENT;
5762 idev->rs_interval = rfc3315_s14_backoff_init(
5763 idev->cnf.rtr_solicit_interval);
5764 idev->rs_probes = 1;
5765 addrconf_mod_rs_timer(idev, idev->rs_interval);
5769 list_for_each_entry(ifp, &idev->addr_list, if_list) {
5778 write_unlock_bh(&idev->lock);
5779 inet6_ifinfo_notify(RTM_NEWLINK, idev);
5799 static int check_stable_privacy(struct inet6_dev *idev, struct net *net,
5803 !idev->cnf.stable_secret.initialized &&
5813 struct inet6_dev *idev = NULL;
5817 idev = __in6_dev_get(dev);
5818 if (!idev)
5835 if (dev && check_stable_privacy(idev, dev_net(dev), mode) < 0)
5844 struct inet6_dev *idev = __in6_dev_get(dev);
5848 if (!idev)
5855 err = inet6_set_iftoken(idev, nla_data(tb[IFLA_INET6_TOKEN]));
5863 idev->cnf.addr_gen_mode = mode;
5869 static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev,
5872 struct net_device *dev = idev->dev;
5902 if (inet6_fill_ifla6_attrs(skb, idev, 0) < 0)
5945 struct inet6_dev *idev;
5968 idev = __in6_dev_get(dev);
5969 if (!idev)
5971 if (inet6_fill_ifinfo(skb, idev,
5988 void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
5991 struct net *net = dev_net(idev->dev);
5998 err = inet6_fill_ifinfo(skb, idev, 0, 0, event, 0);
6019 static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
6035 pmsg->prefix_ifindex = idev->dev->ifindex;
6055 static void inet6_prefix_notify(int event, struct inet6_dev *idev,
6059 struct net *net = dev_net(idev->dev);
6066 err = inet6_fill_prefix(skb, idev, pinfo, 0, 0, event, 0);
6082 struct net *net = dev_net(ifp->idev->dev);
6101 } else if (!ifp->rt && (ifp->idev->dev->flags & IFF_UP)) {
6103 &ifp->addr, ifp->idev->dev->name);
6106 if (ifp->idev->cnf.forwarding)
6110 ifp->rt_priority, ifp->idev->dev,
6114 if (ifp->idev->cnf.forwarding)
6116 addrconf_leave_solict(ifp->idev, &ifp->addr);
6121 ifp->idev->dev, 0, 0,
6139 if (likely(ifp->idev->dead == 0))
6156 * ctl->data points to idev->cnf.forwarding, we should
6174 struct inet6_dev *idev = ctl->extra1;
6180 lctl.extra2 = idev ? &idev->dev->mtu : NULL;
6185 static void dev_disable_change(struct inet6_dev *idev)
6189 if (!idev || !idev->dev)
6192 netdev_notifier_info_init(&info, idev->dev);
6193 if (idev->cnf.disable_ipv6)
6202 struct inet6_dev *idev;
6205 idev = __in6_dev_get(dev);
6206 if (idev) {
6207 int changed = (!idev->cnf.disable_ipv6) ^ (!newf);
6208 idev->cnf.disable_ipv6 = newf;
6210 dev_disable_change(idev);
6252 * ctl->data points to idev->cnf.disable_ipv6, we should
6295 struct inet6_dev *idev = ctl->extra1;
6299 idev->dev->ifindex,
6300 &idev->cnf);
6314 struct inet6_dev *idev = (struct inet6_dev *)ctl->extra1;
6337 if (idev) {
6338 if (check_stable_privacy(idev, net, new_val) < 0) {
6343 if (idev->cnf.addr_gen_mode != new_val) {
6344 idev->cnf.addr_gen_mode = new_val;
6345 addrconf_dev_config(idev->dev);
6352 idev = __in6_dev_get(dev);
6353 if (idev &&
6354 idev->cnf.addr_gen_mode != new_val) {
6355 idev->cnf.addr_gen_mode = new_val;
6356 addrconf_dev_config(idev->dev);
6417 struct inet6_dev *idev = __in6_dev_get(dev);
6419 if (idev) {
6420 idev->cnf.addr_gen_mode =
6425 struct inet6_dev *idev = ctl->extra1;
6427 idev->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
6448 /* ctl->data points to idev->cnf.ignore_routes_when_linkdown
6475 void addrconf_disable_policy_idev(struct inet6_dev *idev, int val)
6479 read_lock_bh(&idev->lock);
6480 list_for_each_entry(ifa, &idev->addr_list, if_list) {
6501 read_unlock_bh(&idev->lock);
6507 struct inet6_dev *idev;
6525 idev = __in6_dev_get(dev);
6526 if (idev)
6527 addrconf_disable_policy_idev(idev, val);
6530 idev = (struct inet6_dev *)ctl->extra1;
6531 addrconf_disable_policy_idev(idev, val);
6959 struct inet6_dev *idev, struct ipv6_devconf *p)
6976 table[i].extra1 = idev; /* embedded; no ref */
6992 ifindex = idev->dev->ifindex;
7019 static int addrconf_sysctl_register(struct inet6_dev *idev)
7023 if (!sysctl_dev_name_is_allowed(idev->dev->name))
7026 err = neigh_sysctl_register(idev->dev, idev->nd_parms,
7030 err = __addrconf_sysctl_register(dev_net(idev->dev), idev->dev->name,
7031 idev, &idev->cnf);
7033 neigh_sysctl_unregister(idev->nd_parms);
7038 static void addrconf_sysctl_unregister(struct inet6_dev *idev)
7040 __addrconf_sysctl_unregister(dev_net(idev->dev), &idev->cnf,
7041 idev->dev->ifindex);
7042 neigh_sysctl_unregister(idev->nd_parms);
7147 struct inet6_dev *idev;
7186 idev = ipv6_add_dev(init_net.loopback_dev);
7188 if (IS_ERR(idev)) {
7189 err = PTR_ERR(idev);