netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Emelyanov <xemul@parallels.com>
To: David Miller <davem@davemloft.net>,
	Linux Netdev List <netdev@vger.kernel.org>
Subject: [PATCH 4/13] inet_diag: Split inet_diag_get_exact into parts
Date: Fri, 09 Dec 2011 20:22:10 +0400	[thread overview]
Message-ID: <4EE235B2.8070903@parallels.com> (raw)
In-Reply-To: <4EE23561.5020804@parallels.com>

The 1st part locks the inet handler and the 2nd one dump the
inet connection sock.

In the next patches the 1st part will be generalized to call
the socket dumping routine indirectly (i.e. TCP/UDP/DCCP) and
the 2nd part will be used by TCP and DCCP handlers.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>

---
 net/ipv4/inet_diag.c |   38 ++++++++++++++++++++++----------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index ba3ae1f..64abe47 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -258,25 +258,14 @@ int inet_diag_check_cookie(struct sock *sk, struct inet_diag_req *req)
 }
 EXPORT_SYMBOL_GPL(inet_diag_check_cookie);
 
-static int inet_diag_get_exact(struct sk_buff *in_skb,
-			       const struct nlmsghdr *nlh,
-			       struct inet_diag_req *req)
+static int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *in_skb,
+		const struct nlmsghdr *nlh, struct inet_diag_req *req)
 {
 	int err;
 	struct sock *sk;
 	struct sk_buff *rep;
-	struct inet_hashinfo *hashinfo;
-	const struct inet_diag_handler *handler;
 
-	handler = inet_diag_lock_handler(req->sdiag_protocol);
-	if (IS_ERR(handler)) {
-		err = PTR_ERR(handler);
-		goto unlock;
-	}
-
-	hashinfo = handler->idiag_hashinfo;
 	err = -EINVAL;
-
 	if (req->sdiag_family == AF_INET) {
 		sk = inet_lookup(&init_net, hashinfo, req->id.idiag_dst[0],
 				 req->id.idiag_dport, req->id.idiag_src[0],
@@ -293,12 +282,12 @@ static int inet_diag_get_exact(struct sk_buff *in_skb,
 	}
 #endif
 	else {
-		goto unlock;
+		goto out_nosk;
 	}
 
 	err = -ENOENT;
 	if (sk == NULL)
-		goto unlock;
+		goto out_nosk;
 
 	err = inet_diag_check_cookie(sk, req);
 	if (err)
@@ -332,8 +321,25 @@ out:
 		else
 			sock_put(sk);
 	}
-unlock:
+out_nosk:
+	return err;
+}
+
+static int inet_diag_get_exact(struct sk_buff *in_skb,
+			       const struct nlmsghdr *nlh,
+			       struct inet_diag_req *req)
+{
+	const struct inet_diag_handler *handler;
+	int err;
+
+	handler = inet_diag_lock_handler(req->sdiag_protocol);
+	if (IS_ERR(handler))
+		err = PTR_ERR(handler);
+	else
+		err = inet_diag_dump_one_icsk(handler->idiag_hashinfo,
+				in_skb, nlh, req);
 	inet_diag_unlock_handler(handler);
+
 	return err;
 }
 
-- 
1.5.5.6

  parent reply	other threads:[~2011-12-09 16:22 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-09 16:20 [PATCH 0/13] Implement dumping udp sockets via sock_diag netlink Pavel Emelyanov
2011-12-09 16:21 ` [PATCH 1/13] inet_diag: Remove indirect sizeof from inet diag handlers Pavel Emelyanov
2011-12-09 16:21 ` [PATCH 2/13] inet_diag: Reduce the number of args for bytecode run routine Pavel Emelyanov
2011-12-09 16:21 ` [PATCH 3/13] inet_diag: Export inet diag cookie checking routine Pavel Emelyanov
2011-12-09 16:22 ` Pavel Emelyanov [this message]
2011-12-09 16:22 ` [PATCH 5/13] inet_diag: Split inet_diag_get_exact into parts Pavel Emelyanov
2011-12-09 16:22 ` [PATCH 6/13] inet_diag: Introduce the byte-code run on an inet socket Pavel Emelyanov
2011-12-09 16:23 ` [PATCH 7/13] inet_diag: Introduce the inet socket dumping routine Pavel Emelyanov
2011-12-09 16:23 ` [PATCH 8/13] inet_diag: Generalize inet_diag dump and get_exact calls Pavel Emelyanov
2011-12-09 16:23 ` [PATCH 9/13] udp: Export code sk lookup routines Pavel Emelyanov
2011-12-09 16:23 ` [PATCH 10/13] udp_diag: Basic skeleton Pavel Emelyanov
2011-12-09 16:24 ` [PATCH 11/13] udp_diag: Implement the get_exact dumping functionality Pavel Emelyanov
2011-12-09 21:48   ` Eric Dumazet
2011-12-10  9:07     ` Pavel Emelyanov
2011-12-10  9:33       ` [PATCH 1/2] udp_diag: Make it module when ipv6 is a module Pavel Emelyanov
2011-12-10  9:35         ` [PATCH 2/2] udp_diag: Fix the !ipv6 case Pavel Emelyanov
2011-12-10 11:02           ` Eric Dumazet
2011-12-10 18:15             ` David Miller
2011-12-10 19:48               ` [PATCH net-next] net: use IS_ENABLED(CONFIG_IPV6) Eric Dumazet
2011-12-10 22:00                 ` [PATCH net-next] drivers/net: " Joe Perches
2011-12-10 22:29                   ` Eric Dumazet
2011-12-11  0:51                     ` Joe Perches
2011-12-11  8:52                       ` Eric Dumazet
2011-12-13  0:06                         ` Joe Perches
2011-12-11 23:34                 ` [PATCH net-next] net: " David Miller
2011-12-10 11:00         ` [PATCH 1/2] udp_diag: Make it module when ipv6 is a module Eric Dumazet
2011-12-10 18:15           ` David Miller
2011-12-09 16:24 ` [PATCH 12/13] udp_diag: Implement the dump-all functionality Pavel Emelyanov
2011-12-09 16:24 ` [PATCH 13/13] udp_diag: Wire the udp_diag module into kbuild Pavel Emelyanov
2011-12-09 16:26 ` [PATCH] iproute: Dump UDP sockets via netlink Pavel Emelyanov
2011-12-09 19:19 ` [PATCH 0/13] Implement dumping udp sockets via sock_diag netlink 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=4EE235B2.8070903@parallels.com \
    --to=xemul@parallels.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
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;
as well as URLs for NNTP newsgroup(s).