[PATCH] raw: restore daddr_cache in raw kernel socket.
Naohiro Ooiwa <[email protected]> Fri, 01 Aug 2008 19:00:20 +0900
| Newsgroups | gmane.linux.network,gmane.linux.ipv6.usagi.users |
|---|---|
| Message-ID | <[email protected]> |
Hi all, I created a patch of RAW socket. This patch adds ip6_sk_dst_lookup()/ip6_dst_store() in rawv6_sendmsg(). so that RAW socket can use "daddr_cache". When RAW socket sent the packets to same destination, it must reduce over-head. Could you please check the following patch? Regards, Naohiro Ooiwa Signed-off-by: Naohiro Ooiwa <[email protected]> --- net/ipv6/raw.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 396f0ea..58c5e25 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -858,7 +858,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, fl.oif = np->mcast_oif; security_sk_classify_flow(sk, &fl); - err = ip6_dst_lookup(sk, &dst, &fl); + err = ip6_sk_dst_lookup(sk, &dst, &fl); if (err) goto out; if (final_p) @@ -905,7 +905,17 @@ back_from_confirm: release_sock(sk); } done: - dst_release(dst); + if (dst) + ip6_dst_store(sk, dst, + ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ? + &np->daddr : NULL, +#ifdef CONFIG_IPV6_SUBTREES + ipv6_addr_equal(&fl.fl6_src, &np->saddr) ? + &np->saddr : +#endif + NULL); + else + dst_release(dst); out: fl6_sock_release(flowlabel); return err<0?err:len; -- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html