Lines Matching refs:ifa
180 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
181 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
792 struct inet6_ifaddr *ifa;
813 list_for_each_entry(ifa, &idev->addr_list, if_list) {
814 if (ifa->flags&IFA_F_TENTATIVE)
816 list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
821 ifa = list_first_entry(&tmp_addr_list,
823 list_del(&ifa->if_list_aux);
825 addrconf_join_anycast(ifa);
827 addrconf_leave_anycast(ifa);
972 pr_notice("delayed DAD work was pending while freeing ifa=%p\n",
994 struct inet6_ifaddr *ifa
996 if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr))
1026 static int ipv6_add_addr_hash(struct net_device *dev, struct inet6_ifaddr *ifa)
1028 unsigned int hash = inet6_addr_hash(dev_net(dev), &ifa->addr);
1034 if (ipv6_chk_same_addr(dev_net(dev), &ifa->addr, dev, hash)) {
1038 hlist_add_head_rcu(&ifa->addr_lst, &inet6_addr_lst[hash]);
1055 struct inet6_ifaddr *ifa = NULL;
1093 ifa = kzalloc(sizeof(*ifa), gfp_flags);
1094 if (!ifa) {
1108 ifa->addr = *cfg->pfx;
1110 ifa->peer_addr = *cfg->peer_pfx;
1112 spin_lock_init(&ifa->lock);
1113 INIT_DELAYED_WORK(&ifa->dad_work, addrconf_dad_work);
1114 INIT_HLIST_NODE(&ifa->addr_lst);
1115 ifa->scope = cfg->scope;
1116 ifa->prefix_len = cfg->plen;
1117 ifa->rt_priority = cfg->rt_priority;
1118 ifa->flags = cfg->ifa_flags;
1121 ifa->flags |= IFA_F_TENTATIVE;
1122 ifa->valid_lft = cfg->valid_lft;
1123 ifa->prefered_lft = cfg->preferred_lft;
1124 ifa->cstamp = ifa->tstamp = jiffies;
1125 ifa->tokenized = false;
1127 ifa->rt = f6i;
1129 ifa->idev = idev;
1133 refcount_set(&ifa->refcnt, 1);
1137 err = ipv6_add_addr_hash(idev->dev, ifa);
1146 ipv6_link_dev_addr(idev, ifa);
1148 if (ifa->flags&IFA_F_TEMPORARY) {
1149 list_add(&ifa->tmp_list, &idev->tempaddr_list);
1150 in6_ifa_hold(ifa);
1153 in6_ifa_hold(ifa);
1158 inet6addr_notifier_call_chain(NETDEV_UP, ifa);
1163 if (ifa) {
1164 if (ifa->idev)
1165 in6_dev_put(ifa->idev);
1166 kfree(ifa);
1168 ifa = ERR_PTR(err);
1171 return ifa;
1201 struct inet6_ifaddr *ifa;
1208 list_for_each_entry(ifa, &idev->addr_list, if_list) {
1209 if (ifa == ifp)
1211 if (ifa->prefix_len != ifp->prefix_len ||
1212 !ipv6_prefix_equal(&ifa->addr, &ifp->addr,
1215 if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE))
1220 spin_lock(&ifa->lock);
1222 lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ);
1228 if (time_before(*expires, ifa->tstamp + lifetime * HZ))
1229 *expires = ifa->tstamp + lifetime * HZ;
1230 spin_unlock(&ifa->lock);
1460 struct inet6_ifaddr *ifa;
1537 ret = !!score->ifa;
1541 ret = ipv6_addr_equal(&score->ifa->addr, dst->addr);
1577 if (!ipv6_use_optimistic_addr(net, score->ifa->idev))
1580 !(score->ifa->flags & avoid);
1588 ret = !(score->ifa->flags & IFA_F_HOMEADDRESS) ^ prefhome;
1595 dst->ifindex == score->ifa->idev->dev->ifindex);
1600 &score->ifa->addr, score->addr_type,
1601 score->ifa->idev->dev->ifindex) == dst->label;
1610 score->ifa->idev->cnf.use_tempaddr >= 2;
1611 ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
1618 ret = !(ipv6_addr_orchid(&score->ifa->addr) ^
1623 ret = ipv6_addr_diff(&score->ifa->addr, dst->addr);
1624 if (ret > score->ifa->prefix_len)
1625 ret = score->ifa->prefix_len;
1633 ret = !(score->ifa->flags & IFA_F_OPTIMISTIC);
1655 list_for_each_entry_rcu(score->ifa, &idev->addr_list, if_list) {
1668 if ((score->ifa->flags & IFA_F_TENTATIVE) &&
1669 (!(score->ifa->flags & IFA_F_OPTIMISTIC)))
1672 score->addr_type = __ipv6_addr_type(&score->ifa->addr);
1697 * scope, because ifa entries
1709 score->ifa = hiscore->ifa;
1762 scores[hiscore_idx].ifa = NULL;
1810 if (scores[hiscore_idx].ifa)
1829 if (!hiscore->ifa)
1832 *saddr = hiscore->ifa->addr;
1963 const struct inet6_ifaddr *ifa;
1970 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
1971 ret = ipv6_prefix_equal(addr, &ifa->addr, prefix_len);
1984 const struct inet6_ifaddr *ifa;
1992 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
1993 onlink = ipv6_prefix_equal(addr, &ifa->addr,
1994 ifa->prefix_len);
3153 struct in_ifaddr *ifa;
3156 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
3157 addr.s6_addr32[3] = ifa->ifa_local;
3159 if (ifa->ifa_scope == RT_SCOPE_LINK)
3161 if (ifa->ifa_scope >= RT_SCOPE_HOST) {
3731 struct inet6_ifaddr *ifa;
3779 hlist_for_each_entry_rcu(ifa, h, addr_lst) {
3780 if (ifa->idev == idev) {
3781 addrconf_del_dad_work(ifa);
3786 !(ifa->flags & IFA_F_PERMANENT) ||
3787 addr_is_local(&ifa->addr)) {
3788 hlist_del_init_rcu(&ifa->addr_lst);
3809 ifa = list_first_entry(&idev->tempaddr_list,
3811 list_del(&ifa->tmp_list);
3813 spin_lock_bh(&ifa->lock);
3815 if (ifa->ifpub) {
3816 in6_ifa_put(ifa->ifpub);
3817 ifa->ifpub = NULL;
3819 spin_unlock_bh(&ifa->lock);
3820 in6_ifa_put(ifa);
3824 list_for_each_entry(ifa, &idev->addr_list, if_list)
3825 list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
3832 ifa = list_first_entry(&tmp_addr_list,
3834 list_del(&ifa->if_list_aux);
3836 addrconf_del_dad_work(ifa);
3838 keep = keep_addr && (ifa->flags & IFA_F_PERMANENT) &&
3839 !addr_is_local(&ifa->addr);
3841 spin_lock_bh(&ifa->lock);
3846 ifa->state = INET6_IFADDR_STATE_PREDAD;
3847 if (!(ifa->flags & IFA_F_NODAD))
3848 ifa->flags |= IFA_F_TENTATIVE;
3850 rt = ifa->rt;
3851 ifa->rt = NULL;
3853 state = ifa->state;
3854 ifa->state = INET6_IFADDR_STATE_DEAD;
3857 spin_unlock_bh(&ifa->lock);
3863 __ipv6_ifa_notify(RTM_DELADDR, ifa);
3864 inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
3867 addrconf_leave_anycast(ifa);
3868 addrconf_leave_solict(ifa->idev, &ifa->addr);
3873 list_del_rcu(&ifa->if_list);
3875 in6_ifa_put(ifa);
4290 struct inet6_ifaddr *ifa = NULL;
4300 hlist_for_each_entry_rcu(ifa, &inet6_addr_lst[state->bucket],
4302 if (!net_eq(dev_net(ifa->idev->dev), net))
4309 return ifa;
4320 struct inet6_ifaddr *ifa)
4325 hlist_for_each_entry_continue_rcu(ifa, addr_lst) {
4326 if (!net_eq(dev_net(ifa->idev->dev), net))
4329 return ifa;
4334 hlist_for_each_entry_rcu(ifa,
4336 if (!net_eq(dev_net(ifa->idev->dev), net))
4338 return ifa;
4354 struct inet6_ifaddr *ifa;
4356 ifa = if6_get_next(seq, v);
4358 return ifa;
4845 struct inet6_ifaddr *ifa;
4906 ifa = ipv6_get_ifaddr(net, cfg.pfx, dev, 1);
4907 if (!ifa) {
4919 err = inet6_addr_modify(ifa, &cfg);
4921 in6_ifa_put(ifa);
4990 static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
5001 put_ifaddrmsg(nlh, ifa->prefix_len, ifa->flags, rt_scope(ifa->scope),
5002 ifa->idev->dev->ifindex);
5008 spin_lock_bh(&ifa->lock);
5009 if (!((ifa->flags&IFA_F_PERMANENT) &&
5010 (ifa->prefered_lft == INFINITY_LIFE_TIME))) {
5011 preferred = ifa->prefered_lft;
5012 valid = ifa->valid_lft;
5014 long tval = (jiffies - ifa->tstamp)/HZ;
5030 spin_unlock_bh(&ifa->lock);
5032 if (!ipv6_addr_any(&ifa->peer_addr)) {
5033 if (nla_put_in6_addr(skb, IFA_LOCAL, &ifa->addr) < 0 ||
5034 nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->peer_addr) < 0)
5037 if (nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->addr) < 0)
5040 if (ifa->rt_priority &&
5041 nla_put_u32(skb, IFA_RT_PRIORITY, ifa->rt_priority))
5044 if (put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0)
5047 if (nla_put_u32(skb, IFA_FLAGS, ifa->flags) < 0)
5138 struct inet6_ifaddr *ifa;
5142 list_for_each_entry(ifa, &idev->addr_list, if_list) {
5145 err = inet6_fill_ifaddr(skb, ifa, fillargs);
5407 struct inet6_ifaddr *ifa;
5433 ifa = ipv6_get_ifaddr(tgt_net, addr, dev, 1);
5434 if (!ifa) {
5445 err = inet6_fill_ifaddr(skb, ifa, &fillargs);
5454 in6_ifa_put(ifa);
5464 static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
5467 struct net *net = dev_net(ifa->idev->dev);
5481 err = inet6_fill_ifaddr(skb, ifa, &fillargs);
6477 struct inet6_ifaddr *ifa;
6480 list_for_each_entry(ifa, &idev->addr_list, if_list) {
6481 spin_lock(&ifa->lock);
6482 if (ifa->rt) {
6484 struct fib6_nh *nh = ifa->rt->fib6_nh;
6488 ifa->rt->dst_nopolicy = val ? true : false;
6499 spin_unlock(&ifa->lock);