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