* [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state
@ 2012-10-25 13:16 Pavel Emelyanov
2012-10-25 13:18 ` [PATCH 1/5] ss: Rename some tcp- names into inet- Pavel Emelyanov
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:16 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
In the net-next sits a patch which extends the sock-diag subsys to
show the sockets' shutdown state. I propose to teach the ss tool to
print this info when requested with -e|--extended key.
The output will look like arrows at the end of each line, like this:
ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 -->
ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <--
ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 ---
ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <->
for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively.
In order to do so, it's also required to implement support for the
newer sock-diag in tcp and udp netlink code. I did it before, but
broke compatibility with older kernels (those without sock-diag).
Now this is fixed (checked on 2.6.40 kernel).
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/5] ss: Rename some tcp- names into inet-
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
@ 2012-10-25 13:18 ` Pavel Emelyanov
2012-10-25 13:21 ` [PATCH 2/5] ss: Split inet_show_netlink into parts Pavel Emelyanov
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:18 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
The sock-diag is capable to diag udp sockets as well. Prepare the
ss code for this by first renaming soon-to-be-generic tcp-s names
into inet-s.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
misc/ss.c | 21 ++++++++++++---------
1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index d00d3e7..3bceedf 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1431,7 +1431,7 @@ static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r)
}
}
-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;
@@ -1495,7 +1495,7 @@ static int tcp_show_sock(struct nlmsghdr *nlh, struct filter *f)
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 protocol)
{
int fd;
struct sockaddr_nl nladdr;
@@ -1517,7 +1517,10 @@ static int tcp_show_netlink(struct filter *f, FILE *dump_fp, int socktype)
nladdr.nl_family = AF_NETLINK;
req.nlh.nlmsg_len = sizeof(req);
- req.nlh.nlmsg_type = socktype;
+ if (protocol == IPPROTO_TCP)
+ req.nlh.nlmsg_type = TCPDIAG_GETSOCK;
+ else
+ req.nlh.nlmsg_type = DCCPDIAG_GETSOCK;
req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
req.nlh.nlmsg_pid = 0;
req.nlh.nlmsg_seq = 123456;
@@ -1626,7 +1629,7 @@ static int tcp_show_netlink(struct filter *f, FILE *dump_fp, int socktype)
h = NLMSG_NEXT(h, status);
continue;
}
- err = tcp_show_sock(h, NULL);
+ err = inet_show_sock(h, NULL);
if (err < 0) {
close(fd);
return err;
@@ -1699,7 +1702,7 @@ static int tcp_show_netlink_file(struct filter *f)
return -1;
}
- err = tcp_show_sock(h, f);
+ err = inet_show_sock(h, f);
if (err < 0)
return err;
}
@@ -1717,7 +1720,7 @@ static int tcp_show(struct filter *f, int socktype)
return tcp_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... */
@@ -2980,7 +2983,7 @@ int main(int argc, char *argv[])
exit(-1);
}
}
- tcp_show_netlink(¤t_filter, dump_fp, TCPDIAG_GETSOCK);
+ inet_show_netlink(¤t_filter, dump_fp, IPPROTO_TCP);
fflush(dump_fp);
exit(0);
}
@@ -3048,8 +3051,8 @@ int main(int argc, char *argv[])
if (current_filter.dbs & (1<<UDP_DB))
udp_show(¤t_filter);
if (current_filter.dbs & (1<<TCP_DB))
- tcp_show(¤t_filter, TCPDIAG_GETSOCK);
+ tcp_show(¤t_filter, IPPROTO_TCP);
if (current_filter.dbs & (1<<DCCP_DB))
- tcp_show(¤t_filter, DCCPDIAG_GETSOCK);
+ tcp_show(¤t_filter, IPPROTO_DCCP);
return 0;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/5] ss: Split inet_show_netlink into parts
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
2012-10-25 13:18 ` [PATCH 1/5] ss: Rename some tcp- names into inet- Pavel Emelyanov
@ 2012-10-25 13:21 ` Pavel Emelyanov
2012-10-25 13:23 ` [PATCH 3/5] ss: Support sock-diag Pavel Emelyanov
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:21 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
The existing function inet_show_netlink sends tcp-diag request and
then receives back the response and prints it on the screen.
The sock-diag and legacy tcp-diag have different request types, but
report sockets in the same format. In order to support both it's
convenient to split the code into sending and receiving parts.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
misc/ss.c | 27 +++++++++++++++++++++------
1 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index 3bceedf..27feeb8 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1495,9 +1495,8 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f)
return 0;
}
-static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
+static int tcpdiag_send(int fd, int protocol, struct filter *f)
{
- int fd;
struct sockaddr_nl nladdr;
struct {
struct nlmsghdr nlh;
@@ -1507,12 +1506,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
int bclen;
struct msghdr msg;
struct rtattr rta;
- char buf[8192];
struct iovec iov[3];
- if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG)) < 0)
- return -1;
-
memset(&nladdr, 0, sizeof(nladdr));
nladdr.nl_family = AF_NETLINK;
@@ -1563,6 +1558,26 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
return -1;
}
+ return 0;
+}
+
+static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
+{
+ int fd;
+ struct sockaddr_nl nladdr;
+ struct msghdr msg;
+ char buf[8192];
+ struct iovec iov[3];
+
+ if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG)) < 0)
+ return -1;
+
+ if (tcpdiag_send(fd, protocol, f))
+ return -1;
+
+ memset(&nladdr, 0, sizeof(nladdr));
+ nladdr.nl_family = AF_NETLINK;
+
iov[0] = (struct iovec){
.iov_base = buf,
.iov_len = sizeof(buf)
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/5] ss: Support sock-diag
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
2012-10-25 13:18 ` [PATCH 1/5] ss: Rename some tcp- names into inet- Pavel Emelyanov
2012-10-25 13:21 ` [PATCH 2/5] ss: Split inet_show_netlink into parts Pavel Emelyanov
@ 2012-10-25 13:23 ` Pavel Emelyanov
2012-10-25 13:24 ` [PATCH 4/5] ss: Get udp sockets info via sock-diag Pavel Emelyanov
2012-10-25 13:26 ` [PATCH 5/5] ss: Show inet and unix sockets' shutdown state Pavel Emelyanov
4 siblings, 0 replies; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:23 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
That is -- write the code, that sends diag request in new format. It's
mostly copied from tcp-diag code. Plus, sock-diag differentiates sockets
by families, thus we have to send two requests sequentially.
If we fail to submit new sock-diag request, try to fall-back and submit
the legacy tcp-diag one.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
misc/ss.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 87 insertions(+), 8 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index 27feeb8..1ceb026 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1561,9 +1561,76 @@ static int tcpdiag_send(int fd, int protocol, struct filter *f)
return 0;
}
+static int sockdiag_send(int family, int fd, int protocol, struct filter *f)
+{
+ struct sockaddr_nl nladdr;
+ struct {
+ struct nlmsghdr nlh;
+ struct inet_diag_req_v2 r;
+ } req;
+ char *bc = NULL;
+ int bclen;
+ struct msghdr msg;
+ struct rtattr rta;
+ struct iovec iov[3];
+
+ if (family == PF_UNSPEC)
+ return tcpdiag_send(fd, protocol, f);
+
+ memset(&nladdr, 0, sizeof(nladdr));
+ nladdr.nl_family = AF_NETLINK;
+
+ req.nlh.nlmsg_len = sizeof(req);
+ req.nlh.nlmsg_type = SOCK_DIAG_BY_FAMILY;
+ req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
+ req.nlh.nlmsg_pid = 0;
+ req.nlh.nlmsg_seq = 123456;
+ memset(&req.r, 0, sizeof(req.r));
+ req.r.sdiag_family = family;
+ req.r.sdiag_protocol = protocol;
+ req.r.idiag_states = f->states;
+ if (show_mem) {
+ req.r.idiag_ext |= (1<<(INET_DIAG_MEMINFO-1));
+ req.r.idiag_ext |= (1<<(INET_DIAG_SKMEMINFO-1));
+ }
+
+ if (show_tcpinfo) {
+ req.r.idiag_ext |= (1<<(INET_DIAG_INFO-1));
+ req.r.idiag_ext |= (1<<(INET_DIAG_VEGASINFO-1));
+ req.r.idiag_ext |= (1<<(INET_DIAG_CONG-1));
+ }
+
+ iov[0] = (struct iovec){
+ .iov_base = &req,
+ .iov_len = sizeof(req)
+ };
+ if (f->f) {
+ bclen = ssfilter_bytecompile(f->f, &bc);
+ rta.rta_type = INET_DIAG_REQ_BYTECODE;
+ rta.rta_len = RTA_LENGTH(bclen);
+ iov[1] = (struct iovec){ &rta, sizeof(rta) };
+ iov[2] = (struct iovec){ bc, bclen };
+ req.nlh.nlmsg_len += RTA_LENGTH(bclen);
+ }
+
+ msg = (struct msghdr) {
+ .msg_name = (void*)&nladdr,
+ .msg_namelen = sizeof(nladdr),
+ .msg_iov = iov,
+ .msg_iovlen = f->f ? 3 : 1,
+ };
+
+ if (sendmsg(fd, &msg, 0) < 0) {
+ close(fd);
+ return -1;
+ }
+
+ return 0;
+}
+
static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
{
- int fd;
+ int fd, family;
struct sockaddr_nl nladdr;
struct msghdr msg;
char buf[8192];
@@ -1572,7 +1639,9 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG)) < 0)
return -1;
- if (tcpdiag_send(fd, protocol, f))
+ family = PF_INET;
+again:
+ if (sockdiag_send(family, fd, protocol, f))
return -1;
memset(&nladdr, 0, sizeof(nladdr));
@@ -1620,15 +1689,19 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
h->nlmsg_seq != 123456)
goto skip_it;
- if (h->nlmsg_type == NLMSG_DONE) {
- close(fd);
- return 0;
- }
+ if (h->nlmsg_type == NLMSG_DONE)
+ goto done;
+
if (h->nlmsg_type == NLMSG_ERROR) {
struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h);
if (h->nlmsg_len < NLMSG_LENGTH(sizeof(struct nlmsgerr))) {
fprintf(stderr, "ERROR truncated\n");
} else {
+ if (family != PF_UNSPEC) {
+ family = PF_UNSPEC;
+ goto again;
+ }
+
errno = -err->error;
if (errno == EOPNOTSUPP) {
close(fd);
@@ -1636,8 +1709,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
}
perror("TCPDIAG answers");
}
- close(fd);
- return 0;
+
+ goto done;
}
if (!dump_fp) {
if (!(f->families & (1<<r->idiag_family))) {
@@ -1663,6 +1736,12 @@ skip_it:
exit(1);
}
}
+done:
+ if (family == PF_INET) {
+ family = PF_INET6;
+ goto again;
+ }
+
close(fd);
return 0;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/5] ss: Get udp sockets info via sock-diag
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
` (2 preceding siblings ...)
2012-10-25 13:23 ` [PATCH 3/5] ss: Support sock-diag Pavel Emelyanov
@ 2012-10-25 13:24 ` Pavel Emelyanov
2012-10-27 0:51 ` Stephen Hemminger
2012-10-25 13:26 ` [PATCH 5/5] ss: Show inet and unix sockets' shutdown state Pavel Emelyanov
4 siblings, 1 reply; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:24 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
Now everything is prepared for it, so the patch is straightforward.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
misc/ss.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index 1ceb026..a0ab2e9 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1508,6 +1508,9 @@ static int tcpdiag_send(int fd, int protocol, struct filter *f)
struct rtattr rta;
struct iovec iov[3];
+ if (protocol == IPPROTO_UDP)
+ return -1;
+
memset(&nladdr, 0, sizeof(nladdr));
nladdr.nl_family = AF_NETLINK;
@@ -1976,6 +1979,10 @@ int udp_show(struct filter *f)
{
FILE *fp = NULL;
+ if (!getenv("PROC_NET_UDP") && !getenv("PROC_ROOT")
+ && inet_show_netlink(f, NULL, IPPROTO_UDP) == 0)
+ return 0;
+
dg_proto = UDP_PROTO;
if (f->families&(1<<AF_INET)) {
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
` (3 preceding siblings ...)
2012-10-25 13:24 ` [PATCH 4/5] ss: Get udp sockets info via sock-diag Pavel Emelyanov
@ 2012-10-25 13:26 ` Pavel Emelyanov
2012-10-25 15:52 ` Stephen Hemminger
4 siblings, 1 reply; 12+ messages in thread
From: Pavel Emelyanov @ 2012-10-25 13:26 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
To see this we need kernel >=3.7 with _SHUTDOWN nlarrts in diag messages.
The output will look like arrows at the end of each line, like this:
ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 -->
ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <--
ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 ---
ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <->
for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
include/linux/inet_diag.h | 3 ++-
include/linux/unix_diag.h | 1 +
misc/ss.c | 26 ++++++++++++++++++++------
3 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
index 8c469af..bbde90f 100644
--- a/include/linux/inet_diag.h
+++ b/include/linux/inet_diag.h
@@ -109,9 +109,10 @@ enum {
INET_DIAG_TOS,
INET_DIAG_TCLASS,
INET_DIAG_SKMEMINFO,
+ INET_DIAG_SHUTDOWN,
};
-#define INET_DIAG_MAX INET_DIAG_SKMEMINFO
+#define INET_DIAG_MAX INET_DIAG_SHUTDOWN
/* INET_DIAG_MEM */
diff --git a/include/linux/unix_diag.h b/include/linux/unix_diag.h
index b1d2bf1..b8a2494 100644
--- a/include/linux/unix_diag.h
+++ b/include/linux/unix_diag.h
@@ -37,6 +37,7 @@ enum {
UNIX_DIAG_ICONS,
UNIX_DIAG_RQLEN,
UNIX_DIAG_MEMINFO,
+ UNIX_DIAG_SHUTDOWN,
UNIX_DIAG_MAX,
};
diff --git a/misc/ss.c b/misc/ss.c
index a0ab2e9..0b70ee6 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1327,15 +1327,12 @@ static char *sprint_bw(char *buf, double bw)
return buf;
}
-static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r)
+static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r,
+ struct rtattr *tb[])
{
- struct rtattr * tb[INET_DIAG_MAX+1];
char b1[64];
double rtt = 0;
- parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr*)(r+1),
- nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)));
-
if (tb[INET_DIAG_SKMEMINFO]) {
const __u32 *skmeminfo = RTA_DATA(tb[INET_DIAG_SKMEMINFO]);
@@ -1435,6 +1432,10 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f)
{
struct inet_diag_msg *r = NLMSG_DATA(nlh);
struct tcpstat s;
+ struct rtattr * tb[INET_DIAG_MAX+1];
+
+ parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr*)(r+1),
+ nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)));
s.state = r->idiag_state;
s.local.family = s.remote.family = r->idiag_family;
@@ -1484,10 +1485,15 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f)
if (r->id.idiag_cookie[1] != 0)
printf("%08x", r->id.idiag_cookie[1]);
printf("%08x", r->id.idiag_cookie[0]);
+ if (tb[INET_DIAG_SHUTDOWN]) {
+ unsigned char mask;
+ mask = *(__u8 *)RTA_DATA(tb[INET_DIAG_SHUTDOWN]);
+ printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>');
+ }
}
if (show_mem || show_tcpinfo) {
printf("\n\t");
- tcp_show_info(nlh, r);
+ tcp_show_info(nlh, r, tb);
}
printf("\n");
@@ -2184,6 +2190,14 @@ static int unix_show_sock(struct nlmsghdr *nlh, struct filter *f)
printf(" users:(%s)", ubuf);
}
+ if (show_details) {
+ if (tb[UNIX_DIAG_SHUTDOWN]) {
+ unsigned char mask;
+ mask = *(__u8 *)RTA_DATA(tb[UNIX_DIAG_SHUTDOWN]);
+ printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>');
+ }
+ }
+
printf("\n");
return 0;
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 13:26 ` [PATCH 5/5] ss: Show inet and unix sockets' shutdown state Pavel Emelyanov
@ 2012-10-25 15:52 ` Stephen Hemminger
2012-10-25 16:53 ` Eric Dumazet
0 siblings, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2012-10-25 15:52 UTC (permalink / raw)
To: Pavel Emelyanov; +Cc: Linux Netdev List
On Thu, 25 Oct 2012 17:26:44 +0400
Pavel Emelyanov <xemul@parallels.com> wrote:
> To see this we need kernel >=3.7 with _SHUTDOWN nlarrts in diag messages.
> The output will look like arrows at the end of each line, like this:
>
> ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 -->
> ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <--
> ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 ---
> ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <->
>
> for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively.
>
> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
>
> ---
> include/linux/inet_diag.h | 3 ++-
> include/linux/unix_diag.h | 1 +
> misc/ss.c | 26 ++++++++++++++++++++------
> 3 files changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
> index 8c469af..bbde90f 100644
> --- a/include/linux/inet_diag.h
> +++ b/include/linux/inet_diag.h
> @@ -109,9 +109,10 @@ enum {
> INET_DIAG_TOS,
> INET_DIAG_TCLASS,
> INET_DIAG_SKMEMINFO,
> + INET_DIAG_SHUTDOWN,
> };
Since this requires 3.8 or later kernel, please resubmit this
patch during that merge window.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 15:52 ` Stephen Hemminger
@ 2012-10-25 16:53 ` Eric Dumazet
2012-10-25 17:09 ` Stephen Hemminger
0 siblings, 1 reply; 12+ messages in thread
From: Eric Dumazet @ 2012-10-25 16:53 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Pavel Emelyanov, Linux Netdev List
On Thu, 2012-10-25 at 08:52 -0700, Stephen Hemminger wrote:
> On Thu, 25 Oct 2012 17:26:44 +0400
> Pavel Emelyanov <xemul@parallels.com> wrote:
>
> > To see this we need kernel >=3.7 with _SHUTDOWN nlarrts in diag messages.
> > The output will look like arrows at the end of each line, like this:
> >
> > ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 -->
> > ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <--
> > ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 ---
> > ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <->
> >
> > for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively.
> >
> > Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
> >
> > ---
> > include/linux/inet_diag.h | 3 ++-
> > include/linux/unix_diag.h | 1 +
> > misc/ss.c | 26 ++++++++++++++++++++------
> > 3 files changed, 23 insertions(+), 7 deletions(-)
> >
> > diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
> > index 8c469af..bbde90f 100644
> > --- a/include/linux/inet_diag.h
> > +++ b/include/linux/inet_diag.h
> > @@ -109,9 +109,10 @@ enum {
> > INET_DIAG_TOS,
> > INET_DIAG_TCLASS,
> > INET_DIAG_SKMEMINFO,
> > + INET_DIAG_SHUTDOWN,
> > };
>
> Since this requires 3.8 or later kernel, please resubmit this
> patch during that merge window.
> --
I am wondering what possibly could happen if applying this before ?
iproute2 should be non dependent on kernel version, we make sure to not
add regressions.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 16:53 ` Eric Dumazet
@ 2012-10-25 17:09 ` Stephen Hemminger
2012-10-25 18:00 ` Eric Dumazet
0 siblings, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2012-10-25 17:09 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Pavel Emelyanov, Linux Netdev List
On Thu, 25 Oct 2012 18:53:30 +0200
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Thu, 2012-10-25 at 08:52 -0700, Stephen Hemminger wrote:
> > On Thu, 25 Oct 2012 17:26:44 +0400
> > Pavel Emelyanov <xemul@parallels.com> wrote:
> >
> > > To see this we need kernel >=3.7 with _SHUTDOWN nlarrts in diag messages.
> > > The output will look like arrows at the end of each line, like this:
> > >
> > > ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 -->
> > > ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <--
> > > ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 ---
> > > ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <->
> > >
> > > for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively.
> > >
> > > Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
> > >
> > > ---
> > > include/linux/inet_diag.h | 3 ++-
> > > include/linux/unix_diag.h | 1 +
> > > misc/ss.c | 26 ++++++++++++++++++++------
> > > 3 files changed, 23 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h
> > > index 8c469af..bbde90f 100644
> > > --- a/include/linux/inet_diag.h
> > > +++ b/include/linux/inet_diag.h
> > > @@ -109,9 +109,10 @@ enum {
> > > INET_DIAG_TOS,
> > > INET_DIAG_TCLASS,
> > > INET_DIAG_SKMEMINFO,
> > > + INET_DIAG_SHUTDOWN,
> > > };
> >
> > Since this requires 3.8 or later kernel, please resubmit this
> > patch during that merge window.
> > --
>
> I am wondering what possibly could happen if applying this before ?
>
> iproute2 should be non dependent on kernel version, we make sure to not
> add regressions.
>
>
>
I don't want the stashed kernel headers to get out of date with kernel exported ones.
People who want to test early features are free to build their own pre-release versions.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 17:09 ` Stephen Hemminger
@ 2012-10-25 18:00 ` Eric Dumazet
2012-10-25 23:01 ` Stephen Hemminger
0 siblings, 1 reply; 12+ messages in thread
From: Eric Dumazet @ 2012-10-25 18:00 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Pavel Emelyanov, Linux Netdev List
On Thu, 2012-10-25 at 10:09 -0700, Stephen Hemminger wrote:
> I don't want the stashed kernel headers to get out of date with kernel exported ones.
>
> People who want to test early features are free to build their own pre-release versions.
> --
Have you considered an iproute2-next tree, it would really help us a
lot.
Just to be clear, were the patches 1-4 accepted ?
(UDP diag was added kernel in December 2011)
Thanks
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] ss: Show inet and unix sockets' shutdown state
2012-10-25 18:00 ` Eric Dumazet
@ 2012-10-25 23:01 ` Stephen Hemminger
0 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2012-10-25 23:01 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Pavel Emelyanov, Linux Netdev List
On Thu, 25 Oct 2012 20:00:54 +0200
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Thu, 2012-10-25 at 10:09 -0700, Stephen Hemminger wrote:
>
> > I don't want the stashed kernel headers to get out of date with kernel exported ones.
> >
> > People who want to test early features are free to build their own pre-release versions.
> > --
>
> Have you considered an iproute2-next tree, it would really help us a
> lot.
>
> Just to be clear, were the patches 1-4 accepted ?
>
> (UDP diag was added kernel in December 2011)
>
> Thanks
>
>
The first 4 patches are fine, and I will probably take those.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/5] ss: Get udp sockets info via sock-diag
2012-10-25 13:24 ` [PATCH 4/5] ss: Get udp sockets info via sock-diag Pavel Emelyanov
@ 2012-10-27 0:51 ` Stephen Hemminger
0 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2012-10-27 0:51 UTC (permalink / raw)
To: Pavel Emelyanov; +Cc: Linux Netdev List
On Thu, 25 Oct 2012 17:24:58 +0400
Pavel Emelyanov <xemul@parallels.com> wrote:
> Now everything is prepared for it, so the patch is straightforward.
>
> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
>
1-4 standalone and do not require latest kernel; therefore applied
Please resubmit #5 during next merge window.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-10-27 0:52 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-25 13:16 [PATCH iproute2 0/5] Teach ss to show sockets' shutdown state Pavel Emelyanov
2012-10-25 13:18 ` [PATCH 1/5] ss: Rename some tcp- names into inet- Pavel Emelyanov
2012-10-25 13:21 ` [PATCH 2/5] ss: Split inet_show_netlink into parts Pavel Emelyanov
2012-10-25 13:23 ` [PATCH 3/5] ss: Support sock-diag Pavel Emelyanov
2012-10-25 13:24 ` [PATCH 4/5] ss: Get udp sockets info via sock-diag Pavel Emelyanov
2012-10-27 0:51 ` Stephen Hemminger
2012-10-25 13:26 ` [PATCH 5/5] ss: Show inet and unix sockets' shutdown state Pavel Emelyanov
2012-10-25 15:52 ` Stephen Hemminger
2012-10-25 16:53 ` Eric Dumazet
2012-10-25 17:09 ` Stephen Hemminger
2012-10-25 18:00 ` Eric Dumazet
2012-10-25 23:01 ` Stephen Hemminger
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).