]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
ss: Split inet_show_netlink into parts
authorPavel Emelyanov <xemul@parallels.com>
Thu, 25 Oct 2012 03:21:39 +0000 (03:21 +0000)
committerStephen Hemminger <shemminger@vyatta.com>
Sat, 27 Oct 2012 00:48:49 +0000 (17:48 -0700)
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

index 3bceedf8639fe6dfcb7494f9e8c859bf7a93177f..27feeb831339b7f7a4a15fdaf26da98e26c66eea 100644 (file)
--- 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)