1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
#ifndef CLIENT_H
#define CLIENT_H
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "lib/types.h"
#include "stat.h"
struct fio_net_cmd;
enum {
Client_created = 0,
Client_connected = 1,
Client_started = 2,
Client_running = 3,
Client_stopped = 4,
Client_exited = 5,
};
struct client_file {
char *file;
bool remote;
};
struct fio_client {
struct flist_head list;
struct flist_head hash_list;
struct flist_head arg_list;
union {
struct sockaddr_in addr;
struct sockaddr_in6 addr6;
struct sockaddr_un addr_un;
};
char *hostname;
int port;
int fd;
unsigned int refs;
unsigned int last_cmd;
char *name;
struct flist_head *opt_lists;
int state;
bool skip_newline;
bool is_sock;
bool disk_stats_shown;
unsigned int jobs;
unsigned int nr_stat;
int error;
int signal;
int ipv6;
bool sent_job;
bool did_stat;
uint32_t type;
uint32_t thread_number;
uint32_t groupid;
struct flist_head eta_list;
struct client_eta *eta_in_flight;
unsigned int eta_timeouts;
struct flist_head cmd_list;
uint16_t argc;
char **argv;
struct client_ops *ops;
void *client_data;
struct client_file *files;
unsigned int nr_files;
struct buf_output buf;
};
typedef void (client_cmd_op)(struct fio_client *, struct fio_net_cmd *);
typedef void (client_op)(struct fio_client *);
typedef void (client_eta_op)(struct jobs_eta *je);
typedef void (client_timed_out_op)(struct fio_client *);
typedef void (client_jobs_eta_op)(struct fio_client *client, struct jobs_eta *je);
extern struct client_ops fio_client_ops;
struct client_ops {
client_cmd_op *text;
client_cmd_op *disk_util;
client_cmd_op *thread_status;
client_cmd_op *group_stats;
client_jobs_eta_op *jobs_eta;
client_eta_op *eta;
client_cmd_op *probe;
client_cmd_op *quit;
client_cmd_op *add_job;
client_cmd_op *update_job;
client_timed_out_op *timed_out;
client_op *stop;
client_cmd_op *start;
client_cmd_op *job_start;
client_timed_out_op *removed;
unsigned int eta_msec;
int stay_connected;
uint32_t client_type;
};
struct client_eta {
unsigned int pending;
struct jobs_eta eta;
};
extern int fio_handle_client(struct fio_client *);
extern void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je);
enum {
Fio_client_ipv4 = 1,
Fio_client_ipv6,
Fio_client_socket,
};
extern int fio_client_connect(struct fio_client *);
extern int fio_clients_connect(void);
extern int fio_start_client(struct fio_client *);
extern int fio_start_all_clients(void);
extern int fio_clients_send_ini(const char *);
extern int fio_client_send_ini(struct fio_client *, const char *, bool);
extern int fio_handle_clients(struct client_ops *);
extern int fio_client_add(struct client_ops *, const char *, void **);
extern struct fio_client *fio_client_add_explicit(struct client_ops *, const char *, int, int);
extern void fio_client_add_cmd_option(void *, const char *);
extern int fio_client_add_ini_file(void *, const char *, bool);
extern int fio_client_terminate(struct fio_client *);
extern struct fio_client *fio_get_client(struct fio_client *);
extern void fio_put_client(struct fio_client *);
extern int fio_client_update_options(struct fio_client *, struct thread_options *, uint64_t *);
extern int fio_client_wait_for_reply(struct fio_client *, uint64_t);
extern int fio_clients_send_trigger(const char *);
#define FIO_CLIENT_DEF_ETA_MSEC 900
enum {
FIO_CLIENT_TYPE_CLI = 1,
FIO_CLIENT_TYPE_GUI = 2,
};
extern int sum_stat_clients;
extern struct thread_stat client_ts;
extern struct group_run_stats client_gs;
#endif
|