Commit 6cf65d0f authored by Pavel Emelyanov's avatar Pavel Emelyanov

parasite: Remove the connect-tsock command

Do init and transport sockets interconnections in one
switch to parasite.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent bc21b29b
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
enum { enum {
PARASITE_CMD_INIT, PARASITE_CMD_INIT,
PARASITE_CMD_TCONNECT,
PARASITE_CMD_SET_LOGFD, PARASITE_CMD_SET_LOGFD,
PARASITE_CMD_FINI, PARASITE_CMD_FINI,
...@@ -39,8 +38,11 @@ enum { ...@@ -39,8 +38,11 @@ enum {
}; };
struct parasite_init_args { struct parasite_init_args {
int sun_len; int h_addr_len;
struct sockaddr_un saddr; struct sockaddr_un h_addr;
int p_addr_len;
struct sockaddr_un p_addr;
}; };
struct parasite_dump_pages_args { struct parasite_dump_pages_args {
......
...@@ -353,16 +353,6 @@ static int parasite_prep_file(int fd, struct parasite_ctl *ctl) ...@@ -353,16 +353,6 @@ static int parasite_prep_file(int fd, struct parasite_ctl *ctl)
return 0; return 0;
} }
static int parasite_init(struct parasite_ctl *ctl, pid_t pid)
{
struct parasite_init_args args = { };
args.sun_len = gen_parasite_saddr(&args.saddr, pid);
return parasite_execute(PARASITE_CMD_INIT, ctl,
&args, sizeof(args));
}
static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid) static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid)
{ {
int ret; int ret;
...@@ -378,14 +368,13 @@ static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid) ...@@ -378,14 +368,13 @@ static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid)
return 0; return 0;
} }
static int parasite_connect_tsocket(struct parasite_ctl *ctl) static int parasite_init(struct parasite_ctl *ctl, pid_t pid)
{ {
struct parasite_init_args args = { }; struct parasite_init_args args = { };
struct sockaddr_un saddr;
int sun_len;
int sock; int sock;
sun_len = gen_parasite_saddr(&saddr, ctl->pid); args.h_addr_len = gen_parasite_saddr(&args.h_addr, pid);
args.p_addr_len = gen_parasite_saddr(&args.p_addr, -pid);
sock = socket(PF_UNIX, SOCK_DGRAM, 0); sock = socket(PF_UNIX, SOCK_DGRAM, 0);
if (sock < 0) { if (sock < 0) {
...@@ -393,21 +382,20 @@ static int parasite_connect_tsocket(struct parasite_ctl *ctl) ...@@ -393,21 +382,20 @@ static int parasite_connect_tsocket(struct parasite_ctl *ctl)
return -1; return -1;
} }
if (connect(sock, &saddr, sun_len) < 0) { if (bind(sock, (struct sockaddr *)&args.h_addr, args.h_addr_len) < 0) {
pr_perror("Can't connect a transport socket"); pr_perror("Can't bind socket");
goto err; goto err;
} }
args.sun_len = gen_parasite_saddr(&args.saddr, -getpid()); if (parasite_execute(PARASITE_CMD_INIT, ctl, &args, sizeof(args)) < 0) {
pr_err("Can't init parasite\n");
if (bind(sock, (struct sockaddr *)&args.saddr, args.sun_len) < 0) {
pr_perror("Can't bind socket");
goto err; goto err;
} }
if (parasite_execute(PARASITE_CMD_TCONNECT, ctl, if (connect(sock, (struct sockaddr *)&args.p_addr, args.p_addr_len) < 0) {
&args, sizeof(args)) < 0) pr_perror("Can't connect a transport socket");
goto err; goto err;
}
ctl->tsock = sock; ctl->tsock = sock;
return 0; return 0;
...@@ -746,12 +734,6 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct list_head *vma_are ...@@ -746,12 +734,6 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct list_head *vma_are
ctl->signals_blocked = 1; ctl->signals_blocked = 1;
ret = parasite_connect_tsocket(ctl);
if (ret) {
pr_err("%d: Can't set connect\n", pid);
goto err_restore;
}
ret = parasite_set_logfd(ctl, pid); ret = parasite_set_logfd(ctl, pid);
if (ret) { if (ret) {
pr_err("%d: Can't set a logging descriptor\n", pid); pr_err("%d: Can't set a logging descriptor\n", pid);
......
...@@ -350,7 +350,11 @@ static int init(struct parasite_init_args *args) ...@@ -350,7 +350,11 @@ static int init(struct parasite_init_args *args)
if (tsock < 0) if (tsock < 0)
return -tsock; return -tsock;
ret = sys_bind(tsock, (struct sockaddr *) &args->saddr, args->sun_len); ret = sys_bind(tsock, (struct sockaddr *) &args->p_addr, args->p_addr_len);
if (ret < 0)
return ret;
ret = sys_connect(tsock, (struct sockaddr *)&args->h_addr, args->h_addr_len);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -364,11 +368,6 @@ static int init(struct parasite_init_args *args) ...@@ -364,11 +368,6 @@ static int init(struct parasite_init_args *args)
return ret; return ret;
} }
static int tconnect(struct parasite_init_args *args)
{
return sys_connect(tsock, (struct sockaddr *) &args->saddr, args->sun_len);
}
static int parasite_set_logfd() static int parasite_set_logfd()
{ {
int ret; int ret;
...@@ -404,8 +403,6 @@ int __used parasite_service(unsigned long cmd, void *args) ...@@ -404,8 +403,6 @@ int __used parasite_service(unsigned long cmd, void *args)
switch (cmd) { switch (cmd) {
case PARASITE_CMD_INIT: case PARASITE_CMD_INIT:
return init((struct parasite_init_args *) args); return init((struct parasite_init_args *) args);
case PARASITE_CMD_TCONNECT:
return tconnect((struct parasite_init_args *) args);
case PARASITE_CMD_FINI: case PARASITE_CMD_FINI:
return fini(); return fini();
case PARASITE_CMD_SET_LOGFD: case PARASITE_CMD_SET_LOGFD:
......
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