From: Wei Yongjun <yjwei@cn•fujitsu.com>
To: David Miller <davem@davemloft•net>
Cc: "netdev@vger•kernel.org" <netdev@vger•kernel.org>,
lksctp <linux-sctp@vger•kernel.org>
Subject: [PATCH net-next-2.6 6/7] sctp: clean up IPv6 route and XFRM lookups
Date: Tue, 26 Apr 2011 11:48:55 +0800 [thread overview]
Message-ID: <4DB640A7.9010802@cn.fujitsu.com> (raw)
In-Reply-To: <4DB63F85.2090609@cn.fujitsu.com>
Using ip6_dst_lookup_flow() instead of ip6_dst_lookup()
and then do xfrm_lookup().
Signed-off-by: Wei Yongjun <yjwei@cn•fujitsu.com>
---
net/sctp/ipv6.c | 40 +++++++++-------------------------------
1 files changed, 9 insertions(+), 31 deletions(-)
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index 60601f3..cbbfe20 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -244,30 +244,6 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)
return ip6_xmit(sk, skb, &fl6, np->opt);
}
-/* Small helper function that combines route and XFRM lookups. This is
- * done since we might be looping through route lookups.
- */
-static int sctp_v6_dst_lookup(struct sock *sk, struct dst_entry **dst,
- struct flowi6 *fl6)
-{
- int err;
-
- err = ip6_dst_lookup(sk, dst, fl6);
- if (err)
- goto done;
-
- err = xfrm_lookup(sock_net(sk), *dst, flowi6_to_flowi(fl6), sk, 0);
- if (err)
- goto done;
-
- return 0;
-
-done:
- dst_release(*dst);
- *dst = NULL;
- return err;
-}
-
/* Returns the dst cache entry for the given source and destination ip
* addresses.
*/
@@ -285,7 +261,6 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
__u8 matchlen = 0;
__u8 bmatchlen;
sctp_scope_t scope;
- int err = 0;
memset(fl6, 0, sizeof(struct flowi6));
ipv6_addr_copy(&fl6->daddr, &daddr->v6.sin6_addr);
@@ -304,7 +279,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
SCTP_DEBUG_PRINTK("SRC=%pI6 - ", &fl6->saddr);
}
- err = sctp_v6_dst_lookup(sk, &dst, fl6);
+ dst = ip6_dst_lookup_flow(sk, fl6, NULL, false);
+
if (!asoc || saddr)
goto out;
@@ -313,7 +289,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
/* ip6_dst_lookup has filled in the fl6->saddr for us. Check
* to see if we can use it.
*/
- if (!err) {
+ if (!IS_ERR(dst)) {
/* Walk through the bind address list and look for a bind
* address that matches the source address of the returned dst.
*/
@@ -359,18 +335,20 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
if (baddr) {
ipv6_addr_copy(&fl6->saddr, &baddr->v6.sin6_addr);
fl6->fl6_sport = baddr->v6.sin6_port;
- err = sctp_v6_dst_lookup(sk, &dst, fl6);
+ dst = ip6_dst_lookup_flow(sk, fl6, NULL, false);
}
out:
- t->dst = dst;
- if (dst) {
+ if (!IS_ERR(dst)) {
struct rt6_info *rt;
rt = (struct rt6_info *)dst;
+ t->dst = dst;
SCTP_DEBUG_PRINTK("rt6_dst:%pI6 rt6_src:%pI6\n",
&rt->rt6i_dst.addr, &fl6->saddr);
- } else
+ } else {
+ t->dst = NULL;
SCTP_DEBUG_PRINTK("NO ROUTE\n");
+ }
}
/* Returns the number of consecutive initial bits that match in the 2 ipv6
--
1.6.5.2
next prev parent reply other threads:[~2011-04-26 3:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-26 3:44 [PATCH net-next-2.6 0/7] SCTP updates for net-next-2.6 Wei Yongjun
2011-04-26 3:45 ` [PATCH net-next-2.6 1/7] sctp: fix sctp to work with ipv6 source address routing Wei Yongjun
2011-04-26 3:46 ` [PATCH net-next-2.6 2/7] sctp: cache the ipv6 source after route lookup Wei Yongjun
2011-04-26 3:47 ` [PATCH net-next-2.6 3/7] sctp: make sctp over IPv6 work with IPsec Wei Yongjun
2011-04-26 3:47 ` [PATCH net-next-2.6 4/7] sctp: remove useless arguments from get_saddr() call Wei Yongjun
2011-04-26 7:12 ` David Miller
2011-04-26 7:20 ` David Miller
2011-04-26 8:06 ` Wei Yongjun
2011-04-26 3:48 ` [PATCH net-next-2.6 5/7] sctp: clean up route lookup calls Wei Yongjun
2011-04-26 3:48 ` Wei Yongjun [this message]
2011-04-26 3:49 ` [PATCH net-next-2.6 7/7] sctp: fix IPv6 source address output routing with IPsec Wei Yongjun
2011-04-26 7:12 ` [PATCH net-next-2.6 0/7] SCTP updates for net-next-2.6 David Miller
2011-04-26 21:51 ` David Miller
2011-04-27 0:59 ` Wei Yongjun
2011-04-27 1:47 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DB640A7.9010802@cn.fujitsu.com \
--to=yjwei@cn$(echo .)fujitsu.com \
--cc=davem@davemloft$(echo .)net \
--cc=linux-sctp@vger$(echo .)kernel.org \
--cc=netdev@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox