Lines Matching refs:ifa
174 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
175 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
815 struct inet6_ifaddr *ifa;
836 list_for_each_entry(ifa, &idev->addr_list, if_list) {
837 if (ifa->flags&IFA_F_TENTATIVE)
839 list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
844 ifa = list_first_entry(&tmp_addr_list,
846 list_del(&ifa->if_list_aux);
848 addrconf_join_anycast(ifa);
850 addrconf_leave_anycast(ifa);
995 pr_notice("delayed DAD work was pending while freeing ifa=%p\n",
1017 struct inet6_ifaddr *ifa
1019 if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr))
1047 static int ipv6_add_addr_hash(struct net_device *dev, struct inet6_ifaddr *ifa)
1050 unsigned int hash = inet6_addr_hash(net, &ifa->addr);
1056 if (ipv6_chk_same_addr(net, &ifa->addr, dev, hash)) {
1060 hlist_add_head_rcu(&ifa->addr_lst, &net->ipv6.inet6_addr_lst[hash]);
1077 struct inet6_ifaddr *ifa = NULL;
1123 ifa = kzalloc(sizeof(*ifa), gfp_flags | __GFP_ACCOUNT);
1124 if (!ifa) {
1138 ifa->addr = *cfg->pfx;
1140 ifa->peer_addr = *cfg->peer_pfx;
1142 spin_lock_init(&ifa->lock);
1143 INIT_DELAYED_WORK(&ifa->dad_work, addrconf_dad_work);
1144 INIT_HLIST_NODE(&ifa->addr_lst);
1145 ifa->scope = cfg->scope;
1146 ifa->prefix_len = cfg->plen;
1147 ifa->rt_priority = cfg->rt_priority;
1148 ifa->flags = cfg->ifa_flags;
1149 ifa->ifa_proto = cfg->ifa_proto;
1152 ifa->flags |= IFA_F_TENTATIVE;
1153 ifa->valid_lft = cfg->valid_lft;
1154 ifa->prefered_lft = cfg->preferred_lft;
1155 ifa->cstamp = ifa->tstamp = jiffies;
1156 ifa->tokenized = false;
1158 ifa->rt = f6i;
1160 ifa->idev = idev;
1164 refcount_set(&ifa->refcnt, 1);
1168 err = ipv6_add_addr_hash(idev->dev, ifa);
1177 ipv6_link_dev_addr(idev, ifa);
1179 if (ifa->flags&IFA_F_TEMPORARY) {
1180 list_add(&ifa->tmp_list, &idev->tempaddr_list);
1181 in6_ifa_hold(ifa);
1184 in6_ifa_hold(ifa);
1189 inet6addr_notifier_call_chain(NETDEV_UP, ifa);
1194 if (ifa) {
1195 if (ifa->idev)
1196 in6_dev_put(ifa->idev);
1197 kfree(ifa);
1199 ifa = ERR_PTR(err);
1202 return ifa;
1232 struct inet6_ifaddr *ifa;
1239 list_for_each_entry(ifa, &idev->addr_list, if_list) {
1240 if (ifa == ifp)
1242 if (ifa->prefix_len != ifp->prefix_len ||
1243 !ipv6_prefix_equal(&ifa->addr, &ifp->addr,
1246 if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE))
1251 spin_lock(&ifa->lock);
1253 lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ);
1259 if (time_before(*expires, ifa->tstamp + lifetime * HZ))
1260 *expires = ifa->tstamp + lifetime * HZ;
1261 spin_unlock(&ifa->lock);
1492 struct inet6_ifaddr *ifa;
1569 ret = !!score->ifa;
1573 ret = ipv6_addr_equal(&score->ifa->addr, dst->addr);
1609 if (!ipv6_use_optimistic_addr(net, score->ifa->idev))
1612 !(score->ifa->flags & avoid);
1620 ret = !(score->ifa->flags & IFA_F_HOMEADDRESS) ^ prefhome;
1627 dst->ifindex == score->ifa->idev->dev->ifindex);
1632 &score->ifa->addr, score->addr_type,
1633 score->ifa->idev->dev->ifindex) == dst->label;
1642 score->ifa->idev->cnf.use_tempaddr >= 2;
1643 ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
1650 ret = !(ipv6_addr_orchid(&score->ifa->addr) ^
1655 ret = ipv6_addr_diff(&score->ifa->addr, dst->addr);
1656 if (ret > score->ifa->prefix_len)
1657 ret = score->ifa->prefix_len;
1665 ret = !(score->ifa->flags & IFA_F_OPTIMISTIC);
1687 list_for_each_entry_rcu(score->ifa, &idev->addr_list, if_list) {
1700 if ((score->ifa->flags & IFA_F_TENTATIVE) &&
1701 (!(score->ifa->flags & IFA_F_OPTIMISTIC)))
1704 score->addr_type = __ipv6_addr_type(&score->ifa->addr);
1729 * scope, because ifa entries
1741 score->ifa = hiscore->ifa;
1794 scores[hiscore_idx].ifa = NULL;
1842 if (scores[hiscore_idx].ifa)
1861 if (!hiscore->ifa)
1864 *saddr = hiscore->ifa->addr;
1993 const struct inet6_ifaddr *ifa;
2000 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
2001 ret = ipv6_prefix_equal(addr, &ifa->addr, prefix_len);
2014 const struct inet6_ifaddr *ifa;
2022 list_for_each_entry_rcu(ifa, &idev->addr_list, if_list) {
2023 onlink = ipv6_prefix_equal(addr, &ifa->addr,
2024 ifa->prefix_len);
3205 struct in_ifaddr *ifa;
3208 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
3209 addr.s6_addr32[3] = ifa->ifa_local;
3211 if (ifa->ifa_scope == RT_SCOPE_LINK)
3213 if (ifa->ifa_scope >= RT_SCOPE_HOST) {
3799 struct inet6_ifaddr *ifa;
3847 hlist_for_each_entry_rcu(ifa, h, addr_lst) {
3848 if (ifa->idev == idev) {
3849 addrconf_del_dad_work(ifa);
3854 !(ifa->flags & IFA_F_PERMANENT) ||
3855 addr_is_local(&ifa->addr)) {
3856 hlist_del_init_rcu(&ifa->addr_lst);
3877 ifa = list_first_entry(&idev->tempaddr_list,
3879 list_del(&ifa->tmp_list);
3881 spin_lock_bh(&ifa->lock);
3883 if (ifa->ifpub) {
3884 in6_ifa_put(ifa->ifpub);
3885 ifa->ifpub = NULL;
3887 spin_unlock_bh(&ifa->lock);
3888 in6_ifa_put(ifa);
3892 list_for_each_entry(ifa, &idev->addr_list, if_list)
3893 list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
3900 ifa = list_first_entry(&tmp_addr_list,
3902 list_del(&ifa->if_list_aux);
3904 addrconf_del_dad_work(ifa);
3906 keep = keep_addr && (ifa->flags & IFA_F_PERMANENT) &&
3907 !addr_is_local(&ifa->addr);
3909 spin_lock_bh(&ifa->lock);
3914 ifa->state = INET6_IFADDR_STATE_PREDAD;
3915 if (!(ifa->flags & IFA_F_NODAD))
3916 ifa->flags |= IFA_F_TENTATIVE;
3918 rt = ifa->rt;
3919 ifa->rt = NULL;
3921 state = ifa->state;
3922 ifa->state = INET6_IFADDR_STATE_DEAD;
3925 spin_unlock_bh(&ifa->lock);
3931 __ipv6_ifa_notify(RTM_DELADDR, ifa);
3932 inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
3935 addrconf_leave_anycast(ifa);
3936 addrconf_leave_solict(ifa->idev, &ifa->addr);
3941 list_del_rcu(&ifa->if_list);
3943 in6_ifa_put(ifa);
4358 struct inet6_ifaddr *ifa = NULL;
4368 hlist_for_each_entry_rcu(ifa, &net->ipv6.inet6_addr_lst[state->bucket],
4375 return ifa;
4386 struct inet6_ifaddr *ifa)
4391 hlist_for_each_entry_continue_rcu(ifa, addr_lst) {
4393 return ifa;
4398 hlist_for_each_entry_rcu(ifa,
4400 return ifa;
4416 struct inet6_ifaddr *ifa;
4418 ifa = if6_get_next(seq, v);
4420 return ifa;
4915 struct inet6_ifaddr *ifa;
4981 ifa = ipv6_get_ifaddr(net, cfg.pfx, dev, 1);
4982 if (!ifa) {
4995 err = inet6_addr_modify(net, ifa, &cfg);
4998 in6_ifa_put(ifa);
5068 static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
5079 put_ifaddrmsg(nlh, ifa->prefix_len, ifa->flags, rt_scope(ifa->scope),
5080 ifa->idev->dev->ifindex);
5086 spin_lock_bh(&ifa->lock);
5087 if (!((ifa->flags&IFA_F_PERMANENT) &&
5088 (ifa->prefered_lft == INFINITY_LIFE_TIME))) {
5089 preferred = ifa->prefered_lft;
5090 valid = ifa->valid_lft;
5092 long tval = (jiffies - ifa->tstamp)/HZ;
5108 spin_unlock_bh(&ifa->lock);
5110 if (!ipv6_addr_any(&ifa->peer_addr)) {
5111 if (nla_put_in6_addr(skb, IFA_LOCAL, &ifa->addr) < 0 ||
5112 nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->peer_addr) < 0)
5115 if (nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->addr) < 0)
5118 if (ifa->rt_priority &&
5119 nla_put_u32(skb, IFA_RT_PRIORITY, ifa->rt_priority))
5122 if (put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0)
5125 if (nla_put_u32(skb, IFA_FLAGS, ifa->flags) < 0)
5128 if (ifa->ifa_proto &&
5129 nla_put_u8(skb, IFA_PROTO, ifa->ifa_proto))
5220 struct inet6_ifaddr *ifa;
5224 list_for_each_entry(ifa, &idev->addr_list, if_list) {
5227 err = inet6_fill_ifaddr(skb, ifa, fillargs);
5490 struct inet6_ifaddr *ifa;
5516 ifa = ipv6_get_ifaddr(tgt_net, addr, dev, 1);
5517 if (!ifa) {
5528 err = inet6_fill_ifaddr(skb, ifa, &fillargs);
5537 in6_ifa_put(ifa);
5546 static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
5549 struct net *net = dev_net(ifa->idev->dev);
5563 err = inet6_fill_ifaddr(skb, ifa, &fillargs);
6592 struct inet6_ifaddr *ifa;
6595 list_for_each_entry(ifa, &idev->addr_list, if_list) {
6596 spin_lock(&ifa->lock);
6597 if (ifa->rt) {
6599 struct fib6_nh *nh = ifa->rt->fib6_nh;
6603 ifa->rt->dst_nopolicy = val ? true : false;
6614 spin_unlock(&ifa->lock);