client.h revision b9d2f30a214ebd274340f888739be250838d63c2
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 230f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboestruct fio_client { 240f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head list; 250f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head hash_list; 260f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head arg_list; 270f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe union { 280f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_in addr; 290f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_in6 addr6; 300f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct sockaddr_un addr_un; 310f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe }; 320f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char *hostname; 330f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int port; 340f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int fd; 355121a9aa0299a2c23b3c50bf110ab4a05677c740Jens Axboe unsigned int refs; 360f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 370f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char *name; 380f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 390f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int state; 400f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 410f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int skip_newline; 420f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int is_sock; 430f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int disk_stats_shown; 440f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe unsigned int jobs; 450f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int error; 460f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int ipv6; 470f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe int sent_job; 480f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 490f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head eta_list; 500f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct client_eta *eta_in_flight; 510f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 520f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe struct flist_head cmd_list; 530f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 540f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe uint16_t argc; 550f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe char **argv; 563ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 57a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboe struct client_ops *ops; 583ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe void *client_data; 590f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe}; 600f92bd205af256af6d4a12cc8883f68b4d23ca85Jens Axboe 61084d1c6f817eacaaefa1de4f0637ef6c1405d74bJens Axboetypedef void (*client_text_op_func)(struct fio_client *client, struct fio_net_cmd *cmd); 62dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Camerontypedef void (*client_disk_util_op_func)(struct fio_client *client, struct fio_net_cmd *cmd); 6389e5fad91bc33f1687cca6b1bf5aa3084c424650Jens Axboetypedef void (*client_thread_status_op)(struct fio_client *client, struct fio_net_cmd *cmd); 6489e5fad91bc33f1687cca6b1bf5aa3084c424650Jens Axboetypedef void (*client_group_stats_op)(struct fio_client *client, struct fio_net_cmd *cmd); 65a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboetypedef void (*client_eta_op)(struct jobs_eta *je); 66dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Camerontypedef void (*client_probe_op)(struct fio_client *client, struct fio_net_cmd *cmd); 6704cc6b77973636a914de3dff8ca6ae0857cf453bStephen M. Camerontypedef void (*client_thread_status_display_op)(char *status_message, double perc); 683ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboetypedef void (*client_quit_op)(struct fio_client *); 69807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboetypedef void (*client_add_job_op)(struct fio_client *, struct fio_net_cmd *); 70ed727a4632fa3195f31758c79e209ca8d524bbc4Jens Axboetypedef void (*client_timed_out)(struct fio_client *); 716b79c80c14766df7b0507c4ec679507a315ad61aJens Axboetypedef void (*client_stop_op)(struct fio_client *, struct fio_net_cmd *); 723ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 73dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronstruct client_ops { 74dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_text_op_func text_op; 75dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_disk_util_op_func disk_util; 76dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_thread_status_op thread_status; 77dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_group_stats_op group_stats; 780420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe client_eta_op eta; 79dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_probe_op probe; 803ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe client_quit_op quit; 81807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe client_add_job_op add_job; 82ed727a4632fa3195f31758c79e209ca8d524bbc4Jens Axboe client_timed_out timed_out; 836b79c80c14766df7b0507c4ec679507a315ad61aJens Axboe client_stop_op stop; 843ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe int stay_connected; 85dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron}; 86dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 87dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronextern struct client_ops fio_client_ops; 88dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 893e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboestruct client_eta { 903e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe struct jobs_eta eta; 913e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe unsigned int pending; 923e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe}; 933e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 94a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_client(struct fio_client *); 95a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern void fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op fn); 963e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboeextern void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je); 973e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 983ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeenum { 993ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv4 = 1, 1003ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv6, 1013ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_socket, 1023ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe}; 1033ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 1043ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_connect(void); 105b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_client(struct fio_client *); 106b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_all_clients(void); 1073ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_send_ini(const char *); 108a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_clients(struct client_ops *); 109a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_client_add(struct client_ops *, const char *, void **); 110a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern struct fio_client *fio_client_add_explicit(struct client_ops *, const char *, int, int); 1113ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern void fio_client_add_cmd_option(void *, const char *); 112df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboeextern void fio_clients_terminate(void); 113df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboe 114dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron#endif 115dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 116