1dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron#ifndef CLIENT_H 2dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron#define CLIENT_H 3dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 40f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe#include <sys/socket.h> 50f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe#include <sys/un.h> 60f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe#include <netinet/in.h> 70f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe#include <arpa/inet.h> 80f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 93e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe#include "stat.h" 103e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 11dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronstruct fio_net_cmd; 12a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboestruct client_ops; 13dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 14b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeenum { 15b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_created = 0, 16b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_connected = 1, 17b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_started = 2, 18b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_running = 3, 19b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_stopped = 4, 20b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Client_exited = 5, 21b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe}; 22b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe 233589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboestruct client_file { 243589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe char *file; 253589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe int remote; 263589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe}; 273589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe 280f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboestruct fio_client { 290f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head list; 300f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head hash_list; 310f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head arg_list; 320f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe union { 330f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_in addr; 340f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_in6 addr6; 350f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_un addr_un; 360f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe }; 370f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char *hostname; 380f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int port; 390f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int fd; 405121a9aa0299a2c23b3c50bf110ab4a05677c740Jens Axboe unsigned int refs; 410f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 420f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char *name; 430f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 440f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int state; 450f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 460f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int skip_newline; 470f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int is_sock; 480f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int disk_stats_shown; 490f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe unsigned int jobs; 5030f8e31626ead5d71814f2e4299ef878f3b87ecfJens Axboe unsigned int nr_stat; 510f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int error; 52122c772599f1b0a3148a5790775698d3fa92cc10Jens Axboe int signal; 530f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int ipv6; 540f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int sent_job; 551e5324e723116a5faf9da686993cc79c14d62d4bJens Axboe int did_stat; 5646bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe uint32_t type; 570f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 5840c605169e60d32fc321a2f9f465e76cba745489Jens Axboe uint32_t thread_number; 5940c605169e60d32fc321a2f9f465e76cba745489Jens Axboe uint32_t groupid; 6040c605169e60d32fc321a2f9f465e76cba745489Jens Axboe 610f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head eta_list; 620f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct client_eta *eta_in_flight; 630f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 640f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head cmd_list; 650f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 660f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe uint16_t argc; 670f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char **argv; 683ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 69a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboe struct client_ops *ops; 703ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe void *client_data; 7114ea90edf265aae2b82f25418fde179c452909f9Jens Axboe 723589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe struct client_file *files; 733589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboe unsigned int nr_files; 740f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe}; 750f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 761b42725f06f8906b9b99381da3490484f59df28aJens Axboestruct cmd_iolog_pdu; 7735c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboetypedef void (client_cmd_op)(struct fio_client *, struct fio_net_cmd *); 7835c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboetypedef void (client_eta_op)(struct jobs_eta *je); 7935c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboetypedef void (client_timed_out_op)(struct fio_client *); 8035c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboetypedef void (client_jobs_eta_op)(struct fio_client *client, struct jobs_eta *je); 811b42725f06f8906b9b99381da3490484f59df28aJens Axboetypedef void (client_iolog_op)(struct fio_client *client, struct cmd_iolog_pdu *); 823ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 83dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronstruct client_ops { 8435c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *text; 8535c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *disk_util; 8635c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *thread_status; 8735c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *group_stats; 8835c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_jobs_eta_op *jobs_eta; 8935c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_eta_op *eta; 9035c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *probe; 9135c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *quit; 9235c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *add_job; 9340c605169e60d32fc321a2f9f465e76cba745489Jens Axboe client_cmd_op *update_job; 9435c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_timed_out_op *timed_out; 9535c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *stop; 9635c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *start; 9735c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe client_cmd_op *job_start; 981b42725f06f8906b9b99381da3490484f59df28aJens Axboe client_iolog_op *iolog; 990cf3ece062d6856bd79b89770780296c99937a98Jens Axboe client_timed_out_op *removed; 10035c0ba7ff55bbd438cdc171945c61d501a4e693eJens Axboe 1016433ee054a5dc6533066e105baee4ff85197d392Jens Axboe unsigned int eta_msec; 1023ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe int stay_connected; 10346bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe uint32_t client_type; 104dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron}; 105dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 106dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronextern struct client_ops fio_client_ops; 107dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 1083e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboestruct client_eta { 1093e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe unsigned int pending; 110166fb52041fd81e453fa77ccea48abaa20dc5b3eJens Axboe struct jobs_eta eta; 1113e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe}; 1123e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 113a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_client(struct fio_client *); 114a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern void fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op fn); 1153e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboeextern void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je); 1163e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 1173ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeenum { 1183ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv4 = 1, 1193ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv6, 1203ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_socket, 1213ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe}; 1223ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 1232f99deb0895b2d0b618e6e72c74add7192b4d73fJens Axboeextern int fio_client_connect(struct fio_client *); 1243ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_connect(void); 125b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_client(struct fio_client *); 126b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_all_clients(void); 1273ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_send_ini(const char *); 1283589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboeextern int fio_client_send_ini(struct fio_client *, const char *, int); 129a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_clients(struct client_ops *); 130a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_client_add(struct client_ops *, const char *, void **); 131a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern struct fio_client *fio_client_add_explicit(struct client_ops *, const char *, int, int); 1323ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern void fio_client_add_cmd_option(void *, const char *); 1333589918ceb15ffdc795c963923ce10ac9b9c87d5Jens Axboeextern int fio_client_add_ini_file(void *, const char *, int); 1340cf3ece062d6856bd79b89770780296c99937a98Jens Axboeextern int fio_client_terminate(struct fio_client *); 135df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboeextern void fio_clients_terminate(void); 136343cb4a98200757bdcb0c5203e9120bb777625a8Jens Axboeextern struct fio_client *fio_get_client(struct fio_client *); 137343cb4a98200757bdcb0c5203e9120bb777625a8Jens Axboeextern void fio_put_client(struct fio_client *); 13840c605169e60d32fc321a2f9f465e76cba745489Jens Axboeextern int fio_client_update_options(struct fio_client *, struct thread_options *, uint64_t *); 13940c605169e60d32fc321a2f9f465e76cba745489Jens Axboeextern int fio_client_wait_for_reply(struct fio_client *, uint64_t); 140de54cfd8b8e93d2a32a02961f1587b83f0763aa8Jens Axboeextern int fio_clients_send_trigger(const char *); 141df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboe 1426433ee054a5dc6533066e105baee4ff85197d392Jens Axboe#define FIO_CLIENT_DEF_ETA_MSEC 900 1436433ee054a5dc6533066e105baee4ff85197d392Jens Axboe 14446bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboeenum { 14546bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe FIO_CLIENT_TYPE_CLI = 1, 14646bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe FIO_CLIENT_TYPE_GUI = 2, 14746bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe}; 14846bcd498f7b3fb55f7f048bf299f36bd8c8f7db1Jens Axboe 149dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron#endif 150dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 151