X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=server.c;h=a54db7bf5d385aee5dbbc9e66d159169681f4de3;hb=b51eedb75e3f1a9db33fa488ff7d9cc0a956b8ee;hp=c3502cd1570907a24ef8e80062631015de91ee4e;hpb=89cf1480594858ad4e02499834c04fe48ff0a89d;p=fio.git diff --git a/server.c b/server.c index c3502cd1..a54db7bf 100644 --- a/server.c +++ b/server.c @@ -102,7 +102,7 @@ static int verify_convert_cmd(struct fio_net_cmd *cmd) cmd->pdu_len = le32_to_cpu(cmd->pdu_len); switch (cmd->version) { - case FIO_SERVER_VER2: + case FIO_SERVER_VER: break; default: log_err("fio: bad server cmd version %d\n", cmd->version); @@ -270,24 +270,36 @@ static int handle_job_cmd(struct fio_net_cmd *cmd) static int handle_jobline_cmd(struct fio_net_cmd *cmd) { - struct cmd_line_pdu *pdu = (struct cmd_line_pdu *) cmd->payload; - char *argv[FIO_NET_CMD_JOBLINE_ARGV]; + void *pdu = cmd->payload; + struct cmd_single_line_pdu *cslp; + struct cmd_line_pdu *clp; + unsigned long offset; + char **argv; int ret, i; - pdu->argc = le16_to_cpu(pdu->argc); + clp = pdu; + clp->lines = le16_to_cpu(clp->lines); + argv = malloc(clp->lines * sizeof(char *)); + offset = sizeof(*clp); - dprint(FD_NET, "server: %d command line args\n", pdu->argc); + dprint(FD_NET, "server: %d command line args\n", clp->lines); - for (i = 0; i < pdu->argc; i++) { - argv[i] = (char *) pdu->argv[i]; + for (i = 0; i < clp->lines; i++) { + cslp = pdu + offset; + argv[i] = (char *) cslp->text; + + offset += sizeof(*cslp) + le16_to_cpu(cslp->len); dprint(FD_NET, "server: %d: %s\n", i, argv[i]); } - if (parse_cmd_line(pdu->argc, argv)) { + if (parse_cmd_line(clp->lines, argv)) { fio_server_send_quit_cmd(); + free(argv); return -1; } + free(argv); + fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0); ret = exec_run(); @@ -309,6 +321,9 @@ static int handle_probe_cmd(struct fio_net_cmd *cmd) probe.fio_minor = FIO_MINOR; probe.fio_patch = FIO_PATCH; + probe.os = FIO_OS; + probe.arch = FIO_ARCH; + return fio_net_send_cmd(server_fd, FIO_NET_CMD_PROBE, &probe, sizeof(probe)); } @@ -745,7 +760,7 @@ int fio_server_parse_string(const char *str, char **ptr, int *is_sock, { *ptr = NULL; *is_sock = 0; - *port = 0; + *port = fio_net_port; if (!strncmp(str, "sock:", 5)) { *ptr = strdup(str + 5); @@ -799,7 +814,6 @@ int fio_server_parse_string(const char *str, char **ptr, int *is_sock, hent = gethostbyname(host); if (!hent) { - printf("FAIL\n"); free(*ptr); *ptr = NULL; return 1; @@ -829,22 +843,25 @@ int fio_server_parse_string(const char *str, char **ptr, int *is_sock, */ static int fio_handle_server_arg(void) { - int is_sock, ret; + int port = fio_net_port; + int is_sock, ret = 0; saddr_in.sin_addr.s_addr = htonl(INADDR_ANY); - saddr_in.sin_port = htons(fio_net_port); if (!fio_server_arg) - return 0; + goto out; ret = fio_server_parse_string(fio_server_arg, &bind_sock, &is_sock, - &fio_net_port, &saddr_in.sin_addr); + &port, &saddr_in.sin_addr); if (!is_sock && bind_sock) { free(bind_sock); bind_sock = NULL; } +out: + fio_net_port = port; + saddr_in.sin_port = htons(port); return ret; }