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 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
#ifndef _STRUCTS_H
#define _STRUCTS_H
#define WWID_SIZE 128
#define SERIAL_SIZE 64
#define NODE_NAME_SIZE 19
#define PATH_STR_SIZE 16
#define PARAMS_SIZE 1024
#define FILE_NAME_SIZE 256
#define CALLOUT_MAX_SIZE 128
#define BLK_DEV_SIZE 33
#define SCSI_VENDOR_SIZE 9
#define SCSI_PRODUCT_SIZE 17
#define SCSI_REV_SIZE 5
#define NO_PATH_RETRY_UNDEF 0
#define NO_PATH_RETRY_FAIL -1
#define NO_PATH_RETRY_QUEUE -2
enum free_path_switch {
KEEP_PATHS,
FREE_PATHS
};
enum rr_weight_mode {
RR_WEIGHT_UNDEF,
RR_WEIGHT_NONE,
RR_WEIGHT_PRIO
};
enum failback_mode {
FAILBACK_UNDEF,
FAILBACK_MANUAL,
FAILBACK_IMMEDIATE
};
enum sysfs_buses {
SYSFS_BUS_UNDEF,
SYSFS_BUS_SCSI,
SYSFS_BUS_IDE,
SYSFS_BUS_CCW,
};
enum pathstates {
PSTATE_UNDEF,
PSTATE_FAILED,
PSTATE_ACTIVE
};
enum pgstates {
PGSTATE_UNDEF,
PGSTATE_ENABLED,
PGSTATE_DISABLED,
PGSTATE_ACTIVE
};
struct scsi_idlun {
int dev_id;
int host_unique_id;
int host_no;
};
struct sg_id {
int host_no;
int channel;
int scsi_id;
int lun;
short h_cmd_per_lun;
short d_queue_depth;
int unused1;
int unused2;
};
struct scsi_dev {
char dev[FILE_NAME_SIZE];
struct scsi_idlun scsi_id;
int host_no;
};
struct path {
char dev[FILE_NAME_SIZE];
char dev_t[BLK_DEV_SIZE];
struct scsi_idlun scsi_id;
struct sg_id sg_id;
char wwid[WWID_SIZE];
char vendor_id[SCSI_VENDOR_SIZE];
char product_id[SCSI_PRODUCT_SIZE];
char rev[SCSI_REV_SIZE];
char serial[SERIAL_SIZE];
char tgt_node_name[NODE_NAME_SIZE];
unsigned long long size;
unsigned int checkint;
unsigned int tick;
int bus;
int state;
int dmstate;
int failcount;
int priority;
int pgindex;
char * getuid;
char * getprio;
int getprio_selected;
struct checker checker;
struct multipath * mpp;
int fd;
/* configlet pointers */
struct hwentry * hwe;
};
typedef int (pgpolicyfn) (struct multipath *);
struct multipath {
char wwid[WWID_SIZE];
char alias_old[WWID_SIZE];
int pgpolicy;
pgpolicyfn *pgpolicyfn;
int nextpg;
int bestpg;
int queuedio;
int action;
int pgfailback;
int failback_tick;
int rr_weight;
int nr_active; /* current available(= not known as failed) paths */
int no_path_retry; /* number of retries after all paths are down */
int retry_tick; /* remaining times for retries */
int minio;
unsigned long long size;
vector paths;
vector pg;
char params[PARAMS_SIZE];
char status[PARAMS_SIZE];
struct dm_info * dmi;
/* configlet pointers */
char * alias;
char * selector;
char * features;
char * hwhandler;
struct mpentry * mpe;
struct hwentry * hwe;
/* threads */
void * waiter;
/* stats */
unsigned int stat_switchgroup;
unsigned int stat_path_failures;
unsigned int stat_map_loads;
unsigned int stat_total_queueing_time;
unsigned int stat_queueing_timeouts;
};
struct pathgroup {
long id;
int status;
int priority;
vector paths;
char * selector;
};
struct path * alloc_path (void);
struct pathgroup * alloc_pathgroup (void);
struct multipath * alloc_multipath (void);
void free_path (struct path *);
void free_pathvec (vector vec, int free_paths);
void free_pathgroup (struct pathgroup * pgp, int free_paths);
void free_pgvec (vector pgvec, int free_paths);
void free_multipath (struct multipath *, int free_paths);
void free_multipath_attributes (struct multipath *);
void drop_multipath (vector mpvec, char * wwid, int free_paths);
void free_multipathvec (vector mpvec, int free_paths);
int store_path (vector pathvec, struct path * pp);
int store_pathgroup (vector pgvec, struct pathgroup * pgp);
struct multipath * find_mp_by_alias (vector mp, char * alias);
struct multipath * find_mp_by_wwid (vector mp, char * wwid);
struct multipath * find_mp_by_str (vector mp, char * wwid);
struct multipath * find_mp_by_minor (vector mp, int minor);
struct path * find_path_by_devt (vector pathvec, char * devt);
struct path * find_path_by_dev (vector pathvec, char * dev);
struct path * first_path (struct multipath * mpp);
int pathcountgr (struct pathgroup *, int);
int pathcount (struct multipath *, int);
char sysfs_path[FILE_NAME_SIZE];
#endif /* _STRUCTS_H */
|