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: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
3fe5b534fe
commit
746a695f86
27
misc/ss.c
27
misc/ss.c
|
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue