• Home
  • Raw
  • Download

Lines Matching refs:ifa

182 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
183 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
695 struct inet6_ifaddr *ifa; in dev_forward_change() local
714 list_for_each_entry(ifa, &idev->addr_list, if_list) { in dev_forward_change()
715 if (ifa->flags&IFA_F_TENTATIVE) in dev_forward_change()
718 addrconf_join_anycast(ifa); in dev_forward_change()
720 addrconf_leave_anycast(ifa); in dev_forward_change()
816 struct inet6_ifaddr *ifa in ipv6_link_dev_addr() local
818 if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr)) in ipv6_link_dev_addr()
837 struct inet6_ifaddr *ifa = NULL; in ipv6_add_addr() local
869 ifa = kzalloc(sizeof(struct inet6_ifaddr), GFP_ATOMIC); in ipv6_add_addr()
871 if (ifa == NULL) { in ipv6_add_addr()
885 ifa->addr = *addr; in ipv6_add_addr()
887 ifa->peer_addr = *peer_addr; in ipv6_add_addr()
889 spin_lock_init(&ifa->lock); in ipv6_add_addr()
890 spin_lock_init(&ifa->state_lock); in ipv6_add_addr()
891 INIT_DELAYED_WORK(&ifa->dad_work, addrconf_dad_work); in ipv6_add_addr()
892 INIT_HLIST_NODE(&ifa->addr_lst); in ipv6_add_addr()
893 ifa->scope = scope; in ipv6_add_addr()
894 ifa->prefix_len = pfxlen; in ipv6_add_addr()
895 ifa->flags = flags | IFA_F_TENTATIVE; in ipv6_add_addr()
896 ifa->valid_lft = valid_lft; in ipv6_add_addr()
897 ifa->prefered_lft = prefered_lft; in ipv6_add_addr()
898 ifa->cstamp = ifa->tstamp = jiffies; in ipv6_add_addr()
899 ifa->tokenized = false; in ipv6_add_addr()
901 ifa->rt = rt; in ipv6_add_addr()
903 ifa->idev = idev; in ipv6_add_addr()
906 in6_ifa_hold(ifa); in ipv6_add_addr()
911 hlist_add_head_rcu(&ifa->addr_lst, &inet6_addr_lst[hash]); in ipv6_add_addr()
916 ipv6_link_dev_addr(idev, ifa); in ipv6_add_addr()
918 if (ifa->flags&IFA_F_TEMPORARY) { in ipv6_add_addr()
919 list_add(&ifa->tmp_list, &idev->tempaddr_list); in ipv6_add_addr()
920 in6_ifa_hold(ifa); in ipv6_add_addr()
923 in6_ifa_hold(ifa); in ipv6_add_addr()
929 inet6addr_notifier_call_chain(NETDEV_UP, ifa); in ipv6_add_addr()
931 kfree(ifa); in ipv6_add_addr()
932 ifa = ERR_PTR(err); in ipv6_add_addr()
935 return ifa; in ipv6_add_addr()
968 struct inet6_ifaddr *ifa; in check_cleanup_prefix_route() local
975 list_for_each_entry(ifa, &idev->addr_list, if_list) { in check_cleanup_prefix_route()
976 if (ifa == ifp) in check_cleanup_prefix_route()
978 if (!ipv6_prefix_equal(&ifa->addr, &ifp->addr, in check_cleanup_prefix_route()
981 if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE)) in check_cleanup_prefix_route()
986 spin_lock(&ifa->lock); in check_cleanup_prefix_route()
988 lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ); in check_cleanup_prefix_route()
994 if (time_before(*expires, ifa->tstamp + lifetime * HZ)) in check_cleanup_prefix_route()
995 *expires = ifa->tstamp + lifetime * HZ; in check_cleanup_prefix_route()
996 spin_unlock(&ifa->lock); in check_cleanup_prefix_route()
1212 struct inet6_ifaddr *ifa; member
1266 ret = !!score->ifa; in ipv6_get_saddr_eval()
1270 ret = ipv6_addr_equal(&score->ifa->addr, dst->addr); in ipv6_get_saddr_eval()
1306 if (!ipv6_use_optimistic_addr(score->ifa->idev)) in ipv6_get_saddr_eval()
1309 !(score->ifa->flags & avoid); in ipv6_get_saddr_eval()
1317 ret = !(score->ifa->flags & IFA_F_HOMEADDRESS) ^ prefhome; in ipv6_get_saddr_eval()
1324 dst->ifindex == score->ifa->idev->dev->ifindex); in ipv6_get_saddr_eval()
1329 &score->ifa->addr, score->addr_type, in ipv6_get_saddr_eval()
1330 score->ifa->idev->dev->ifindex) == dst->label; in ipv6_get_saddr_eval()
1339 score->ifa->idev->cnf.use_tempaddr >= 2; in ipv6_get_saddr_eval()
1340 ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp; in ipv6_get_saddr_eval()
1347 ret = !(ipv6_addr_orchid(&score->ifa->addr) ^ in ipv6_get_saddr_eval()
1352 ret = ipv6_addr_diff(&score->ifa->addr, dst->addr); in ipv6_get_saddr_eval()
1353 if (ret > score->ifa->prefix_len) in ipv6_get_saddr_eval()
1354 ret = score->ifa->prefix_len; in ipv6_get_saddr_eval()
1362 ret = !(score->ifa->flags & IFA_F_OPTIMISTIC); in ipv6_get_saddr_eval()
1385 list_for_each_entry(score->ifa, &idev->addr_list, if_list) { in __ipv6_dev_get_saddr()
1398 if ((score->ifa->flags & IFA_F_TENTATIVE) && in __ipv6_dev_get_saddr()
1399 (!(score->ifa->flags & IFA_F_OPTIMISTIC))) in __ipv6_dev_get_saddr()
1402 score->addr_type = __ipv6_addr_type(&score->ifa->addr); in __ipv6_dev_get_saddr()
1435 if (hiscore->ifa) in __ipv6_dev_get_saddr()
1436 in6_ifa_put(hiscore->ifa); in __ipv6_dev_get_saddr()
1438 in6_ifa_hold(score->ifa); in __ipv6_dev_get_saddr()
1444 score->ifa = hiscore->ifa; in __ipv6_dev_get_saddr()
1475 scores[hiscore_idx].ifa = NULL; in ipv6_dev_get_saddr()
1518 if (!hiscore->ifa) in ipv6_dev_get_saddr()
1521 *saddr = hiscore->ifa->addr; in ipv6_dev_get_saddr()
1522 in6_ifa_put(hiscore->ifa); in ipv6_dev_get_saddr()
1638 struct inet6_ifaddr *ifa; in ipv6_chk_custom_prefix() local
1645 list_for_each_entry(ifa, &idev->addr_list, if_list) { in ipv6_chk_custom_prefix()
1646 ret = ipv6_prefix_equal(addr, &ifa->addr, prefix_len); in ipv6_chk_custom_prefix()
1661 struct inet6_ifaddr *ifa; in ipv6_chk_prefix() local
1669 list_for_each_entry(ifa, &idev->addr_list, if_list) { in ipv6_chk_prefix()
1670 onlink = ipv6_prefix_equal(addr, &ifa->addr, in ipv6_chk_prefix()
1671 ifa->prefix_len); in ipv6_chk_prefix()
2755 struct in_ifaddr *ifa; in sit_add_v4_addrs() local
2759 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) { in sit_add_v4_addrs()
2761 addr.s6_addr32[3] = ifa->ifa_local; in sit_add_v4_addrs()
2763 if (ifa->ifa_scope == RT_SCOPE_LINK) in sit_add_v4_addrs()
2765 if (ifa->ifa_scope >= RT_SCOPE_HOST) { in sit_add_v4_addrs()
3128 struct inet6_ifaddr *ifa; in addrconf_ifdown() local
3161 hlist_for_each_entry_rcu(ifa, h, addr_lst) { in addrconf_ifdown()
3162 if (ifa->idev == idev) { in addrconf_ifdown()
3163 hlist_del_init_rcu(&ifa->addr_lst); in addrconf_ifdown()
3164 addrconf_del_dad_work(ifa); in addrconf_ifdown()
3184 ifa = list_first_entry(&idev->tempaddr_list, in addrconf_ifdown()
3186 list_del(&ifa->tmp_list); in addrconf_ifdown()
3188 spin_lock_bh(&ifa->lock); in addrconf_ifdown()
3190 if (ifa->ifpub) { in addrconf_ifdown()
3191 in6_ifa_put(ifa->ifpub); in addrconf_ifdown()
3192 ifa->ifpub = NULL; in addrconf_ifdown()
3194 spin_unlock_bh(&ifa->lock); in addrconf_ifdown()
3195 in6_ifa_put(ifa); in addrconf_ifdown()
3200 ifa = list_first_entry(&idev->addr_list, in addrconf_ifdown()
3202 addrconf_del_dad_work(ifa); in addrconf_ifdown()
3204 list_del(&ifa->if_list); in addrconf_ifdown()
3208 spin_lock_bh(&ifa->state_lock); in addrconf_ifdown()
3209 state = ifa->state; in addrconf_ifdown()
3210 ifa->state = INET6_IFADDR_STATE_DEAD; in addrconf_ifdown()
3211 spin_unlock_bh(&ifa->state_lock); in addrconf_ifdown()
3214 __ipv6_ifa_notify(RTM_DELADDR, ifa); in addrconf_ifdown()
3215 inet6addr_notifier_call_chain(NETDEV_DOWN, ifa); in addrconf_ifdown()
3217 in6_ifa_put(ifa); in addrconf_ifdown()
3557 struct inet6_ifaddr *ifa = NULL; in if6_get_first() local
3569 hlist_for_each_entry_rcu_bh(ifa, &inet6_addr_lst[state->bucket], in if6_get_first()
3571 if (!net_eq(dev_net(ifa->idev->dev), net)) in if6_get_first()
3579 return ifa; in if6_get_first()
3590 struct inet6_ifaddr *ifa) in if6_get_next() argument
3595 hlist_for_each_entry_continue_rcu_bh(ifa, addr_lst) { in if6_get_next()
3596 if (!net_eq(dev_net(ifa->idev->dev), net)) in if6_get_next()
3599 return ifa; in if6_get_next()
3604 hlist_for_each_entry_rcu_bh(ifa, in if6_get_next()
3606 if (!net_eq(dev_net(ifa->idev->dev), net)) in if6_get_next()
3609 return ifa; in if6_get_next()
3625 struct inet6_ifaddr *ifa; in if6_seq_next() local
3627 ifa = if6_get_next(seq, v); in if6_seq_next()
3629 return ifa; in if6_seq_next()
3996 struct inet6_ifaddr *ifa; in inet6_rtm_newaddr() local
4032 ifa = ipv6_get_ifaddr(net, pfx, dev, 1); in inet6_rtm_newaddr()
4033 if (ifa == NULL) { in inet6_rtm_newaddr()
4047 err = inet6_addr_modify(ifa, ifa_flags, preferred_lft, valid_lft); in inet6_rtm_newaddr()
4049 in6_ifa_put(ifa); in inet6_rtm_newaddr()
4101 static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, in inet6_fill_ifaddr() argument
4111 put_ifaddrmsg(nlh, ifa->prefix_len, ifa->flags, rt_scope(ifa->scope), in inet6_fill_ifaddr()
4112 ifa->idev->dev->ifindex); in inet6_fill_ifaddr()
4114 if (!((ifa->flags&IFA_F_PERMANENT) && in inet6_fill_ifaddr()
4115 (ifa->prefered_lft == INFINITY_LIFE_TIME))) { in inet6_fill_ifaddr()
4116 preferred = ifa->prefered_lft; in inet6_fill_ifaddr()
4117 valid = ifa->valid_lft; in inet6_fill_ifaddr()
4119 long tval = (jiffies - ifa->tstamp)/HZ; in inet6_fill_ifaddr()
4136 if (!ipv6_addr_any(&ifa->peer_addr)) { in inet6_fill_ifaddr()
4137 if (nla_put(skb, IFA_LOCAL, 16, &ifa->addr) < 0 || in inet6_fill_ifaddr()
4138 nla_put(skb, IFA_ADDRESS, 16, &ifa->peer_addr) < 0) in inet6_fill_ifaddr()
4141 if (nla_put(skb, IFA_ADDRESS, 16, &ifa->addr) < 0) in inet6_fill_ifaddr()
4144 if (put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0) in inet6_fill_ifaddr()
4147 if (nla_put_u32(skb, IFA_FLAGS, ifa->flags) < 0) in inet6_fill_ifaddr()
4226 struct inet6_ifaddr *ifa; in in6_dump_addrs() local
4229 list_for_each_entry(ifa, &idev->addr_list, if_list) { in in6_dump_addrs()
4232 err = inet6_fill_ifaddr(skb, ifa, in in6_dump_addrs()
4356 struct inet6_ifaddr *ifa; in inet6_rtm_getaddr() local
4374 ifa = ipv6_get_ifaddr(net, addr, dev, 1); in inet6_rtm_getaddr()
4375 if (!ifa) { in inet6_rtm_getaddr()
4386 err = inet6_fill_ifaddr(skb, ifa, NETLINK_CB(in_skb).portid, in inet6_rtm_getaddr()
4396 in6_ifa_put(ifa); in inet6_rtm_getaddr()
4401 static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa) in inet6_ifa_notify() argument
4404 struct net *net = dev_net(ifa->idev->dev); in inet6_ifa_notify()
4411 err = inet6_fill_ifaddr(skb, ifa, 0, 0, event, 0); in inet6_ifa_notify()