client.h revision 2f99deb0895b2d0b618e6e72c74add7192b4d73f
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); 662f99deb0895b2d0b618e6e72c74add7192b4d73fJens Axboetypedef void (*client_jobs_eta_op)(struct fio_client *client, struct jobs_eta *je); 67dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Camerontypedef void (*client_probe_op)(struct fio_client *client, struct fio_net_cmd *cmd); 6804cc6b77973636a914de3dff8ca6ae0857cf453bStephen M. Camerontypedef void (*client_thread_status_display_op)(char *status_message, double perc); 693ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboetypedef void (*client_quit_op)(struct fio_client *); 70807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboetypedef void (*client_add_job_op)(struct fio_client *, struct fio_net_cmd *); 71ed727a4632fa3195f31758c79e209ca8d524bbc4Jens Axboetypedef void (*client_timed_out)(struct fio_client *); 726b79c80c14766df7b0507c4ec679507a315ad61aJens Axboetypedef void (*client_stop_op)(struct fio_client *, struct fio_net_cmd *); 733ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 74dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronstruct client_ops { 75dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_text_op_func text_op; 76dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_disk_util_op_func disk_util; 77dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_thread_status_op thread_status; 78dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_group_stats_op group_stats; 792f99deb0895b2d0b618e6e72c74add7192b4d73fJens Axboe client_jobs_eta_op jobs_eta; 800420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe client_eta_op eta; 81dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron client_probe_op probe; 823ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe client_quit_op quit; 83807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe client_add_job_op add_job; 84ed727a4632fa3195f31758c79e209ca8d524bbc4Jens Axboe client_timed_out timed_out; 856b79c80c14766df7b0507c4ec679507a315ad61aJens Axboe client_stop_op stop; 863ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe int stay_connected; 87dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron}; 88dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 89dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameronextern struct client_ops fio_client_ops; 90dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 913e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboestruct client_eta { 923e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe struct jobs_eta eta; 933e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe unsigned int pending; 943e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe}; 953e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 96a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_client(struct fio_client *); 97a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern void fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op fn); 983e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboeextern void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je); 993e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 1003ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeenum { 1013ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv4 = 1, 1023ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_ipv6, 1033ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe Fio_client_socket, 1043ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe}; 1053ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe 1062f99deb0895b2d0b618e6e72c74add7192b4d73fJens Axboeextern int fio_client_connect(struct fio_client *); 1073ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_connect(void); 108b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_client(struct fio_client *); 109b9d2f30a214ebd274340f888739be250838d63c2Jens Axboeextern int fio_start_all_clients(void); 1103ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern int fio_clients_send_ini(const char *); 111a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_handle_clients(struct client_ops *); 112a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern int fio_client_add(struct client_ops *, const char *, void **); 113a52766160d7f2a937c74d4adee1819ef00467d4bJens Axboeextern struct fio_client *fio_client_add_explicit(struct client_ops *, const char *, int, int); 1143ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboeextern void fio_client_add_cmd_option(void *, const char *); 1152f99deb0895b2d0b618e6e72c74add7192b4d73fJens Axboeextern void fio_client_terminate(struct fio_client *); 116df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboeextern void fio_clients_terminate(void); 117df06f220c56a2f833a17883dae5e01ba8d99eb80Jens Axboe 118dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron#endif 119dd366728eb503e6344215ae6ec153c7ab6eafd9bStephen M. Cameron 120