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