After we stopped processing router advertisements in the kernel
sppp_update_ip6_addr() became the last user of n6_are_prefix_equal().
Since it compares /128 prefixes it doesn't need all the bells and
whistles and can be converted to a memcmp. Remove the new unused
n6_are_prefix_equal().
OK?
diff --git net/if_spppsubr.c net/if_spppsubr.c
index 4b541535bda..89e3f1b5713 100644
--- net/if_spppsubr.c
+++ net/if_spppsubr.c
@@ -4355,7 +4355,6 @@ sppp_update_ip6_addr(void *arg)
struct sppp *sp = arg;
struct ifnet *ifp = &sp->pp_if;
struct in6_aliasreq *ifra = &sp->ipv6cp.req_ifid;
- struct in6_addr mask = in6mask128;
struct in6_ifaddr *ia6;
int error;
@@ -4386,7 +4385,8 @@ sppp_update_ip6_addr(void *arg)
*/
/* Destination address can only be set for /128. */
- if (!in6_are_prefix_equal(&ia6->ia_prefixmask.sin6_addr, &mask, 128)) {
+ if (memcmp(&ia6->ia_prefixmask.sin6_addr, &in6mask128,
+ sizeof(in6mask128)) != 0) {
ifra->ifra_dstaddr.sin6_len = 0;
ifra->ifra_dstaddr.sin6_family = AF_UNSPEC;
}
diff --git netinet6/in6.c netinet6/in6.c
index b83e6df6c66..f9596be629b 100644
--- netinet6/in6.c
+++ netinet6/in6.c
@@ -1519,32 +1519,6 @@ in6_matchlen(struct in6_addr *src, struct in6_addr *dst)
return match;
}
-int
-in6_are_prefix_equal(struct in6_addr *p1, struct in6_addr *p2, int len)
-{
- int bytelen, bitlen;
-
- /* sanity check */
- if (0 > len || len > 128) {
- log(LOG_ERR, "in6_are_prefix_equal: invalid prefix
length(%d)\n",
- len);
- return (0);
- }
-
- bytelen = len / 8;
- bitlen = len % 8;
-
- if (bcmp(&p1->s6_addr, &p2->s6_addr, bytelen))
- return (0);
- /* len == 128 is ok because bitlen == 0 then */
- if (bitlen != 0 &&
- p1->s6_addr[bytelen] >> (8 - bitlen) !=
- p2->s6_addr[bytelen] >> (8 - bitlen))
- return (0);
-
- return (1);
-}
-
void
in6_prefixlen2mask(struct in6_addr *maskp, int len)
{
diff --git netinet6/in6_var.h netinet6/in6_var.h
index a023d12a1bf..e5a72e6f903 100644
--- netinet6/in6_var.h
+++ netinet6/in6_var.h
@@ -395,7 +395,6 @@ struct in6_ifaddr *in6ifa_ifpforlinklocal(struct ifnet *,
int);
struct in6_ifaddr *in6ifa_ifpwithaddr(struct ifnet *, struct in6_addr *);
int in6_addr2scopeid(unsigned int, struct in6_addr *);
int in6_matchlen(struct in6_addr *, struct in6_addr *);
-int in6_are_prefix_equal(struct in6_addr *, struct in6_addr *, int);
void in6_prefixlen2mask(struct in6_addr *, int);
void in6_purgeprefix(struct ifnet *);
#endif /* _KERNEL */
--
I'm not entirely sure you are real.