X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=server.c;h=f8c36357a2dbfcce3577d94c8f94466cb979538d;hp=81ec6b0e07e49c12fddf37126536d62fbc63ae70;hb=2caefeecf95c2e01ccffc3e286d17a84b12f4dc1;hpb=660a2bfb0858f94633f9e567b81968981541f079 diff --git a/server.c b/server.c index 81ec6b0e..f8c36357 100644 --- a/server.c +++ b/server.c @@ -22,8 +22,6 @@ #include "crc/crc16.h" #include "lib/ieee754.h" -#include "fio_version.h" - int fio_net_port = 8765; int exit_backend = 0; @@ -124,7 +122,7 @@ static int verify_convert_cmd(struct fio_net_cmd *cmd) cmd->cmd_crc16 = le16_to_cpu(cmd->cmd_crc16); cmd->pdu_crc16 = le16_to_cpu(cmd->pdu_crc16); - crc = crc16(cmd, FIO_NET_CMD_CRC_SZ); + crc = fio_crc16(cmd, FIO_NET_CMD_CRC_SZ); if (crc != cmd->cmd_crc16) { log_err("fio: server bad crc on command (got %x, wanted %x)\n", cmd->cmd_crc16, crc); @@ -202,7 +200,7 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk) break; /* Verify payload crc */ - crc = crc16(pdu, cmd.pdu_len); + crc = fio_crc16(pdu, cmd.pdu_len); if (crc != cmd.pdu_crc16) { log_err("fio: server bad crc on payload "); log_err("(got %x, wanted %x)\n", cmd.pdu_crc16, crc); @@ -238,11 +236,11 @@ void fio_net_cmd_crc(struct fio_net_cmd *cmd) { uint32_t pdu_len; - cmd->cmd_crc16 = __cpu_to_le16(crc16(cmd, FIO_NET_CMD_CRC_SZ)); + cmd->cmd_crc16 = __cpu_to_le16(fio_crc16(cmd, FIO_NET_CMD_CRC_SZ)); pdu_len = le32_to_cpu(cmd->pdu_len); if (pdu_len) - cmd->pdu_crc16 = __cpu_to_le16(crc16(cmd->payload, pdu_len)); + cmd->pdu_crc16 = __cpu_to_le16(fio_crc16(cmd->payload, pdu_len)); } int fio_net_send_cmd(int fd, uint16_t opcode, const void *buf, off_t size, @@ -344,9 +342,10 @@ static int handle_job_cmd(struct fio_net_cmd *cmd) } spdu.jobs = cpu_to_le32(thread_number); + spdu.stat_outputs = cpu_to_le32(stat_number); fio_net_send_cmd(server_fd, FIO_NET_CMD_START, &spdu, sizeof(spdu), 0); - ret = exec_run(); + ret = fio_backend(); epdu.error = ret; fio_net_send_cmd(server_fd, FIO_NET_CMD_STOP, &epdu, sizeof(epdu), 0); @@ -390,7 +389,7 @@ static int handle_jobline_cmd(struct fio_net_cmd *cmd) fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0, NULL); - ret = exec_run(); + ret = fio_backend(); fio_server_send_quit_cmd(); reset_fio_state(); return ret; @@ -407,9 +406,7 @@ static int handle_probe_cmd(struct fio_net_cmd *cmd) #ifdef FIO_BIG_ENDIAN probe.bigendian = 1; #endif - probe.fio_major = FIO_MAJOR; - probe.fio_minor = FIO_MINOR; - probe.fio_patch = FIO_PATCH; + strncpy((char *) probe.fio_version, fio_version_string, sizeof(probe.fio_version)); probe.os = FIO_OS; probe.arch = FIO_ARCH; @@ -453,8 +450,9 @@ static int handle_send_eta_cmd(struct fio_net_cmd *cmd) je->iops[i] = cpu_to_le32(je->iops[i]); } - je->elapsed_sec = cpu_to_le32(je->nr_running); + je->elapsed_sec = cpu_to_le64(je->elapsed_sec); je->eta_sec = cpu_to_le64(je->eta_sec); + je->is_pow2 = cpu_to_le32(je->is_pow2); fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, cmd->tag); free(je); @@ -959,6 +957,10 @@ int fio_server_parse_string(const char *str, char **ptr, int *is_sock, int *port, struct in_addr *inp, struct in6_addr *inp6, int *ipv6) { + const char *host = str; + char *portp; + int ret, lport = 0; + *ptr = NULL; *is_sock = 0; *port = fio_net_port; @@ -967,93 +969,91 @@ int fio_server_parse_string(const char *str, char **ptr, int *is_sock, if (!strncmp(str, "sock:", 5)) { *ptr = strdup(str + 5); *is_sock = 1; - } else { - const char *host = str; - char *portp; - int ret, lport = 0; - - /* - * Is it ip::port - */ - if (!strncmp(host, "ip:", 3)) - host += 3; - else if (!strncmp(host, "ip4:", 4)) - host += 4; - else if (!strncmp(host, "ip6:", 4)) { - host += 4; - *ipv6 = 1; - } else if (host[0] == ':') { - /* String is :port */ - host++; - lport = atoi(host); + + return 0; + } + + /* + * Is it ip::port + */ + if (!strncmp(host, "ip:", 3)) + host += 3; + else if (!strncmp(host, "ip4:", 4)) + host += 4; + else if (!strncmp(host, "ip6:", 4)) { + host += 4; + *ipv6 = 1; + } else if (host[0] == ':') { + /* String is :port */ + host++; + lport = atoi(host); + if (!lport || lport > 65535) { + log_err("fio: bad server port %u\n", port); + return 1; + } + /* no hostname given, we are done */ + *port = lport; + return 0; + } + + /* + * If no port seen yet, check if there's a last ':' at the end + */ + if (!lport) { + portp = strchr(host, ','); + if (portp) { + *portp = '\0'; + portp++; + lport = atoi(portp); if (!lport || lport > 65535) { log_err("fio: bad server port %u\n", port); return 1; } - /* no hostname given, we are done */ - *port = lport; - return 0; } + } - /* - * If no port seen yet, check if there's a last ':' at the end - */ - if (!lport) { - portp = strchr(host, ','); - if (portp) { - *portp = '\0'; - portp++; - lport = atoi(portp); - if (!lport || lport > 65535) { - log_err("fio: bad server port %u\n", port); - return 1; - } - } - } + if (lport) + *port = lport; - if (lport) - *port = lport; + if (!strlen(host)) + return 0; - if (!strlen(host)) - goto done; + *ptr = strdup(host); - *ptr = strdup(host); + if (*ipv6) + ret = inet_pton(AF_INET6, host, inp6); + else + ret = inet_pton(AF_INET, host, inp); - if (*ipv6) - ret = inet_pton(AF_INET6, host, inp6); - else - ret = inet_pton(AF_INET, host, inp); + if (ret != 1) { + struct hostent *hent; - if (ret != 1) { - struct hostent *hent; + hent = gethostbyname(host); + if (!hent) { + log_err("fio: failed to resolve <%s>\n", host); + free(*ptr); + *ptr = NULL; + return 1; + } - hent = gethostbyname(host); - if (!hent) { - log_err("fio: failed to resolve <%s>\n", host); -err: + if (*ipv6) { + if (hent->h_addrtype != AF_INET6) { + log_info("fio: falling back to IPv4\n"); + *ipv6 = 0; + } else + memcpy(inp6, hent->h_addr_list[0], 16); + } + if (!*ipv6) { + if (hent->h_addrtype != AF_INET) { + log_err("fio: lookup type mismatch\n"); free(*ptr); *ptr = NULL; return 1; } - - if (*ipv6) { - if (hent->h_addrtype != AF_INET6) { - log_info("fio: falling back to IPv4\n"); - *ipv6 = 0; - } else - memcpy(inp6, hent->h_addr_list[0], 16); - } - if (!*ipv6) { - if (hent->h_addrtype != AF_INET) { - log_err("fio: lookup type mismatch\n"); - goto err; - } - memcpy(inp, hent->h_addr_list[0], 4); - } + memcpy(inp, hent->h_addr_list[0], 4); } } -done: if (*port == 0) *port = fio_net_port; @@ -1185,6 +1185,11 @@ int fio_start_server(char *pidfile) pid_t pid; int ret; +#if defined(WIN32) + WSADATA wsd; + WSAStartup(MAKEWORD(2,2), &wsd); +#endif + if (!pidfile) return fio_server();