Lines Matching refs:addr
138 static void ipv6_gen_rnd_iid(struct in6_addr *addr);
142 static int ipv6_generate_stable_address(struct in6_addr *addr,
987 int ifp_scope = ipv6_addr_src_scope(&ifp->addr);
996 if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr))
1003 static u32 inet6_addr_hash(const struct net *net, const struct in6_addr *addr)
1005 u32 val = ipv6_addr_hash(addr) ^ net_hash_mix(net);
1010 static bool ipv6_chk_same_addr(struct net *net, const struct in6_addr *addr,
1018 if (ipv6_addr_equal(&ifp->addr, addr)) {
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)) {
1108 ifa->addr = *cfg->pfx;
1145 /* Add to inet6_dev unicast addr list. */
1212 !ipv6_prefix_equal(&ifa->addr, &ifp->addr,
1242 f6i = addrconf_get_prefix_route(del_peer ? &ifp->peer_addr : &ifp->addr,
1325 struct in6_addr addr;
1351 memcpy(addr.s6_addr, ifp->addr.s6_addr, 8);
1352 ipv6_gen_rnd_iid(&addr);
1410 cfg.pfx = &addr;
1467 const struct in6_addr *addr;
1541 ret = ipv6_addr_equal(&score->ifa->addr, dst->addr);
1600 &score->ifa->addr, score->addr_type,
1618 ret = !(ipv6_addr_orchid(&score->ifa->addr) ^
1619 ipv6_addr_orchid(dst->addr));
1623 ret = ipv6_addr_diff(&score->ifa->addr, dst->addr);
1672 score->addr_type = __ipv6_addr_type(&score->ifa->addr);
1755 dst.addr = daddr;
1832 *saddr = hiscore->ifa->addr;
1839 int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
1850 *addr = ifp->addr;
1858 int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
1868 err = __ipv6_get_lladdr(idev, addr, banned_flags);
1887 int ipv6_chk_addr(struct net *net, const struct in6_addr *addr,
1890 return ipv6_chk_addr_and_flags(net, addr, dev, !dev,
1905 __ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
1909 unsigned int hash = inet6_addr_hash(net, addr);
1934 if (ipv6_addr_equal(&ifp->addr, addr) &&
1947 int ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
1951 return __ipv6_chk_addr_and_flags(net, addr, dev, skip_dev_check,
1960 bool ipv6_chk_custom_prefix(const struct in6_addr *addr,
1971 ret = ipv6_prefix_equal(addr, &ifa->addr, prefix_len);
1982 int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
1993 onlink = ipv6_prefix_equal(addr, &ifa->addr,
2007 * @addr: the source address
2011 struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr,
2014 return __ipv6_chk_addr_and_flags(net, addr, dev, !dev, 1,
2019 struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
2022 unsigned int hash = inet6_addr_hash(net, addr);
2029 if (ipv6_addr_equal(&ifp->addr, addr)) {
2104 ifp->idev->dev->name, &ifp->addr, eth_hdr(skb)->h_source);
2127 new_addr = ifp->addr;
2166 /* Join to solicited addr multicast group.
2168 void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
2175 addrconf_addr_solict_mult(addr, &maddr);
2180 void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
2187 addrconf_addr_solict_mult(addr, &maddr);
2194 struct in6_addr addr;
2198 ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
2199 if (ipv6_addr_any(&addr))
2201 __ipv6_dev_ac_inc(ifp->idev, &addr);
2207 struct in6_addr addr;
2211 ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
2212 if (ipv6_addr_any(&addr))
2214 __ipv6_dev_ac_dec(ifp->idev, &addr);
2270 static int __ipv6_isatap_ifid(u8 *eui, __be32 addr)
2272 if (addr == 0)
2274 eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
2275 ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
2276 ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
2277 ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
2278 ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
2279 ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
2283 memcpy(eui + 4, &addr, 4);
2346 memcpy(eui, ifp->addr.s6_addr+8, 8);
2359 static void ipv6_gen_rnd_iid(struct in6_addr *addr)
2362 get_random_bytes(&addr->s6_addr[8], 8);
2372 if (!(addr->s6_addr32[2] | addr->s6_addr32[3]))
2379 if (ntohl(addr->s6_addr32[2]) == 0x02005eff &&
2380 (ntohl(addr->s6_addr32[3]) & 0Xff000000) == 0xfe000000)
2384 if (ntohl(addr->s6_addr32[2]) == 0xfdffffff &&
2385 ntohl(addr->s6_addr32[3]) >= 0Xffffff80)
2590 const struct in6_addr *addr, int addr_type,
2594 struct inet6_ifaddr *ifp = ipv6_get_ifaddr(net, addr, dev, 1);
2600 .pfx = addr,
2791 struct in6_addr addr;
2795 memcpy(&addr, &pinfo->prefix, 8);
2799 memcpy(addr.s6_addr + 8,
2804 !ipv6_generate_stable_address(&addr, 0,
2808 } else if (ipv6_generate_eui64(addr.s6_addr + 8, dev) &&
2809 ipv6_inherit_eui64(addr.s6_addr + 8, in6_dev)) {
2822 &addr, addr_type,
2829 /* Ignore error case here because previous prefix add addr was
2832 ndisc_ops_prefix_rcv_add_addr(net, dev, pinfo, in6_dev, &addr,
2895 const struct in6_addr *addr, int ifindex)
2903 ret = ipv6_sock_mc_join(sk, ifindex, addr);
2905 ret = ipv6_sock_mc_drop(sk, ifindex, addr);
2976 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
3027 ipv6_addr_equal(pfx, &ifp->addr)) {
3092 static void add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
3097 .pfx = addr,
3119 struct in6_addr addr;
3127 memset(&addr, 0, sizeof(struct in6_addr));
3128 memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4);
3134 addr.s6_addr32[0] = htonl(0xfe800000);
3143 if (addr.s6_addr32[3]) {
3144 add_addr(idev, &addr, plen, scope);
3145 addrconf_prefix_route(&addr, plen, 0, idev->dev, 0, pflags,
3157 addr.s6_addr32[3] = ifa->ifa_local;
3167 add_addr(idev, &addr, plen, flag);
3168 addrconf_prefix_route(&addr, plen, 0, idev->dev,
3194 const struct in6_addr *addr, u32 flags)
3197 .pfx = addr,
3215 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, 0, idev->dev,
3314 struct in6_addr addr;
3324 ipv6_addr_set(&addr, htonl(0xFE800000), 0, 0, 0);
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,
3455 f6i = addrconf_f6i_alloc(net, idev, &ifp->addr, false,
3470 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
3501 idev->dev->name, &ifp->addr);
3720 static bool addr_is_local(const struct in6_addr *addr)
3722 return ipv6_addr_type(addr) &
3787 addr_is_local(&ifa->addr)) {
3839 !addr_is_local(&ifa->addr);
3868 addrconf_leave_solict(ifa->idev, &ifa->addr);
3979 addrconf_join_solict(dev, &ifp->addr);
3981 prandom_seed((__force u32) ifp->addr.s6_addr32[3]);
4087 struct in6_addr addr;
4089 addr.s6_addr32[0] = htonl(0xfe800000);
4090 addr.s6_addr32[1] = 0;
4092 if (!ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) &&
4093 ipv6_addr_equal(&ifp->addr, &addr)) {
4159 /* send a neighbour solicitation for our addr */
4160 addrconf_addr_solict_mult(&ifp->addr, &mcaddr);
4161 ndisc_send_ns(ifp->idev->dev, &ifp->addr, &mcaddr, &in6addr_any,
4224 ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifp->addr,
4371 &ifp->addr,
4418 int ipv6_chk_home_addr(struct net *net, const struct in6_addr *addr)
4420 unsigned int hash = inet6_addr_hash(net, addr);
4428 if (ipv6_addr_equal(&ifp->addr, addr) &&
4452 const struct in6_addr *addr;
4461 addr = &segs[i];
4462 hash = inet6_addr_hash(net, addr);
4469 if (ipv6_addr_equal(&ifp->addr, addr)) {
4625 static struct in6_addr *extract_addr(struct nlattr *addr, struct nlattr *local,
4632 if (addr)
4633 pfx = nla_data(addr);
4690 f6i = addrconf_get_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4702 addrconf_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4794 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
5033 if (nla_put_in6_addr(skb, IFA_LOCAL, &ifa->addr) < 0 ||
5037 if (nla_put_in6_addr(skb, IFA_ADDRESS, &ifa->addr) < 0)
5141 /* unicast address incl. temp addr */
5405 struct in6_addr *addr = NULL, *peer;
5424 addr = extract_addr(tb[IFA_ADDRESS], tb[IFA_LOCAL], &peer);
5425 if (!addr) {
5433 ifa = ipv6_get_ifaddr(tgt_net, addr, dev, 1);
6103 &ifp->addr, ifp->idev->dev->name);
6116 addrconf_leave_solict(ifp->idev, &ifp->addr);
6375 struct in6_addr addr;
6405 if (in6_pton(str, -1, addr.in6_u.u6_addr8, -1, NULL) != 1) {
6411 secret->secret = addr;