public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
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



  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