Commit acba1e9b authored by Pavel Emelyanov's avatar Pavel Emelyanov

sock: Cleanup inet sockets collecing

There is no need in 6 receive callbacks -- we can find out family and protocol
(and thus -- type) out of the inet_diag_req_v2 passed through transparent arg
of nlk request engine.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 64149b40
...@@ -143,34 +143,25 @@ int dump_socket(struct fd_parms *p, int lfd, const struct cr_fdset *cr_fdset) ...@@ -143,34 +143,25 @@ int dump_socket(struct fd_parms *p, int lfd, const struct cr_fdset *cr_fdset)
return -1; return -1;
} }
static int inet_tcp_receive_one(struct nlmsghdr *h, void *arg) static int inet_receive_one(struct nlmsghdr *h, void *arg)
{ {
return inet_collect_one(h, AF_INET, SOCK_STREAM, IPPROTO_TCP); struct inet_diag_req_v2 *i = arg;
} int type;
static int inet_udp_receive_one(struct nlmsghdr *h, void *arg)
{
return inet_collect_one(h, AF_INET, SOCK_DGRAM, IPPROTO_UDP);
}
static int inet_udplite_receive_one(struct nlmsghdr *h, void *arg)
{
return inet_collect_one(h, AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
}
static int inet6_tcp_receive_one(struct nlmsghdr *h, void *arg)
{
return inet_collect_one(h, AF_INET6, SOCK_STREAM, IPPROTO_TCP);
}
static int inet6_udp_receive_one(struct nlmsghdr *h, void *arg) switch (i->sdiag_protocol) {
{ case IPPROTO_TCP:
return inet_collect_one(h, AF_INET6, SOCK_DGRAM, IPPROTO_UDP); type = SOCK_STREAM;
} break;
case IPPROTO_UDP:
case IPPROTO_UDPLITE:
type = SOCK_DGRAM;
break;
default:
BUG_ON(1);
return -1;
}
static int inet6_udplite_receive_one(struct nlmsghdr *h, void *arg) return inet_collect_one(h, i->sdiag_family, type, i->sdiag_protocol);
{
return inet_collect_one(h, AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE);
} }
int collect_sockets(int pid) int collect_sockets(int pid)
...@@ -222,7 +213,7 @@ int collect_sockets(int pid) ...@@ -222,7 +213,7 @@ int collect_sockets(int pid)
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
/* Only listening and established sockets supported yet */ /* Only listening and established sockets supported yet */
req.r.i.idiag_states = (1 << TCP_LISTEN) | (1 << TCP_ESTABLISHED); req.r.i.idiag_states = (1 << TCP_LISTEN) | (1 << TCP_ESTABLISHED);
tmp = do_rtnl_req(nl, &req, sizeof(req), inet_tcp_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
...@@ -231,7 +222,7 @@ int collect_sockets(int pid) ...@@ -231,7 +222,7 @@ int collect_sockets(int pid)
req.r.i.sdiag_protocol = IPPROTO_UDP; req.r.i.sdiag_protocol = IPPROTO_UDP;
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
req.r.i.idiag_states = -1; /* All */ req.r.i.idiag_states = -1; /* All */
tmp = do_rtnl_req(nl, &req, sizeof(req), inet_udp_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
...@@ -240,7 +231,7 @@ int collect_sockets(int pid) ...@@ -240,7 +231,7 @@ int collect_sockets(int pid)
req.r.i.sdiag_protocol = IPPROTO_UDPLITE; req.r.i.sdiag_protocol = IPPROTO_UDPLITE;
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
req.r.i.idiag_states = -1; /* All */ req.r.i.idiag_states = -1; /* All */
tmp = do_rtnl_req(nl, &req, sizeof(req), inet_udplite_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
...@@ -250,7 +241,7 @@ int collect_sockets(int pid) ...@@ -250,7 +241,7 @@ int collect_sockets(int pid)
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
/* Only listening sockets supported yet */ /* Only listening sockets supported yet */
req.r.i.idiag_states = 1 << TCP_LISTEN; req.r.i.idiag_states = 1 << TCP_LISTEN;
tmp = do_rtnl_req(nl, &req, sizeof(req), inet6_tcp_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
...@@ -259,7 +250,7 @@ int collect_sockets(int pid) ...@@ -259,7 +250,7 @@ int collect_sockets(int pid)
req.r.i.sdiag_protocol = IPPROTO_UDP; req.r.i.sdiag_protocol = IPPROTO_UDP;
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
req.r.i.idiag_states = -1; /* All */ req.r.i.idiag_states = -1; /* All */
tmp = do_rtnl_req(nl, &req, sizeof(req), inet6_udp_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
...@@ -268,7 +259,7 @@ int collect_sockets(int pid) ...@@ -268,7 +259,7 @@ int collect_sockets(int pid)
req.r.i.sdiag_protocol = IPPROTO_UDPLITE; req.r.i.sdiag_protocol = IPPROTO_UDPLITE;
req.r.i.idiag_ext = 0; req.r.i.idiag_ext = 0;
req.r.i.idiag_states = -1; /* All */ req.r.i.idiag_states = -1; /* All */
tmp = do_rtnl_req(nl, &req, sizeof(req), inet6_udplite_receive_one, NULL); tmp = do_rtnl_req(nl, &req, sizeof(req), inet_receive_one, &req.r.i);
if (tmp) if (tmp)
err = tmp; err = tmp;
......
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