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.

Reply via email to