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