X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=net%2Fipv6%2Faddrconf.c;h=924158393d048f89c6168b7c505ce0719bbbdbd7;hb=8eefca4888c986d993b2571eb31f0397a5d0a178;hp=dbc51af690171ef14877316b871f3781ded554bd;hpb=549e028d012fab01e5726943d4afecd0c33d64e6;p=h-e-n diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index dbc51af..9241583 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1265,6 +1265,31 @@ int ipv6_chk_same_addr(struct net *net, const struct in6_addr *addr, return ifp != NULL; } +int ipv6_chk_prefix(struct in6_addr *addr, struct net_device *dev) +{ + struct inet6_dev *idev; + struct inet6_ifaddr *ifa; + int onlink; + + onlink = 0; + rcu_read_lock(); + idev = __in6_dev_get(dev); + if (idev) { + read_lock_bh(&idev->lock); + for (ifa = idev->addr_list; ifa; ifa = ifa->if_next) { + onlink = ipv6_prefix_equal(addr, &ifa->addr, + ifa->prefix_len); + if (onlink) + break; + } + read_unlock_bh(&idev->lock); + } + rcu_read_unlock(); + return onlink; +} + +EXPORT_SYMBOL(ipv6_chk_prefix); + struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, struct in6_addr *addr, struct net_device *dev, int strict) {