* [BK PATCH] Misc IPv6 Updates
@ 2004-11-10 8:00 YOSHIFUJI Hideaki / 吉藤英明
2004-11-10 18:20 ` Krishna Kumar
2004-11-11 23:18 ` David S. Miller
0 siblings, 2 replies; 6+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-11-10 8:00 UTC (permalink / raw)
To: davem; +Cc: netdev, yoshfuji
Hello.
Here're changeset at:
bk://bk.skbuff.net:20610/linux-2.6-inet6-misc/
Note:
1. Bug#3717 will be closed next week, after my returning to Japan.
2. Since there're some points to retain ipv6_addr_cmp(),
let's introduce fast ipv6_addr_equal() and use it
where appropriate. (please double check.)
3. I'm not so worring about alignment because
we already have ipv6_addr_any() etc.
If you're unhappy with this, let me re-create changesets.
Thank you.
HEADLINES
---------
ChangeSet@1.2607, 2004-11-09 14:07:14+09:00, yoshfuji@linux-ipv6.org
[IPV6] Fix unresolved symbol timer_bug_msg.
ChangeSet@1.2608, 2004-11-10 15:50:50+09:00, yoshfuji@linux-ipv6.org
[IPV6] introduce lightweight IPv6 address comparison function.
ChangeSet@1.2609, 2004-11-10 15:57:15+09:00, yoshfuji@linux-ipv6.org
[IPV6] Use ipv6_addr_equal() where appropriate.
DIFFSTATS
---------
include/net/ipv6.h | 9 +++++++++
include/net/tcp.h | 16 +++++++++++-----
net/ipv4/tcp_timer.c | 7 ++++++-
net/ipv6/addrconf.c | 10 +++++-----
net/ipv6/anycast.c | 10 +++++-----
net/ipv6/datagram.c | 2 +-
net/ipv6/ip6_fib.c | 4 ++--
net/ipv6/ip6_flowlabel.c | 2 +-
net/ipv6/ip6_output.c | 4 ++--
net/ipv6/ip6_tunnel.c | 10 +++++-----
net/ipv6/mcast.c | 37 ++++++++++++++++++-------------------
net/ipv6/ndisc.c | 2 +-
net/ipv6/netfilter/ip6_queue.c | 4 ++--
net/ipv6/netfilter/ip6t_rt.c | 4 ++--
net/ipv6/raw.c | 8 ++++----
net/ipv6/reassembly.c | 8 ++++----
net/ipv6/route.c | 8 ++++----
net/ipv6/tcp_ipv6.c | 16 ++++++++--------
net/ipv6/udp.c | 12 ++++++------
net/ipv6/xfrm6_policy.c | 6 +++---
net/ipv6/xfrm6_state.c | 6 +++---
net/sctp/ipv6.c | 2 +-
22 files changed, 103 insertions(+), 84 deletions(-)
CHANGESETS
----------
ChangeSet@1.2607, 2004-11-09 14:07:14+09:00, yoshfuji@linux-ipv6.org
[IPV6] Fix unresolved symbol timer_bug_msg.
Closed: Bug#3717 (by John Goerzen <goerzen@complete.org>)
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/tcp.h b/include/net/tcp.h
--- a/include/net/tcp.h 2004-11-10 16:44:58 +09:00
+++ b/include/net/tcp.h 2004-11-10 16:44:58 +09:00
@@ -965,7 +965,9 @@
extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
extern unsigned int tcp_current_mss(struct sock *sk, int large);
-extern const char timer_bug_msg[];
+#ifdef TCP_DEBUG
+extern const char tcp_timer_bug_msg[];
+#endif
/* tcp_diag.c */
extern void tcp_get_info(struct sock *, struct tcp_info *);
@@ -998,7 +1000,9 @@
#endif
break;
default:
- printk(timer_bug_msg);
+#ifdef TCP_DEBUG
+ printk(tcp_timer_bug_msg);
+#endif
return;
};
@@ -1033,7 +1037,9 @@
break;
default:
- printk(timer_bug_msg);
+#ifdef TCP_DEBUG
+ printk(tcp_timer_bug_msg);
+#endif
};
}
diff -Nru a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
--- a/net/ipv4/tcp_timer.c 2004-11-10 16:44:58 +09:00
+++ b/net/ipv4/tcp_timer.c 2004-11-10 16:44:58 +09:00
@@ -36,7 +36,9 @@
static void tcp_delack_timer(unsigned long);
static void tcp_keepalive_timer (unsigned long data);
-const char timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer value\n";
+#ifdef TCP_DEBUG
+const char tcp_timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer value\n";
+#endif
/*
* Using different timers for retransmit, delayed acks and probes
@@ -651,3 +653,6 @@
EXPORT_SYMBOL(tcp_delete_keepalive_timer);
EXPORT_SYMBOL(tcp_init_xmit_timers);
EXPORT_SYMBOL(tcp_reset_keepalive_timer);
+#ifdef TCP_DEBUG
+EXPORT_SYMBOL(tcp_timer_bug_msg);
+#endif
ChangeSet@1.2608, 2004-11-10 15:50:50+09:00, yoshfuji@linux-ipv6.org
[IPV6] introduce lightweight IPv6 address comparison function.
It is not optimal to use ipv6_addr_cmp() for simple address
comparison, which checks if two addresses are equal.
Based on idea from Dave Craig <dwcraig@qualcomm.com>.
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/ipv6.h b/include/net/ipv6.h
--- a/include/net/ipv6.h 2004-11-10 16:45:02 +09:00
+++ b/include/net/ipv6.h 2004-11-10 16:45:02 +09:00
@@ -296,6 +296,15 @@
}
#endif
+static inline int ipv6_addr_equal(const struct in6_addr *a1,
+ const struct in6_addr *a2)
+{
+ return (a1->s6_addr32[0] == a2->s6_addr32[0] &&
+ a1->s6_addr32[1] == a2->s6_addr32[1] &&
+ a1->s6_addr32[2] == a2->s6_addr32[2] &&
+ a1->s6_addr32[3] == a2->s6_addr32[3]);
+}
+
static inline int ipv6_addr_any(const struct in6_addr *a)
{
return ((a->s6_addr32[0] | a->s6_addr32[1] |
ChangeSet@1.2609, 2004-11-10 15:57:15+09:00, yoshfuji@linux-ipv6.org
[IPV6] Use ipv6_addr_equal() where appropriate.
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/tcp.h b/include/net/tcp.h
--- a/include/net/tcp.h 2004-11-10 16:45:07 +09:00
+++ b/include/net/tcp.h 2004-11-10 16:45:07 +09:00
@@ -361,8 +361,8 @@
#define TCP_IPV6_MATCH(__sk, __saddr, __daddr, __ports, __dif) \
(((*((__u32 *)&(inet_sk(__sk)->dport)))== (__ports)) && \
((__sk)->sk_family == AF_INET6) && \
- !ipv6_addr_cmp(&inet6_sk(__sk)->daddr, (__saddr)) && \
- !ipv6_addr_cmp(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
+ ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
+ ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
/* These can have wildcards, don't try too hard. */
diff -Nru a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
--- a/net/ipv6/addrconf.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/addrconf.c 2004-11-10 16:45:07 +09:00
@@ -921,7 +921,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0 &&
+ if (ipv6_addr_equal(&ifp->addr, addr) &&
!(ifp->flags&IFA_F_TENTATIVE)) {
if (dev == NULL || ifp->idev->dev == dev ||
!(ifp->scope&(IFA_LINK|IFA_HOST) || strict))
@@ -940,7 +940,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0) {
+ if (ipv6_addr_equal(&ifp->addr, addr)) {
if (dev == NULL || ifp->idev->dev == dev)
break;
}
@@ -956,7 +956,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0) {
+ if (ipv6_addr_equal(&ifp->addr, addr)) {
if (dev == NULL || ifp->idev->dev == dev ||
!(ifp->scope&(IFA_LINK|IFA_HOST) || strict)) {
in6_ifa_hold(ifp);
@@ -992,7 +992,7 @@
return 1;
if (sk2_rcv_saddr6 &&
- !ipv6_addr_cmp(sk_rcv_saddr6, sk2_rcv_saddr6))
+ ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
return 1;
if (addr_type == IPV6_ADDR_MAPPED &&
@@ -1630,7 +1630,7 @@
read_lock_bh(&idev->lock);
for (ifp = idev->addr_list; ifp; ifp=ifp->if_next) {
if (ifp->prefix_len == plen &&
- (!memcmp(pfx, &ifp->addr, sizeof(struct in6_addr)))) {
+ ipv6_addr_equal(pfx, &ifp->addr)) {
in6_ifa_hold(ifp);
read_unlock_bh(&idev->lock);
diff -Nru a/net/ipv6/anycast.c b/net/ipv6/anycast.c
--- a/net/ipv6/anycast.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/anycast.c 2004-11-10 16:45:07 +09:00
@@ -205,7 +205,7 @@
prev_pac = NULL;
for (pac = np->ipv6_ac_list; pac; pac = pac->acl_next) {
if ((ifindex == 0 || pac->acl_ifindex == ifindex) &&
- ipv6_addr_cmp(&pac->acl_addr, addr) == 0)
+ ipv6_addr_equal(&pac->acl_addr, addr))
break;
prev_pac = pac;
}
@@ -278,7 +278,7 @@
for (pac=np->ipv6_ac_list; pac; pac=pac->acl_next) {
if (ifindex && pac->acl_ifindex != ifindex)
continue;
- found = ipv6_addr_cmp(&pac->acl_addr, addr) == 0;
+ found = ipv6_addr_equal(&pac->acl_addr, addr);
if (found)
break;
}
@@ -320,7 +320,7 @@
}
for (aca = idev->ac_list; aca; aca = aca->aca_next) {
- if (ipv6_addr_cmp(&aca->aca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&aca->aca_addr, addr)) {
aca->aca_users++;
err = 0;
goto out;
@@ -384,7 +384,7 @@
write_lock_bh(&idev->lock);
prev_aca = NULL;
for (aca = idev->ac_list; aca; aca = aca->aca_next) {
- if (ipv6_addr_cmp(&aca->aca_addr, addr) == 0)
+ if (ipv6_addr_equal(&aca->aca_addr, addr))
break;
prev_aca = aca;
}
@@ -436,7 +436,7 @@
if (idev) {
read_lock_bh(&idev->lock);
for (aca = idev->ac_list; aca; aca = aca->aca_next)
- if (ipv6_addr_cmp(&aca->aca_addr, addr) == 0)
+ if (ipv6_addr_equal(&aca->aca_addr, addr))
break;
read_unlock_bh(&idev->lock);
in6_dev_put(idev);
diff -Nru a/net/ipv6/datagram.c b/net/ipv6/datagram.c
--- a/net/ipv6/datagram.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/datagram.c 2004-11-10 16:45:07 +09:00
@@ -190,7 +190,7 @@
}
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl.fl6_dst, &np->daddr) ?
+ ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ?
&np->daddr : NULL);
sk->sk_state = TCP_ESTABLISHED;
diff -Nru a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
--- a/net/ipv6/ip6_fib.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_fib.c 2004-11-10 16:45:07 +09:00
@@ -451,8 +451,8 @@
if (iter->rt6i_dev == rt->rt6i_dev &&
iter->rt6i_idev == rt->rt6i_idev &&
- ipv6_addr_cmp(&iter->rt6i_gateway,
- &rt->rt6i_gateway) == 0) {
+ ipv6_addr_equal(&iter->rt6i_gateway,
+ &rt->rt6i_gateway)) {
if (!(iter->rt6i_flags&RTF_EXPIRES))
return -EEXIST;
iter->rt6i_expires = rt->rt6i_expires;
diff -Nru a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
--- a/net/ipv6/ip6_flowlabel.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_flowlabel.c 2004-11-10 16:45:07 +09:00
@@ -500,7 +500,7 @@
goto release;
err = -EINVAL;
- if (ipv6_addr_cmp(&fl1->dst, &fl->dst) ||
+ if (!ipv6_addr_equal(&fl1->dst, &fl->dst) ||
ipv6_opt_cmp(fl1->opt, fl->opt))
goto release;
diff -Nru a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
--- a/net/ipv6/ip6_output.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_output.c 2004-11-10 16:45:07 +09:00
@@ -768,9 +768,9 @@
*/
if (((rt->rt6i_dst.plen != 128 ||
- ipv6_addr_cmp(&fl->fl6_dst, &rt->rt6i_dst.addr))
+ !ipv6_addr_equal(&fl->fl6_dst, &rt->rt6i_dst.addr))
&& (np->daddr_cache == NULL ||
- ipv6_addr_cmp(&fl->fl6_dst, np->daddr_cache)))
+ !ipv6_addr_equal(&fl->fl6_dst, np->daddr_cache)))
|| (fl->oif && fl->oif != (*dst)->dev->ifindex)) {
*dst = NULL;
} else
diff -Nru a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
--- a/net/ipv6/ip6_tunnel.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_tunnel.c 2004-11-10 16:45:07 +09:00
@@ -133,8 +133,8 @@
struct ip6_tnl *t;
for (t = tnls_r_l[h0 ^ h1]; t; t = t->next) {
- if (!ipv6_addr_cmp(local, &t->parms.laddr) &&
- !ipv6_addr_cmp(remote, &t->parms.raddr) &&
+ if (ipv6_addr_equal(local, &t->parms.laddr) &&
+ ipv6_addr_equal(remote, &t->parms.raddr) &&
(t->dev->flags & IFF_UP))
return t;
}
@@ -284,8 +284,8 @@
return -EINVAL;
for (t = *ip6ip6_bucket(p); t; t = t->next) {
- if (!ipv6_addr_cmp(local, &t->parms.laddr) &&
- !ipv6_addr_cmp(remote, &t->parms.raddr)) {
+ if (ipv6_addr_equal(local, &t->parms.laddr) &&
+ ipv6_addr_equal(remote, &t->parms.raddr)) {
*pt = t;
return (create ? -EEXIST : 0);
}
@@ -602,7 +602,7 @@
static inline int
ip6ip6_tnl_addr_conflict(struct ip6_tnl *t, struct ipv6hdr *hdr)
{
- return !ipv6_addr_cmp(&t->parms.raddr, &hdr->saddr);
+ return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr);
}
/**
diff -Nru a/net/ipv6/mcast.c b/net/ipv6/mcast.c
--- a/net/ipv6/mcast.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/mcast.c 2004-11-10 16:45:07 +09:00
@@ -247,7 +247,7 @@
write_lock_bh(&ipv6_sk_mc_lock);
for (lnk = &np->ipv6_mc_list; (mc_lst = *lnk) !=NULL ; lnk = &mc_lst->next) {
if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
- ipv6_addr_cmp(&mc_lst->addr, addr) == 0) {
+ ipv6_addr_equal(&mc_lst->addr, addr)) {
struct net_device *dev;
*lnk = mc_lst->next;
@@ -369,7 +369,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pgsr->gsr_interface && pmc->ifindex != pgsr->gsr_interface)
continue;
- if (ipv6_addr_cmp(&pmc->addr, group) == 0)
+ if (ipv6_addr_equal(&pmc->addr, group))
break;
}
if (!pmc) /* must have a prior join */
@@ -485,7 +485,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pmc->ifindex != gsf->gf_interface)
continue;
- if (ipv6_addr_cmp(&pmc->addr, group) == 0)
+ if (ipv6_addr_equal(&pmc->addr, group))
break;
}
if (!pmc) /* must have a prior join */
@@ -556,7 +556,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pmc->ifindex != gsf->gf_interface)
continue;
- if (ipv6_addr_cmp(group, &pmc->addr) == 0)
+ if (ipv6_addr_equal(group, &pmc->addr))
break;
}
if (!pmc) /* must have a prior join */
@@ -603,7 +603,7 @@
read_lock(&ipv6_sk_mc_lock);
for (mc = np->ipv6_mc_list; mc; mc = mc->next) {
- if (ipv6_addr_cmp(&mc->addr, mc_addr) == 0)
+ if (ipv6_addr_equal(&mc->addr, mc_addr))
break;
}
if (!mc) {
@@ -617,7 +617,7 @@
int i;
for (i=0; i<psl->sl_count; i++) {
- if (ipv6_addr_cmp(&psl->sl_addr[i], src_addr) == 0)
+ if (ipv6_addr_equal(&psl->sl_addr[i], src_addr))
break;
}
if (mc->sfmode == MCAST_INCLUDE && i >= psl->sl_count)
@@ -740,7 +740,7 @@
write_lock_bh(&idev->mc_lock);
pmc_prev = NULL;
for (pmc=idev->mc_tomb; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(&pmc->mca_addr, pmca) == 0)
+ if (ipv6_addr_equal(&pmc->mca_addr, pmca))
break;
pmc_prev = pmc;
}
@@ -816,7 +816,7 @@
}
for (mc = idev->mc_list; mc; mc = mc->next) {
- if (ipv6_addr_cmp(&mc->mca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&mc->mca_addr, addr)) {
mc->mca_users++;
write_unlock_bh(&idev->lock);
ip6_mc_add_src(idev, &mc->mca_addr, MCAST_EXCLUDE, 0,
@@ -878,7 +878,7 @@
write_lock_bh(&idev->lock);
for (map = &idev->mc_list; (ma=*map) != NULL; map = &ma->next) {
- if (ipv6_addr_cmp(&ma->mca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&ma->mca_addr, addr)) {
if (--ma->mca_users == 0) {
*map = ma->next;
write_unlock_bh(&idev->lock);
@@ -953,7 +953,7 @@
if (idev) {
read_lock_bh(&idev->lock);
for (mc = idev->mc_list; mc; mc=mc->next) {
- if (ipv6_addr_cmp(&mc->mca_addr, group) == 0)
+ if (ipv6_addr_equal(&mc->mca_addr, group))
break;
}
if (mc) {
@@ -962,8 +962,7 @@
spin_lock_bh(&mc->mca_lock);
for (psf=mc->mca_sources;psf;psf=psf->sf_next) {
- if (ipv6_addr_cmp(&psf->sf_addr,
- src_addr) == 0)
+ if (ipv6_addr_equal(&psf->sf_addr, src_addr))
break;
}
if (psf)
@@ -1040,7 +1039,7 @@
if (scount == nsrcs)
break;
for (i=0; i<nsrcs; i++)
- if (ipv6_addr_cmp(&srcs[i], &psf->sf_addr) == 0) {
+ if (ipv6_addr_equal(&srcs[i], &psf->sf_addr)) {
psf->sf_gsresp = 1;
scount++;
break;
@@ -1135,7 +1134,7 @@
} else {
for (ma = idev->mc_list; ma; ma=ma->next) {
if (group_type != IPV6_ADDR_ANY &&
- ipv6_addr_cmp(group, &ma->mca_addr) != 0)
+ !ipv6_addr_equal(group, &ma->mca_addr))
continue;
spin_lock_bh(&ma->mca_lock);
if (ma->mca_flags & MAF_TIMER_RUNNING) {
@@ -1200,7 +1199,7 @@
read_lock_bh(&idev->lock);
for (ma = idev->mc_list; ma; ma=ma->next) {
- if (ipv6_addr_cmp(&ma->mca_addr, addrp) == 0) {
+ if (ipv6_addr_equal(&ma->mca_addr, addrp)) {
spin_lock(&ma->mca_lock);
if (del_timer(&ma->mca_timer))
atomic_dec(&ma->mca_refcnt);
@@ -1695,7 +1694,7 @@
psf_prev = NULL;
for (psf=pmc->mca_sources; psf; psf=psf->sf_next) {
- if (ipv6_addr_cmp(&psf->sf_addr, psfsrc) == 0)
+ if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
break;
psf_prev = psf;
}
@@ -1735,7 +1734,7 @@
return -ENODEV;
read_lock_bh(&idev->lock);
for (pmc=idev->mc_list; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(pmca, &pmc->mca_addr) == 0)
+ if (ipv6_addr_equal(pmca, &pmc->mca_addr))
break;
}
if (!pmc) {
@@ -1790,7 +1789,7 @@
psf_prev = NULL;
for (psf=pmc->mca_sources; psf; psf=psf->sf_next) {
- if (ipv6_addr_cmp(&psf->sf_addr, psfsrc) == 0)
+ if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
break;
psf_prev = psf;
}
@@ -1859,7 +1858,7 @@
return -ENODEV;
read_lock_bh(&idev->lock);
for (pmc=idev->mc_list; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(pmca, &pmc->mca_addr) == 0)
+ if (ipv6_addr_equal(pmca, &pmc->mca_addr))
break;
}
if (!pmc) {
diff -Nru a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
--- a/net/ipv6/ndisc.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ndisc.c 2004-11-10 16:45:07 +09:00
@@ -1219,7 +1219,7 @@
return;
}
- if (ipv6_addr_cmp(dest, target) == 0) {
+ if (ipv6_addr_equal(dest, target)) {
on_link = 1;
} else if (!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
ND_PRINTK2(KERN_WARNING
diff -Nru a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c
--- a/net/ipv6/netfilter/ip6_queue.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/netfilter/ip6_queue.c 2004-11-10 16:45:07 +09:00
@@ -376,8 +376,8 @@
*/
if (e->info->hook == NF_IP_LOCAL_OUT) {
struct ipv6hdr *iph = e->skb->nh.ipv6h;
- if (ipv6_addr_cmp(&iph->daddr, &e->rt_info.daddr) ||
- ipv6_addr_cmp(&iph->saddr, &e->rt_info.saddr))
+ if (!ipv6_addr_equal(&iph->daddr, &e->rt_info.daddr) ||
+ !ipv6_addr_equal(&iph->saddr, &e->rt_info.saddr))
return ip6_route_me_harder(e->skb);
}
return 0;
diff -Nru a/net/ipv6/netfilter/ip6t_rt.c b/net/ipv6/netfilter/ip6t_rt.c
--- a/net/ipv6/netfilter/ip6t_rt.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/netfilter/ip6t_rt.c 2004-11-10 16:45:07 +09:00
@@ -209,7 +209,7 @@
BUG_ON(ap == NULL);
- if (!ipv6_addr_cmp(ap, &rtinfo->addrs[i])) {
+ if (ipv6_addr_equal(ap, &rtinfo->addrs[i])) {
DEBUGP("i=%d temp=%d;\n",i,temp);
i++;
}
@@ -236,7 +236,7 @@
&_addr);
BUG_ON(ap == NULL);
- if (ipv6_addr_cmp(ap, &rtinfo->addrs[temp]))
+ if (!ipv6_addr_equal(ap, &rtinfo->addrs[temp]))
break;
}
DEBUGP("temp=%d #%d\n", temp, rtinfo->addrnr);
diff -Nru a/net/ipv6/raw.c b/net/ipv6/raw.c
--- a/net/ipv6/raw.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/raw.c 2004-11-10 16:45:07 +09:00
@@ -90,11 +90,11 @@
struct ipv6_pinfo *np = inet6_sk(sk);
if (!ipv6_addr_any(&np->daddr) &&
- ipv6_addr_cmp(&np->daddr, rmt_addr))
+ !ipv6_addr_equal(&np->daddr, rmt_addr))
continue;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if (!ipv6_addr_cmp(&np->rcv_saddr, loc_addr))
+ if (ipv6_addr_equal(&np->rcv_saddr, loc_addr))
goto found;
if (is_multicast &&
inet6_mc_check(sk, loc_addr, rmt_addr))
@@ -668,7 +668,7 @@
* sk->sk_dst_cache.
*/
if (sk->sk_state == TCP_ESTABLISHED &&
- !ipv6_addr_cmp(daddr, &np->daddr))
+ ipv6_addr_equal(daddr, &np->daddr))
daddr = &np->daddr;
if (addr_len >= sizeof(struct sockaddr_in6) &&
@@ -775,7 +775,7 @@
}
done:
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl.fl6_dst, &np->daddr) ?
+ ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ?
&np->daddr : NULL);
if (err > 0)
err = np->recverr ? net_xmit_errno(err) : 0;
diff -Nru a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
--- a/net/ipv6/reassembly.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/reassembly.c 2004-11-10 16:45:07 +09:00
@@ -342,8 +342,8 @@
#ifdef CONFIG_SMP
for (fq = ip6_frag_hash[hash]; fq; fq = fq->next) {
if (fq->id == fq_in->id &&
- !ipv6_addr_cmp(&fq_in->saddr, &fq->saddr) &&
- !ipv6_addr_cmp(&fq_in->daddr, &fq->daddr)) {
+ ipv6_addr_equal(&fq_in->saddr, &fq->saddr) &&
+ ipv6_addr_equal(&fq_in->daddr, &fq->daddr)) {
atomic_inc(&fq->refcnt);
write_unlock(&ip6_frag_lock);
fq_in->last_in |= COMPLETE;
@@ -406,8 +406,8 @@
read_lock(&ip6_frag_lock);
for(fq = ip6_frag_hash[hash]; fq; fq = fq->next) {
if (fq->id == id &&
- !ipv6_addr_cmp(src, &fq->saddr) &&
- !ipv6_addr_cmp(dst, &fq->daddr)) {
+ ipv6_addr_equal(src, &fq->saddr) &&
+ ipv6_addr_equal(dst, &fq->daddr)) {
atomic_inc(&fq->refcnt);
read_unlock(&ip6_frag_lock);
return fq;
diff -Nru a/net/ipv6/route.c b/net/ipv6/route.c
--- a/net/ipv6/route.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/route.c 2004-11-10 16:45:07 +09:00
@@ -1006,7 +1006,7 @@
rt->rt6i_dev->ifindex != rtmsg->rtmsg_ifindex))
continue;
if (rtmsg->rtmsg_flags&RTF_GATEWAY &&
- ipv6_addr_cmp(&rtmsg->rtmsg_gateway, &rt->rt6i_gateway))
+ !ipv6_addr_equal(&rtmsg->rtmsg_gateway, &rt->rt6i_gateway))
continue;
if (rtmsg->rtmsg_metric &&
rtmsg->rtmsg_metric != rt->rt6i_metric)
@@ -1057,13 +1057,13 @@
* is a bit fuzzy and one might need to check all default
* routers.
*/
- if (ipv6_addr_cmp(saddr, &rt->rt6i_gateway)) {
+ if (!ipv6_addr_equal(saddr, &rt->rt6i_gateway)) {
if (rt->rt6i_flags & RTF_DEFAULT) {
struct rt6_info *rt1;
read_lock(&rt6_lock);
for (rt1 = ip6_routing_table.leaf; rt1; rt1 = rt1->u.next) {
- if (!ipv6_addr_cmp(saddr, &rt1->rt6i_gateway)) {
+ if (ipv6_addr_equal(saddr, &rt1->rt6i_gateway)) {
dst_hold(&rt1->u.dst);
dst_release(&rt->u.dst);
read_unlock(&rt6_lock);
@@ -1262,7 +1262,7 @@
write_lock_bh(&rt6_lock);
for (rt = fn->leaf; rt; rt=rt->u.next) {
if (dev == rt->rt6i_dev &&
- ipv6_addr_cmp(&rt->rt6i_gateway, addr) == 0)
+ ipv6_addr_equal(&rt->rt6i_gateway, addr))
break;
}
if (rt)
diff -Nru a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
--- a/net/ipv6/tcp_ipv6.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/tcp_ipv6.c 2004-11-10 16:45:07 +09:00
@@ -262,7 +262,7 @@
score = 1;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if (ipv6_addr_cmp(&np->rcv_saddr, daddr))
+ if (!ipv6_addr_equal(&np->rcv_saddr, daddr))
continue;
score++;
}
@@ -321,8 +321,8 @@
if(*((__u32 *)&(tw->tw_dport)) == ports &&
sk->sk_family == PF_INET6) {
- if(!ipv6_addr_cmp(&tw->tw_v6_daddr, saddr) &&
- !ipv6_addr_cmp(&tw->tw_v6_rcv_saddr, daddr) &&
+ if(ipv6_addr_equal(&tw->tw_v6_daddr, saddr) &&
+ ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr) &&
(!sk->sk_bound_dev_if || sk->sk_bound_dev_if == dif))
goto hit;
}
@@ -406,8 +406,8 @@
prev = &req->dl_next) {
if (req->rmt_port == rport &&
req->class->family == AF_INET6 &&
- !ipv6_addr_cmp(&req->af.v6_req.rmt_addr, raddr) &&
- !ipv6_addr_cmp(&req->af.v6_req.loc_addr, laddr) &&
+ ipv6_addr_equal(&req->af.v6_req.rmt_addr, raddr) &&
+ ipv6_addr_equal(&req->af.v6_req.loc_addr, laddr) &&
(!req->af.v6_req.iif || req->af.v6_req.iif == iif)) {
BUG_TRAP(req->sk == NULL);
*prevp = prev;
@@ -463,8 +463,8 @@
if(*((__u32 *)&(tw->tw_dport)) == ports &&
sk2->sk_family == PF_INET6 &&
- !ipv6_addr_cmp(&tw->tw_v6_daddr, saddr) &&
- !ipv6_addr_cmp(&tw->tw_v6_rcv_saddr, daddr) &&
+ ipv6_addr_equal(&tw->tw_v6_daddr, saddr) &&
+ ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr) &&
sk2->sk_bound_dev_if == sk->sk_bound_dev_if) {
struct tcp_opt *tp = tcp_sk(sk);
@@ -610,7 +610,7 @@
}
if (tp->ts_recent_stamp &&
- ipv6_addr_cmp(&np->daddr, &usin->sin6_addr)) {
+ !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
tp->ts_recent = 0;
tp->ts_recent_stamp = 0;
tp->write_seq = 0;
diff -Nru a/net/ipv6/udp.c b/net/ipv6/udp.c
--- a/net/ipv6/udp.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/udp.c 2004-11-10 16:45:07 +09:00
@@ -171,12 +171,12 @@
score++;
}
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if (ipv6_addr_cmp(&np->rcv_saddr, daddr))
+ if (!ipv6_addr_equal(&np->rcv_saddr, daddr))
continue;
score++;
}
if (!ipv6_addr_any(&np->daddr)) {
- if (ipv6_addr_cmp(&np->daddr, saddr))
+ if (!ipv6_addr_equal(&np->daddr, saddr))
continue;
score++;
}
@@ -395,14 +395,14 @@
continue;
}
if (!ipv6_addr_any(&np->daddr) &&
- ipv6_addr_cmp(&np->daddr, rmt_addr))
+ !ipv6_addr_equal(&np->daddr, rmt_addr))
continue;
if (s->sk_bound_dev_if && s->sk_bound_dev_if != dif)
continue;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if (!ipv6_addr_cmp(&np->rcv_saddr, loc_addr))
+ if (ipv6_addr_equal(&np->rcv_saddr, loc_addr))
return s;
continue;
}
@@ -732,7 +732,7 @@
* sk->sk_dst_cache.
*/
if (sk->sk_state == TCP_ESTABLISHED &&
- !ipv6_addr_cmp(daddr, &np->daddr))
+ ipv6_addr_equal(daddr, &np->daddr))
daddr = &np->daddr;
if (addr_len >= sizeof(struct sockaddr_in6) &&
@@ -840,7 +840,7 @@
if (dst)
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl->fl6_dst, &np->daddr) ?
+ ipv6_addr_equal(&fl->fl6_dst, &np->daddr) ?
&np->daddr : NULL);
if (err > 0)
err = np->recverr ? net_xmit_errno(err) : 0;
diff -Nru a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
--- a/net/ipv6/xfrm6_policy.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/xfrm6_policy.c 2004-11-10 16:45:07 +09:00
@@ -68,8 +68,8 @@
ipv6_addr_prefix(&fl_src_prefix,
&fl->fl6_src,
xdst->u.rt6.rt6i_src.plen);
- if (!ipv6_addr_cmp(&xdst->u.rt6.rt6i_dst.addr, &fl_dst_prefix) &&
- !ipv6_addr_cmp(&xdst->u.rt6.rt6i_src.addr, &fl_src_prefix) &&
+ if (ipv6_addr_equal(&xdst->u.rt6.rt6i_dst.addr, &fl_dst_prefix) &&
+ ipv6_addr_equal(&xdst->u.rt6.rt6i_src.addr, &fl_src_prefix) &&
__xfrm6_bundle_ok(xdst, fl)) {
dst_clone(dst);
break;
@@ -123,7 +123,7 @@
trailer_len += xfrm[i]->props.trailer_len;
}
- if (ipv6_addr_cmp(remote, &fl->fl6_dst)) {
+ if (!ipv6_addr_equal(remote, &fl->fl6_dst)) {
struct flowi fl_tunnel;
memset(&fl_tunnel, 0, sizeof(fl_tunnel));
diff -Nru a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c
--- a/net/ipv6/xfrm6_state.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/xfrm6_state.c 2004-11-10 16:45:07 +09:00
@@ -55,7 +55,7 @@
list_for_each_entry(x, xfrm6_state_afinfo.state_byspi+h, byspi) {
if (x->props.family == AF_INET6 &&
spi == x->id.spi &&
- !ipv6_addr_cmp((struct in6_addr *)daddr, (struct in6_addr *)x->id.daddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)daddr, (struct in6_addr *)x->id.daddr.a6) &&
proto == x->id.proto) {
xfrm_state_hold(x);
return x;
@@ -76,10 +76,10 @@
list_for_each_entry(x, xfrm6_state_afinfo.state_bydst+h, bydst) {
if (x->props.family == AF_INET6 &&
- !ipv6_addr_cmp((struct in6_addr *)daddr, (struct in6_addr *)x->id.daddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)daddr, (struct in6_addr *)x->id.daddr.a6) &&
mode == x->props.mode &&
proto == x->id.proto &&
- !ipv6_addr_cmp((struct in6_addr *)saddr, (struct in6_addr *)x->props.saddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)saddr, (struct in6_addr *)x->props.saddr.a6) &&
reqid == x->props.reqid &&
x->km.state == XFRM_STATE_ACQ &&
!x->id.spi) {
diff -Nru a/net/sctp/ipv6.c b/net/sctp/ipv6.c
--- a/net/sctp/ipv6.c 2004-11-10 16:45:07 +09:00
+++ b/net/sctp/ipv6.c 2004-11-10 16:45:07 +09:00
@@ -461,7 +461,7 @@
}
return 0;
}
- if (ipv6_addr_cmp(&addr1->v6.sin6_addr, &addr2->v6.sin6_addr))
+ if (!ipv6_addr_equal(&addr1->v6.sin6_addr, &addr2->v6.sin6_addr))
return 0;
/* If this is a linklocal address, compare the scope_id. */
if (ipv6_addr_type(&addr1->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) {
--
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@linux-ipv6.org>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BK PATCH] Misc IPv6 Updates
2004-11-10 8:00 [BK PATCH] Misc IPv6 Updates YOSHIFUJI Hideaki / 吉藤英明
@ 2004-11-10 18:20 ` Krishna Kumar
2004-11-10 21:18 ` Brian Haley
2004-11-10 21:25 ` YOSHIFUJI Hideaki / 吉藤英明
2004-11-11 23:18 ` David S. Miller
1 sibling, 2 replies; 6+ messages in thread
From: Krishna Kumar @ 2004-11-10 18:20 UTC (permalink / raw)
To: YOSHIFUJI Hideaki / 吉藤英明; +Cc: davem, netdev
[-- Attachment #1.1: Type: text/plain, Size: 44036 bytes --]
(sorry if my mailer mangles the code)
In :
+static inline int ipv6_addr_equal(const struct in6_addr *a1,
+ const struct in6_addr
*a2)
+{
+ return (a1->s6_addr32[0] == a2->s6_addr32[0] &&
+ a1->s6_addr32[1] == a2->s6_addr32[1] &&
+ a1->s6_addr32[2] == a2->s6_addr32[2] &&
+ a1->s6_addr32[3] == a2->s6_addr32[3]);
+}
+
Is it faster to do :
+static inline int ipv6_addr_equal(const struct in6_addr *a1,
+ const struct in6_addr
*a2)
+{
+ return (a1->s6_addr32[3] == a2->s6_addr32[3] &&
+ a1->s6_addr32[2] == a2->s6_addr32[2] &&
+ a1->s6_addr32[1] == a2->s6_addr32[1] &&
+ a1->s6_addr32[0] == a2->s6_addr32[0]);
+}
+
instead ?It should be faster for typical addresses, say 2000:a:b:c::1 and
2000:a:b:c::2. The device EUI-64 is
normally going to be different for all devices while prefix can be same
(atleast on a link/local site) completely
or to some prefix len portion.
thanks,
- KK
YOSHIFUJI Hideaki
/ 吉藤英明
<yoshfuji@linux-i To
pv6.org> davem@davemloft.net
Sent by: cc
netdev-bounce@oss netdev@oss.sgi.com,
.sgi.com yoshfuji@linux-ipv6.org
Subject
[BK PATCH] Misc IPv6 Updates
11/10/2004 12:00
AM
Hello.
Here're changeset at:
bk://bk.skbuff.net:20610/linux-2.6-inet6-misc/
Note:
1. Bug#3717 will be closed next week, after my returning to Japan.
2. Since there're some points to retain ipv6_addr_cmp(),
let's introduce fast ipv6_addr_equal() and use it
where appropriate. (please double check.)
3. I'm not so worring about alignment because
we already have ipv6_addr_any() etc.
If you're unhappy with this, let me re-create changesets.
Thank you.
HEADLINES
---------
ChangeSet@1.2607, 2004-11-09 14:07:14+09:00, yoshfuji@linux-ipv6.org
[IPV6] Fix unresolved symbol timer_bug_msg.
ChangeSet@1.2608, 2004-11-10 15:50:50+09:00, yoshfuji@linux-ipv6.org
[IPV6] introduce lightweight IPv6 address comparison function.
ChangeSet@1.2609, 2004-11-10 15:57:15+09:00, yoshfuji@linux-ipv6.org
[IPV6] Use ipv6_addr_equal() where appropriate.
DIFFSTATS
---------
include/net/ipv6.h | 9 +++++++++
include/net/tcp.h | 16 +++++++++++-----
net/ipv4/tcp_timer.c | 7 ++++++-
net/ipv6/addrconf.c | 10 +++++-----
net/ipv6/anycast.c | 10 +++++-----
net/ipv6/datagram.c | 2 +-
net/ipv6/ip6_fib.c | 4 ++--
net/ipv6/ip6_flowlabel.c | 2 +-
net/ipv6/ip6_output.c | 4 ++--
net/ipv6/ip6_tunnel.c | 10 +++++-----
net/ipv6/mcast.c | 37
++++++++++++++++++-------------------
net/ipv6/ndisc.c | 2 +-
net/ipv6/netfilter/ip6_queue.c | 4 ++--
net/ipv6/netfilter/ip6t_rt.c | 4 ++--
net/ipv6/raw.c | 8 ++++----
net/ipv6/reassembly.c | 8 ++++----
net/ipv6/route.c | 8 ++++----
net/ipv6/tcp_ipv6.c | 16 ++++++++--------
net/ipv6/udp.c | 12 ++++++------
net/ipv6/xfrm6_policy.c | 6 +++---
net/ipv6/xfrm6_state.c | 6 +++---
net/sctp/ipv6.c | 2 +-
22 files changed, 103 insertions(+), 84 deletions(-)
CHANGESETS
----------
ChangeSet@1.2607, 2004-11-09 14:07:14+09:00, yoshfuji@linux-ipv6.org
[IPV6] Fix unresolved symbol timer_bug_msg.
Closed: Bug#3717 (by John Goerzen <goerzen@complete.org>)
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/tcp.h b/include/net/tcp.h
--- a/include/net/tcp.h 2004-11-10 16:44:58 +09:00
+++ b/include/net/tcp.h 2004-11-10 16:44:58 +09:00
@@ -965,7 +965,9 @@
extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
extern unsigned int tcp_current_mss(struct sock *sk, int large);
-extern const char timer_bug_msg[];
+#ifdef TCP_DEBUG
+extern const char tcp_timer_bug_msg[];
+#endif
/* tcp_diag.c */
extern void tcp_get_info(struct sock *, struct tcp_info *);
@@ -998,7 +1000,9 @@
#endif
break;
default:
- printk(timer_bug_msg);
+#ifdef TCP_DEBUG
+ printk(tcp_timer_bug_msg);
+#endif
return;
};
@@ -1033,7 +1037,9 @@
break;
default:
- printk(timer_bug_msg);
+#ifdef TCP_DEBUG
+ printk(tcp_timer_bug_msg);
+#endif
};
}
diff -Nru a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
--- a/net/ipv4/tcp_timer.c 2004-11-10 16:44:58 +09:00
+++ b/net/ipv4/tcp_timer.c 2004-11-10 16:44:58 +09:00
@@ -36,7 +36,9 @@
static void tcp_delack_timer(unsigned long);
static void tcp_keepalive_timer (unsigned long data);
-const char timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer value\n";
+#ifdef TCP_DEBUG
+const char tcp_timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer
value\n";
+#endif
/*
* Using different timers for retransmit, delayed acks and probes
@@ -651,3 +653,6 @@
EXPORT_SYMBOL(tcp_delete_keepalive_timer);
EXPORT_SYMBOL(tcp_init_xmit_timers);
EXPORT_SYMBOL(tcp_reset_keepalive_timer);
+#ifdef TCP_DEBUG
+EXPORT_SYMBOL(tcp_timer_bug_msg);
+#endif
ChangeSet@1.2608, 2004-11-10 15:50:50+09:00, yoshfuji@linux-ipv6.org
[IPV6] introduce lightweight IPv6 address comparison function.
It is not optimal to use ipv6_addr_cmp() for simple address
comparison, which checks if two addresses are equal.
Based on idea from Dave Craig <dwcraig@qualcomm.com>.
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/ipv6.h b/include/net/ipv6.h
--- a/include/net/ipv6.h 2004-11-10 16:45:02 +09:00
+++ b/include/net/ipv6.h 2004-11-10 16:45:02 +09:00
@@ -296,6 +296,15 @@
}
#endif
+static inline int ipv6_addr_equal(const struct in6_addr *a1,
+ const struct in6_addr
*a2)
+{
+ return (a1->s6_addr32[0] == a2->s6_addr32[0] &&
+ a1->s6_addr32[1] == a2->s6_addr32[1] &&
+ a1->s6_addr32[2] == a2->s6_addr32[2] &&
+ a1->s6_addr32[3] == a2->s6_addr32[3]);
+}
+
static inline int ipv6_addr_any(const struct in6_addr *a)
{
return ((a->s6_addr32[0] | a->s6_addr32[1] |
ChangeSet@1.2609, 2004-11-10 15:57:15+09:00, yoshfuji@linux-ipv6.org
[IPV6] Use ipv6_addr_equal() where appropriate.
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
diff -Nru a/include/net/tcp.h b/include/net/tcp.h
--- a/include/net/tcp.h 2004-11-10 16:45:07 +09:00
+++ b/include/net/tcp.h 2004-11-10 16:45:07 +09:00
@@ -361,8 +361,8 @@
#define TCP_IPV6_MATCH(__sk, __saddr, __daddr, __ports, __dif)
\
(((*((__u32 *)&(inet_sk(__sk)->dport)))== (__ports))
&& \
((__sk)->sk_family == AF_INET6)
&& \
- !ipv6_addr_cmp(&inet6_sk(__sk)->daddr, (__saddr)) &&
\
- !ipv6_addr_cmp(&inet6_sk(__sk)->rcv_saddr, (__daddr))
&& \
+ ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) &&
\
+ ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr))
&& \
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if ==
(__dif))))
/* These can have wildcards, don't try too hard. */
diff -Nru a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
--- a/net/ipv6/addrconf.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/addrconf.c 2004-11-10 16:45:07 +09:00
@@ -921,7 +921,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0 &&
+ if (ipv6_addr_equal(&ifp->addr, addr) &&
!(ifp->flags&IFA_F_TENTATIVE)) {
if (dev == NULL || ifp->idev->dev ==
dev ||
!(ifp->scope&(IFA_LINK|IFA_HOST)
|| strict))
@@ -940,7 +940,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0) {
+ if (ipv6_addr_equal(&ifp->addr, addr)) {
if (dev == NULL || ifp->idev->dev ==
dev)
break;
}
@@ -956,7 +956,7 @@
read_lock_bh(&addrconf_hash_lock);
for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
- if (ipv6_addr_cmp(&ifp->addr, addr) == 0) {
+ if (ipv6_addr_equal(&ifp->addr, addr)) {
if (dev == NULL || ifp->idev->dev ==
dev ||
!(ifp->scope&(IFA_LINK|IFA_HOST)
|| strict)) {
in6_ifa_hold(ifp);
@@ -992,7 +992,7 @@
return 1;
if (sk2_rcv_saddr6 &&
- !ipv6_addr_cmp(sk_rcv_saddr6, sk2_rcv_saddr6))
+ ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
return 1;
if (addr_type == IPV6_ADDR_MAPPED &&
@@ -1630,7 +1630,7 @@
read_lock_bh(&idev->lock);
for (ifp = idev->addr_list; ifp; ifp=ifp->if_next) {
if (ifp->prefix_len == plen &&
- (!memcmp(pfx, &ifp->addr, sizeof(struct
in6_addr)))) {
+ ipv6_addr_equal(pfx, &ifp->addr)) {
in6_ifa_hold(ifp);
read_unlock_bh(&idev->lock);
diff -Nru a/net/ipv6/anycast.c b/net/ipv6/anycast.c
--- a/net/ipv6/anycast.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/anycast.c 2004-11-10 16:45:07 +09:00
@@ -205,7 +205,7 @@
prev_pac = NULL;
for (pac = np->ipv6_ac_list; pac; pac = pac->acl_next) {
if ((ifindex == 0 || pac->acl_ifindex == ifindex)
&&
- ipv6_addr_cmp(&pac->acl_addr, addr) == 0)
+ ipv6_addr_equal(&pac->acl_addr, addr))
break;
prev_pac = pac;
}
@@ -278,7 +278,7 @@
for (pac=np->ipv6_ac_list; pac; pac=pac->acl_next) {
if (ifindex && pac->acl_ifindex != ifindex)
continue;
- found = ipv6_addr_cmp(&pac->acl_addr, addr) == 0;
+ found = ipv6_addr_equal(&pac->acl_addr, addr);
if (found)
break;
}
@@ -320,7 +320,7 @@
}
for (aca = idev->ac_list; aca; aca = aca->aca_next) {
- if (ipv6_addr_cmp(&aca->aca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&aca->aca_addr, addr)) {
aca->aca_users++;
err = 0;
goto out;
@@ -384,7 +384,7 @@
write_lock_bh(&idev->lock);
prev_aca = NULL;
for (aca = idev->ac_list; aca; aca = aca->aca_next) {
- if (ipv6_addr_cmp(&aca->aca_addr, addr) == 0)
+ if (ipv6_addr_equal(&aca->aca_addr, addr))
break;
prev_aca = aca;
}
@@ -436,7 +436,7 @@
if (idev) {
read_lock_bh(&idev->lock);
for (aca = idev->ac_list; aca; aca =
aca->aca_next)
- if (ipv6_addr_cmp(&aca->aca_addr,
addr) == 0)
+ if (ipv6_addr_equal(&aca->aca_addr,
addr))
break;
read_unlock_bh(&idev->lock);
in6_dev_put(idev);
diff -Nru a/net/ipv6/datagram.c b/net/ipv6/datagram.c
--- a/net/ipv6/datagram.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/datagram.c 2004-11-10 16:45:07 +09:00
@@ -190,7 +190,7 @@
}
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl.fl6_dst, &np->daddr) ?
+ ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ?
&np->daddr : NULL);
sk->sk_state = TCP_ESTABLISHED;
diff -Nru a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
--- a/net/ipv6/ip6_fib.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_fib.c 2004-11-10 16:45:07 +09:00
@@ -451,8 +451,8 @@
if (iter->rt6i_dev == rt->rt6i_dev &&
iter->rt6i_idev == rt->rt6i_idev
&&
- ipv6_addr_cmp(&iter->rt6i_gateway,
-
&rt->rt6i_gateway) == 0) {
+
ipv6_addr_equal(&iter->rt6i_gateway,
+
&rt->rt6i_gateway)) {
if
(!(iter->rt6i_flags&RTF_EXPIRES))
return
-EEXIST;
iter->rt6i_expires =
rt->rt6i_expires;
diff -Nru a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
--- a/net/ipv6/ip6_flowlabel.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_flowlabel.c 2004-11-10 16:45:07 +09:00
@@ -500,7 +500,7 @@
goto release;
err = -EINVAL;
- if
(ipv6_addr_cmp(&fl1->dst, &fl->dst) ||
+ if
(!ipv6_addr_equal(&fl1->dst, &fl->dst) ||
ipv6_opt_cmp(fl1->opt,
fl->opt))
goto release;
diff -Nru a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
--- a/net/ipv6/ip6_output.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_output.c 2004-11-10 16:45:07 +09:00
@@ -768,9 +768,9 @@
*/
if (((rt->rt6i_dst.plen != 128 ||
- ipv6_addr_cmp(&fl->fl6_dst,
&rt->rt6i_dst.addr))
+ !ipv6_addr_equal(&fl->fl6_dst,
&rt->rt6i_dst.addr))
&& (np->daddr_cache == NULL ||
-
ipv6_addr_cmp(&fl->fl6_dst, np->daddr_cache)))
+
!ipv6_addr_equal(&fl->fl6_dst, np->daddr_cache)))
|| (fl->oif && fl->oif !=
(*dst)->dev->ifindex)) {
*dst = NULL;
} else
diff -Nru a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
--- a/net/ipv6/ip6_tunnel.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ip6_tunnel.c 2004-11-10 16:45:07 +09:00
@@ -133,8 +133,8 @@
struct ip6_tnl *t;
for (t = tnls_r_l[h0 ^ h1]; t; t = t->next) {
- if (!ipv6_addr_cmp(local, &t->parms.laddr) &&
- !ipv6_addr_cmp(remote, &t->parms.raddr) &&
+ if (ipv6_addr_equal(local, &t->parms.laddr) &&
+ ipv6_addr_equal(remote, &t->parms.raddr) &&
(t->dev->flags & IFF_UP))
return t;
}
@@ -284,8 +284,8 @@
return -EINVAL;
for (t = *ip6ip6_bucket(p); t; t = t->next) {
- if (!ipv6_addr_cmp(local, &t->parms.laddr) &&
- !ipv6_addr_cmp(remote, &t->parms.raddr)) {
+ if (ipv6_addr_equal(local, &t->parms.laddr) &&
+ ipv6_addr_equal(remote, &t->parms.raddr)) {
*pt = t;
return (create ? -EEXIST : 0);
}
@@ -602,7 +602,7 @@
static inline int
ip6ip6_tnl_addr_conflict(struct ip6_tnl *t, struct ipv6hdr *hdr)
{
- return !ipv6_addr_cmp(&t->parms.raddr, &hdr->saddr);
+ return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr);
}
/**
diff -Nru a/net/ipv6/mcast.c b/net/ipv6/mcast.c
--- a/net/ipv6/mcast.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/mcast.c 2004-11-10 16:45:07 +09:00
@@ -247,7 +247,7 @@
write_lock_bh(&ipv6_sk_mc_lock);
for (lnk = &np->ipv6_mc_list; (mc_lst = *lnk) !=NULL ; lnk =
&mc_lst->next) {
if ((ifindex == 0 || mc_lst->ifindex == ifindex)
&&
- ipv6_addr_cmp(&mc_lst->addr, addr) == 0) {
+ ipv6_addr_equal(&mc_lst->addr, addr)) {
struct net_device *dev;
*lnk = mc_lst->next;
@@ -369,7 +369,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pgsr->gsr_interface && pmc->ifindex !=
pgsr->gsr_interface)
continue;
- if (ipv6_addr_cmp(&pmc->addr, group) == 0)
+ if (ipv6_addr_equal(&pmc->addr, group))
break;
}
if (!pmc) /* must have a prior join */
@@ -485,7 +485,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pmc->ifindex != gsf->gf_interface)
continue;
- if (ipv6_addr_cmp(&pmc->addr, group) == 0)
+ if (ipv6_addr_equal(&pmc->addr, group))
break;
}
if (!pmc) /* must have a prior join */
@@ -556,7 +556,7 @@
for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {
if (pmc->ifindex != gsf->gf_interface)
continue;
- if (ipv6_addr_cmp(group, &pmc->addr) == 0)
+ if (ipv6_addr_equal(group, &pmc->addr))
break;
}
if (!pmc) /* must have a prior join */
@@ -603,7 +603,7 @@
read_lock(&ipv6_sk_mc_lock);
for (mc = np->ipv6_mc_list; mc; mc = mc->next) {
- if (ipv6_addr_cmp(&mc->addr, mc_addr) == 0)
+ if (ipv6_addr_equal(&mc->addr, mc_addr))
break;
}
if (!mc) {
@@ -617,7 +617,7 @@
int i;
for (i=0; i<psl->sl_count; i++) {
- if (ipv6_addr_cmp(&psl->sl_addr[i],
src_addr) == 0)
+ if (ipv6_addr_equal(&psl->sl_addr[i],
src_addr))
break;
}
if (mc->sfmode == MCAST_INCLUDE && i >=
psl->sl_count)
@@ -740,7 +740,7 @@
write_lock_bh(&idev->mc_lock);
pmc_prev = NULL;
for (pmc=idev->mc_tomb; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(&pmc->mca_addr, pmca) == 0)
+ if (ipv6_addr_equal(&pmc->mca_addr, pmca))
break;
pmc_prev = pmc;
}
@@ -816,7 +816,7 @@
}
for (mc = idev->mc_list; mc; mc = mc->next) {
- if (ipv6_addr_cmp(&mc->mca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&mc->mca_addr, addr)) {
mc->mca_users++;
write_unlock_bh(&idev->lock);
ip6_mc_add_src(idev, &mc->mca_addr,
MCAST_EXCLUDE, 0,
@@ -878,7 +878,7 @@
write_lock_bh(&idev->lock);
for (map = &idev->mc_list; (ma=*map) != NULL; map = &ma->next)
{
- if (ipv6_addr_cmp(&ma->mca_addr, addr) == 0) {
+ if (ipv6_addr_equal(&ma->mca_addr, addr)) {
if (--ma->mca_users == 0) {
*map = ma->next;
write_unlock_bh(&idev->lock);
@@ -953,7 +953,7 @@
if (idev) {
read_lock_bh(&idev->lock);
for (mc = idev->mc_list; mc; mc=mc->next) {
- if (ipv6_addr_cmp(&mc->mca_addr,
group) == 0)
+ if (ipv6_addr_equal(&mc->mca_addr,
group))
break;
}
if (mc) {
@@ -962,8 +962,7 @@
spin_lock_bh(&mc->mca_lock);
for
(psf=mc->mca_sources;psf;psf=psf->sf_next) {
- if
(ipv6_addr_cmp(&psf->sf_addr,
- src_addr)
== 0)
+ if
(ipv6_addr_equal(&psf->sf_addr, src_addr))
break;
}
if (psf)
@@ -1040,7 +1039,7 @@
if (scount == nsrcs)
break;
for (i=0; i<nsrcs; i++)
- if (ipv6_addr_cmp(&srcs[i],
&psf->sf_addr) == 0) {
+ if (ipv6_addr_equal(&srcs[i],
&psf->sf_addr)) {
psf->sf_gsresp = 1;
scount++;
break;
@@ -1135,7 +1134,7 @@
} else {
for (ma = idev->mc_list; ma; ma=ma->next) {
if (group_type != IPV6_ADDR_ANY &&
- ipv6_addr_cmp(group,
&ma->mca_addr) != 0)
+ !ipv6_addr_equal(group,
&ma->mca_addr))
continue;
spin_lock_bh(&ma->mca_lock);
if (ma->mca_flags & MAF_TIMER_RUNNING)
{
@@ -1200,7 +1199,7 @@
read_lock_bh(&idev->lock);
for (ma = idev->mc_list; ma; ma=ma->next) {
- if (ipv6_addr_cmp(&ma->mca_addr, addrp) == 0) {
+ if (ipv6_addr_equal(&ma->mca_addr, addrp)) {
spin_lock(&ma->mca_lock);
if (del_timer(&ma->mca_timer))
atomic_dec(&ma->mca_refcnt);
@@ -1695,7 +1694,7 @@
psf_prev = NULL;
for (psf=pmc->mca_sources; psf; psf=psf->sf_next) {
- if (ipv6_addr_cmp(&psf->sf_addr, psfsrc) == 0)
+ if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
break;
psf_prev = psf;
}
@@ -1735,7 +1734,7 @@
return -ENODEV;
read_lock_bh(&idev->lock);
for (pmc=idev->mc_list; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(pmca, &pmc->mca_addr) == 0)
+ if (ipv6_addr_equal(pmca, &pmc->mca_addr))
break;
}
if (!pmc) {
@@ -1790,7 +1789,7 @@
psf_prev = NULL;
for (psf=pmc->mca_sources; psf; psf=psf->sf_next) {
- if (ipv6_addr_cmp(&psf->sf_addr, psfsrc) == 0)
+ if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
break;
psf_prev = psf;
}
@@ -1859,7 +1858,7 @@
return -ENODEV;
read_lock_bh(&idev->lock);
for (pmc=idev->mc_list; pmc; pmc=pmc->next) {
- if (ipv6_addr_cmp(pmca, &pmc->mca_addr) == 0)
+ if (ipv6_addr_equal(pmca, &pmc->mca_addr))
break;
}
if (!pmc) {
diff -Nru a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
--- a/net/ipv6/ndisc.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/ndisc.c 2004-11-10 16:45:07 +09:00
@@ -1219,7 +1219,7 @@
return;
}
- if (ipv6_addr_cmp(dest, target) == 0) {
+ if (ipv6_addr_equal(dest, target)) {
on_link = 1;
} else if (!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
ND_PRINTK2(KERN_WARNING
diff -Nru a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c
--- a/net/ipv6/netfilter/ip6_queue.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/netfilter/ip6_queue.c 2004-11-10 16:45:07 +09:00
@@ -376,8 +376,8 @@
*/
if (e->info->hook == NF_IP_LOCAL_OUT) {
struct ipv6hdr *iph = e->skb->nh.ipv6h;
- if (ipv6_addr_cmp(&iph->daddr, &e->rt_info.daddr)
||
- ipv6_addr_cmp(&iph->saddr, &e->rt_info.saddr))
+ if (!ipv6_addr_equal(&iph->daddr,
&e->rt_info.daddr) ||
+ !ipv6_addr_equal(&iph->saddr,
&e->rt_info.saddr))
return ip6_route_me_harder(e->skb);
}
return 0;
diff -Nru a/net/ipv6/netfilter/ip6t_rt.c b/net/ipv6/netfilter/ip6t_rt.c
--- a/net/ipv6/netfilter/ip6t_rt.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/netfilter/ip6t_rt.c 2004-11-10 16:45:07 +09:00
@@ -209,7 +209,7 @@
BUG_ON(ap == NULL);
- if (!ipv6_addr_cmp(ap,
&rtinfo->addrs[i])) {
+ if (ipv6_addr_equal(ap,
&rtinfo->addrs[i])) {
DEBUGP("i=%d
temp=%d;\n",i,temp);
i++;
}
@@ -236,7 +236,7 @@
&_addr);
BUG_ON(ap == NULL);
- if (ipv6_addr_cmp(ap,
&rtinfo->addrs[temp]))
+ if (!ipv6_addr_equal(ap,
&rtinfo->addrs[temp]))
break;
}
DEBUGP("temp=%d #%d\n", temp,
rtinfo->addrnr);
diff -Nru a/net/ipv6/raw.c b/net/ipv6/raw.c
--- a/net/ipv6/raw.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/raw.c 2004-11-10 16:45:07 +09:00
@@ -90,11 +90,11 @@
struct ipv6_pinfo *np = inet6_sk(sk);
if (!ipv6_addr_any(&np->daddr) &&
- ipv6_addr_cmp(&np->daddr,
rmt_addr))
+ !ipv6_addr_equal(&np->daddr,
rmt_addr))
continue;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if
(!ipv6_addr_cmp(&np->rcv_saddr, loc_addr))
+ if
(ipv6_addr_equal(&np->rcv_saddr, loc_addr))
goto found;
if (is_multicast &&
inet6_mc_check(sk,
loc_addr, rmt_addr))
@@ -668,7 +668,7 @@
* sk->sk_dst_cache.
*/
if (sk->sk_state == TCP_ESTABLISHED &&
- !ipv6_addr_cmp(daddr, &np->daddr))
+ ipv6_addr_equal(daddr, &np->daddr))
daddr = &np->daddr;
if (addr_len >= sizeof(struct sockaddr_in6) &&
@@ -775,7 +775,7 @@
}
done:
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl.fl6_dst, &np->daddr) ?
+ ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ?
&np->daddr : NULL);
if (err > 0)
err = np->recverr ? net_xmit_errno(err) : 0;
diff -Nru a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
--- a/net/ipv6/reassembly.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/reassembly.c 2004-11-10 16:45:07 +09:00
@@ -342,8 +342,8 @@
#ifdef CONFIG_SMP
for (fq = ip6_frag_hash[hash]; fq; fq = fq->next) {
if (fq->id == fq_in->id &&
- !ipv6_addr_cmp(&fq_in->saddr, &fq->saddr) &&
- !ipv6_addr_cmp(&fq_in->daddr, &fq->daddr)) {
+ ipv6_addr_equal(&fq_in->saddr, &fq->saddr) &&
+ ipv6_addr_equal(&fq_in->daddr, &fq->daddr)) {
atomic_inc(&fq->refcnt);
write_unlock(&ip6_frag_lock);
fq_in->last_in |= COMPLETE;
@@ -406,8 +406,8 @@
read_lock(&ip6_frag_lock);
for(fq = ip6_frag_hash[hash]; fq; fq = fq->next) {
if (fq->id == id &&
- !ipv6_addr_cmp(src, &fq->saddr) &&
- !ipv6_addr_cmp(dst, &fq->daddr)) {
+ ipv6_addr_equal(src, &fq->saddr) &&
+ ipv6_addr_equal(dst, &fq->daddr)) {
atomic_inc(&fq->refcnt);
read_unlock(&ip6_frag_lock);
return fq;
diff -Nru a/net/ipv6/route.c b/net/ipv6/route.c
--- a/net/ipv6/route.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/route.c 2004-11-10 16:45:07 +09:00
@@ -1006,7 +1006,7 @@
rt->rt6i_dev->ifindex !=
rtmsg->rtmsg_ifindex))
continue;
if (rtmsg->rtmsg_flags&RTF_GATEWAY &&
-
ipv6_addr_cmp(&rtmsg->rtmsg_gateway, &rt->rt6i_gateway))
+
!ipv6_addr_equal(&rtmsg->rtmsg_gateway, &rt->rt6i_gateway))
continue;
if (rtmsg->rtmsg_metric &&
rtmsg->rtmsg_metric !=
rt->rt6i_metric)
@@ -1057,13 +1057,13 @@
* is a bit fuzzy and one might need to check all
default
* routers.
*/
- if (ipv6_addr_cmp(saddr, &rt->rt6i_gateway)) {
+ if (!ipv6_addr_equal(saddr, &rt->rt6i_gateway)) {
if (rt->rt6i_flags & RTF_DEFAULT) {
struct rt6_info *rt1;
read_lock(&rt6_lock);
for (rt1 = ip6_routing_table.leaf;
rt1; rt1 = rt1->u.next) {
- if (!ipv6_addr_cmp(saddr,
&rt1->rt6i_gateway)) {
+ if (ipv6_addr_equal(saddr,
&rt1->rt6i_gateway)) {
dst_hold(&rt1->u.dst);
dst_release(&rt->u.dst);
read_unlock(&rt6_lock);
@@ -1262,7 +1262,7 @@
write_lock_bh(&rt6_lock);
for (rt = fn->leaf; rt; rt=rt->u.next) {
if (dev == rt->rt6i_dev &&
- ipv6_addr_cmp(&rt->rt6i_gateway, addr) == 0)
+ ipv6_addr_equal(&rt->rt6i_gateway, addr))
break;
}
if (rt)
diff -Nru a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
--- a/net/ipv6/tcp_ipv6.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/tcp_ipv6.c 2004-11-10 16:45:07 +09:00
@@ -262,7 +262,7 @@
score = 1;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if
(ipv6_addr_cmp(&np->rcv_saddr, daddr))
+ if
(!ipv6_addr_equal(&np->rcv_saddr, daddr))
continue;
score++;
}
@@ -321,8 +321,8 @@
if(*((__u32 *)&(tw->tw_dport)) == ports
&&
sk->sk_family == PF_INET6) {
- if(!ipv6_addr_cmp(&tw->tw_v6_daddr,
saddr) &&
-
!ipv6_addr_cmp(&tw->tw_v6_rcv_saddr, daddr) &&
+ if(ipv6_addr_equal(&tw->tw_v6_daddr,
saddr) &&
+
ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr) &&
(!sk->sk_bound_dev_if ||
sk->sk_bound_dev_if == dif))
goto hit;
}
@@ -406,8 +406,8 @@
prev = &req->dl_next) {
if (req->rmt_port == rport &&
req->class->family == AF_INET6 &&
- !ipv6_addr_cmp(&req->af.v6_req.rmt_addr,
raddr) &&
- !ipv6_addr_cmp(&req->af.v6_req.loc_addr,
laddr) &&
+ ipv6_addr_equal(&req->af.v6_req.rmt_addr,
raddr) &&
+ ipv6_addr_equal(&req->af.v6_req.loc_addr,
laddr) &&
(!req->af.v6_req.iif || req->af.v6_req.iif ==
iif)) {
BUG_TRAP(req->sk == NULL);
*prevp = prev;
@@ -463,8 +463,8 @@
if(*((__u32 *)&(tw->tw_dport)) == ports
&&
sk2->sk_family ==
PF_INET6 &&
- !ipv6_addr_cmp(&tw->tw_v6_daddr, saddr)
&&
- !ipv6_addr_cmp(&tw->tw_v6_rcv_saddr, daddr)
&&
+ ipv6_addr_equal(&tw->tw_v6_daddr, saddr)
&&
+ ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr)
&&
sk2->sk_bound_dev_if == sk->sk_bound_dev_if) {
struct tcp_opt *tp = tcp_sk(sk);
@@ -610,7 +610,7 @@
}
if (tp->ts_recent_stamp &&
- ipv6_addr_cmp(&np->daddr, &usin->sin6_addr)) {
+ !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
tp->ts_recent = 0;
tp->ts_recent_stamp = 0;
tp->write_seq = 0;
diff -Nru a/net/ipv6/udp.c b/net/ipv6/udp.c
--- a/net/ipv6/udp.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/udp.c 2004-11-10 16:45:07 +09:00
@@ -171,12 +171,12 @@
score++;
}
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if
(ipv6_addr_cmp(&np->rcv_saddr, daddr))
+ if
(!ipv6_addr_equal(&np->rcv_saddr, daddr))
continue;
score++;
}
if (!ipv6_addr_any(&np->daddr)) {
- if
(ipv6_addr_cmp(&np->daddr, saddr))
+ if
(!ipv6_addr_equal(&np->daddr, saddr))
continue;
score++;
}
@@ -395,14 +395,14 @@
continue;
}
if (!ipv6_addr_any(&np->daddr) &&
- ipv6_addr_cmp(&np->daddr,
rmt_addr))
+ !ipv6_addr_equal(&np->daddr,
rmt_addr))
continue;
if (s->sk_bound_dev_if &&
s->sk_bound_dev_if != dif)
continue;
if (!ipv6_addr_any(&np->rcv_saddr)) {
- if
(!ipv6_addr_cmp(&np->rcv_saddr, loc_addr))
+ if
(ipv6_addr_equal(&np->rcv_saddr, loc_addr))
return s;
continue;
}
@@ -732,7 +732,7 @@
* sk->sk_dst_cache.
*/
if (sk->sk_state == TCP_ESTABLISHED &&
- !ipv6_addr_cmp(daddr, &np->daddr))
+ ipv6_addr_equal(daddr, &np->daddr))
daddr = &np->daddr;
if (addr_len >= sizeof(struct sockaddr_in6) &&
@@ -840,7 +840,7 @@
if (dst)
ip6_dst_store(sk, dst,
- !ipv6_addr_cmp(&fl->fl6_dst,
&np->daddr) ?
+ ipv6_addr_equal(&fl->fl6_dst,
&np->daddr) ?
&np->daddr : NULL);
if (err > 0)
err = np->recverr ? net_xmit_errno(err) : 0;
diff -Nru a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
--- a/net/ipv6/xfrm6_policy.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/xfrm6_policy.c 2004-11-10 16:45:07 +09:00
@@ -68,8 +68,8 @@
ipv6_addr_prefix(&fl_src_prefix,
&fl->fl6_src,
xdst->u.rt6.rt6i_src.plen);
- if (!ipv6_addr_cmp(&xdst->u.rt6.rt6i_dst.addr,
&fl_dst_prefix) &&
- !ipv6_addr_cmp(&xdst->u.rt6.rt6i_src.addr,
&fl_src_prefix) &&
+ if (ipv6_addr_equal(&xdst->u.rt6.rt6i_dst.addr,
&fl_dst_prefix) &&
+ ipv6_addr_equal(&xdst->u.rt6.rt6i_src.addr,
&fl_src_prefix) &&
__xfrm6_bundle_ok(xdst, fl)) {
dst_clone(dst);
break;
@@ -123,7 +123,7 @@
trailer_len += xfrm[i]->props.trailer_len;
}
- if (ipv6_addr_cmp(remote, &fl->fl6_dst)) {
+ if (!ipv6_addr_equal(remote, &fl->fl6_dst)) {
struct flowi fl_tunnel;
memset(&fl_tunnel, 0, sizeof(fl_tunnel));
diff -Nru a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c
--- a/net/ipv6/xfrm6_state.c 2004-11-10 16:45:07 +09:00
+++ b/net/ipv6/xfrm6_state.c 2004-11-10 16:45:07 +09:00
@@ -55,7 +55,7 @@
list_for_each_entry(x, xfrm6_state_afinfo.state_byspi+h,
byspi) {
if (x->props.family == AF_INET6 &&
spi == x->id.spi &&
- !ipv6_addr_cmp((struct in6_addr *)daddr,
(struct in6_addr *)x->id.daddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)daddr,
(struct in6_addr *)x->id.daddr.a6) &&
proto == x->id.proto) {
xfrm_state_hold(x);
return x;
@@ -76,10 +76,10 @@
list_for_each_entry(x, xfrm6_state_afinfo.state_bydst+h,
bydst) {
if (x->props.family == AF_INET6 &&
- !ipv6_addr_cmp((struct in6_addr *)daddr,
(struct in6_addr *)x->id.daddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)daddr,
(struct in6_addr *)x->id.daddr.a6) &&
mode == x->props.mode &&
proto == x->id.proto &&
- !ipv6_addr_cmp((struct in6_addr *)saddr,
(struct in6_addr *)x->props.saddr.a6) &&
+ ipv6_addr_equal((struct in6_addr *)saddr,
(struct in6_addr *)x->props.saddr.a6) &&
reqid == x->props.reqid &&
x->km.state == XFRM_STATE_ACQ &&
!x->id.spi) {
diff -Nru a/net/sctp/ipv6.c b/net/sctp/ipv6.c
--- a/net/sctp/ipv6.c 2004-11-10 16:45:07 +09:00
+++ b/net/sctp/ipv6.c 2004-11-10 16:45:07 +09:00
@@ -461,7 +461,7 @@
}
return 0;
}
- if (ipv6_addr_cmp(&addr1->v6.sin6_addr, &addr2->v6.sin6_addr))
+ if (!ipv6_addr_equal(&addr1->v6.sin6_addr,
&addr2->v6.sin6_addr))
return 0;
/* If this is a linklocal address, compare the scope_id. */
if (ipv6_addr_type(&addr1->v6.sin6_addr) &
IPV6_ADDR_LINKLOCAL) {
--
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@linux-ipv6.org>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA
[-- Attachment #1.2: Type: text/html, Size: 43078 bytes --]
[-- Attachment #2: graycol.gif --]
[-- Type: image/gif, Size: 105 bytes --]
[-- Attachment #3: pic31705.gif --]
[-- Type: image/gif, Size: 1255 bytes --]
[-- Attachment #4: ecblank.gif --]
[-- Type: image/gif, Size: 45 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BK PATCH] Misc IPv6 Updates
2004-11-10 18:20 ` Krishna Kumar
@ 2004-11-10 21:18 ` Brian Haley
2004-11-10 21:23 ` YOSHIFUJI Hideaki / 吉藤英明
2004-11-10 21:25 ` YOSHIFUJI Hideaki / 吉藤英明
1 sibling, 1 reply; 6+ messages in thread
From: Brian Haley @ 2004-11-10 21:18 UTC (permalink / raw)
To: Krishna Kumar
Cc: YOSHIFUJI Hideaki / 吉藤英明, davem,
netdev
Krishna Kumar wrote:
> (sorry if my mailer mangles the code)
>
> In :
>
> +static inline int ipv6_addr_equal(const struct in6_addr *a1,
> + const struct in6_addr *a2)
> +{
> + return (a1->s6_addr32[0] == a2->s6_addr32[0] &&
> + a1->s6_addr32[1] == a2->s6_addr32[1] &&
> + a1->s6_addr32[2] == a2->s6_addr32[2] &&
> + a1->s6_addr32[3] == a2->s6_addr32[3]);
> +}
> +
>
> Is it faster to do :
>
> +static inline int ipv6_addr_equal(const struct in6_addr *a1,
> + const struct in6_addr *a2)
> +{
> + return (a1->s6_addr32[3] == a2->s6_addr32[3] &&
> + a1->s6_addr32[2] == a2->s6_addr32[2] &&
> + a1->s6_addr32[1] == a2->s6_addr32[1] &&
> + a1->s6_addr32[0] == a2->s6_addr32[0]);
> +}
> +
>
> instead ?It should be faster for typical addresses, say 2000:a:b:c::1
> and 2000:a:b:c::2. The device EUI-64 is
> normally going to be different for all devices while prefix can be same
> (atleast on a link/local site) completely
> or to some prefix len portion.
I think it might be fastest to do 3-0-2-1 as that will more quickly tell
a global from a link-local address.
I will eventually do a 64-bit comparison to see if putting an
#ifdef CONFIG_64BIT is worth it.
-Brian
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BK PATCH] Misc IPv6 Updates
2004-11-10 21:18 ` Brian Haley
@ 2004-11-10 21:23 ` YOSHIFUJI Hideaki / 吉藤英明
0 siblings, 0 replies; 6+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-11-10 21:23 UTC (permalink / raw)
To: Brian.Haley; +Cc: kumarkr, davem, netdev, yoshfuji
In article <419285B8.4070703@hp.com> (at Wed, 10 Nov 2004 16:18:48 -0500), Brian Haley <Brian.Haley@hp.com> says:
> > Is it faster to do :
> >
> > +static inline int ipv6_addr_equal(const struct in6_addr *a1,
> > + const struct in6_addr *a2)
> > +{
> > + return (a1->s6_addr32[3] == a2->s6_addr32[3] &&
> > + a1->s6_addr32[2] == a2->s6_addr32[2] &&
> > + a1->s6_addr32[1] == a2->s6_addr32[1] &&
> > + a1->s6_addr32[0] == a2->s6_addr32[0]);
> > +}
> > +
> >
> > instead ?It should be faster for typical addresses, say 2000:a:b:c::1
> > and 2000:a:b:c::2. The device EUI-64 is
> > normally going to be different for all devices while prefix can be same
> > (atleast on a link/local site) completely
> > or to some prefix len portion.
:
> I will eventually do a 64-bit comparison to see if putting an
> #ifdef CONFIG_64BIT is worth it.
No, because we cannot assume 64bit alignment.
--yoshfuji
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BK PATCH] Misc IPv6 Updates
2004-11-10 18:20 ` Krishna Kumar
2004-11-10 21:18 ` Brian Haley
@ 2004-11-10 21:25 ` YOSHIFUJI Hideaki / 吉藤英明
1 sibling, 0 replies; 6+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-11-10 21:25 UTC (permalink / raw)
To: kumarkr; +Cc: davem, netdev, yoshfuji
In article <OF8CA84FB0.6990A5CD-ON88256F48.0063D0E6-88256F48.0064C53C@us.ibm.com> (at Wed, 10 Nov 2004 10:20:40 -0800), Krishna Kumar <kumarkr@us.ibm.com> says:
> Is it faster to do :
>
> +static inline int ipv6_addr_equal(const struct in6_addr *a1,
> + const struct in6_addr
> *a2)
> +{
> + return (a1->s6_addr32[3] == a2->s6_addr32[3] &&
> + a1->s6_addr32[2] == a2->s6_addr32[2] &&
> + a1->s6_addr32[1] == a2->s6_addr32[1] &&
> + a1->s6_addr32[0] == a2->s6_addr32[0]);
> +}
> +
>
> instead ?It should be faster for typical addresses, say 2000:a:b:c::1 and
> 2000:a:b:c::2. The device EUI-64 is
> normally going to be different for all devices while prefix can be same
> (atleast on a link/local site) completely
> or to some prefix len portion.
It depends on context and situation.
But, the difference is almost within the error range
compare to the this improvements to avoid using memcmp.
Anyway, the reason why the order is MSB->LSB is
1. if you have multiple addresses with multiple prefixes +
same interface identifier, MSB->LSB is better.
2. from the point of view of cache, MSB->LSB is better.
--
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@linux-ipv6.org>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BK PATCH] Misc IPv6 Updates
2004-11-10 8:00 [BK PATCH] Misc IPv6 Updates YOSHIFUJI Hideaki / 吉藤英明
2004-11-10 18:20 ` Krishna Kumar
@ 2004-11-11 23:18 ` David S. Miller
1 sibling, 0 replies; 6+ messages in thread
From: David S. Miller @ 2004-11-11 23:18 UTC (permalink / raw)
To: yoshfuji; +Cc: netdev
On Wed, 10 Nov 2004 03:00:26 -0500 (EST)
YOSHIFUJI Hideaki / ^[$B5HF#1QL@^[(B <yoshfuji@linux-ipv6.org> wrote:
> Here're changeset at:
> bk://bk.skbuff.net:20610/linux-2.6-inet6-misc/
Looks fine to me, pulled.
Thank you.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-11-11 23:18 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-10 8:00 [BK PATCH] Misc IPv6 Updates YOSHIFUJI Hideaki / 吉藤英明
2004-11-10 18:20 ` Krishna Kumar
2004-11-10 21:18 ` Brian Haley
2004-11-10 21:23 ` YOSHIFUJI Hideaki / 吉藤英明
2004-11-10 21:25 ` YOSHIFUJI Hideaki / 吉藤英明
2004-11-11 23:18 ` David S. Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).