Commit 746a695f authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Stephen Hemminger

ss: Split inet_show_netlink into parts

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: default avatarPavel Emelyanov <xemul@parallels.com>
parent 3fe5b534
...@@ -1495,9 +1495,8 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f) ...@@ -1495,9 +1495,8 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f)
return 0; 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 sockaddr_nl nladdr;
struct { struct {
struct nlmsghdr nlh; struct nlmsghdr nlh;
...@@ -1507,12 +1506,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol) ...@@ -1507,12 +1506,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
int bclen; int bclen;
struct msghdr msg; struct msghdr msg;
struct rtattr rta; struct rtattr rta;
char buf[8192];
struct iovec iov[3]; struct iovec iov[3];
if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG)) < 0)
return -1;
memset(&nladdr, 0, sizeof(nladdr)); memset(&nladdr, 0, sizeof(nladdr));
nladdr.nl_family = AF_NETLINK; nladdr.nl_family = AF_NETLINK;
...@@ -1563,6 +1558,26 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol) ...@@ -1563,6 +1558,26 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol)
return -1; 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[0] = (struct iovec){
.iov_base = buf, .iov_base = buf,
.iov_len = sizeof(buf) .iov_len = sizeof(buf)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment