From: Pavel Emelyanov <xemul@parallels•com>
To: David Miller <davem@davemloft•net>,
Linux Netdev List <netdev@vger•kernel.org>
Subject: [PATCH] iproute: Dump UDP sockets via netlink
Date: Fri, 09 Dec 2011 20:26:27 +0400 [thread overview]
Message-ID: <4EE236B3.2090808@parallels.com> (raw)
In-Reply-To: <4EE23561.5020804@parallels.com>
Since for UDP the same binary API is used, just rename tcp_show_netlink and others
into inet_show_netlink (and others) and wire the calls into udp-related paths.
Applies on top of previous patch with support for the new sock_diag api.
Signed-off-by: Pavel Emelyanov <xemul@parallels•com>
---
diff -u b/misc/ss.c b/misc/ss.c
--- b/misc/ss.c
+++ b/misc/ss.c
@@ -1410,7 +1410,7 @@
}
}
-static int tcp_show_sock(struct nlmsghdr *nlh, struct filter *f)
+static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f)
{
struct inet_diag_msg *r = NLMSG_DATA(nlh);
struct tcpstat s;
@@ -1474,7 +1474,7 @@
return 0;
}
-static int __tcp_show_netlink(struct filter *f, FILE *dump_fp, int family, int socktype)
+static int __inet_show_netlink(struct filter *f, FILE *dump_fp, int family, int socktype)
{
int fd;
struct sockaddr_nl nladdr;
@@ -1590,7 +1590,7 @@
return 0;
}
if (!dump_fp) {
- err = tcp_show_sock(h, NULL);
+ err = inet_show_sock(h, NULL);
if (err < 0)
return err;
}
@@ -1610,19 +1610,19 @@
return 0;
}
-static int tcp_show_netlink(struct filter *f, FILE *dump_fp, int socktype)
+static int inet_show_netlink(struct filter *f, FILE *dump_fp, int socktype)
{
int err = 0;
if (f->families & (1 << AF_INET))
- err |= __tcp_show_netlink(f, dump_fp, AF_INET, socktype);
+ err |= __inet_show_netlink(f, dump_fp, AF_INET, socktype);
if (f->families & (1 << AF_INET6))
- err |= __tcp_show_netlink(f, dump_fp, AF_INET6, socktype);
+ err |= __inet_show_netlink(f, dump_fp, AF_INET6, socktype);
return err;
}
-static int tcp_show_netlink_file(struct filter *f)
+static int inet_show_netlink_file(struct filter *f)
{
FILE *fp;
char buf[8192];
@@ -1672,7 +1672,7 @@
return -1;
}
- err = tcp_show_sock(h, f);
+ err = inet_show_sock(h, f);
if (err < 0)
return err;
}
@@ -1687,10 +1687,10 @@
dg_proto = TCP_PROTO;
if (getenv("TCPDIAG_FILE"))
- return tcp_show_netlink_file(f);
+ return inet_show_netlink_file(f);
if (!getenv("PROC_NET_TCP") && !getenv("PROC_ROOT")
- && tcp_show_netlink(f, NULL, socktype) == 0)
+ && inet_show_netlink(f, NULL, socktype) == 0)
return 0;
/* Sigh... We have to parse /proc/net/tcp... */
@@ -1852,6 +1852,15 @@
{
FILE *fp = NULL;
+ if (getenv("TCPDIAG_FILE"))
+ return inet_show_netlink_file(f);
+
+ if (!getenv("PROC_NET_TCP") && !getenv("PROC_ROOT")
+ && inet_show_netlink(f, NULL, IPPROTO_UDP) == 0)
+ return 0;
+
+ /* legacy proc files parse */
+
dg_proto = UDP_PROTO;
if (f->families&(1<<AF_INET)) {
@@ -2787,7 +2796,7 @@
if (dump_tcpdiag) {
FILE *dump_fp = stdout;
- if (!(current_filter.dbs & (1<<TCP_DB))) {
+ if (!(current_filter.dbs & ((1<<TCP_DB) | (1<<UDP_DB)))) {
fprintf(stderr, "ss: tcpdiag dump requested and no tcp in filter.\n");
exit(0);
}
@@ -2798,7 +2807,13 @@
exit(-1);
}
}
- tcp_show_netlink(¤t_filter, dump_fp, IPPROTO_TCP);
+
+ if (current_filter.dbs & (1<<UDP_DB))
+ inet_show_netlink(¤t_filter, dump_fp, IPPROTO_UDP);
+
+ if (current_filter.dbs & (1<<TCP_DB))
+ inet_show_netlink(¤t_filter, dump_fp, IPPROTO_TCP);
+
fflush(dump_fp);
exit(0);
}
next prev parent reply other threads:[~2011-12-09 16:26 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 ` [PATCH 4/13] inet_diag: Split inet_diag_get_exact into parts Pavel Emelyanov
2011-12-09 16:22 ` [PATCH 5/13] " 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 ` Pavel Emelyanov [this message]
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=4EE236B3.2090808@parallels.com \
--to=xemul@parallels$(echo .)com \
--cc=davem@davemloft$(echo .)net \
--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