Remove unused structures
[multipath-tools/.git] / libmultipath / structs.h
1 #ifndef _STRUCTS_H
2 #define _STRUCTS_H
3
4 #include <sys/types.h>
5
6 #include "prio.h"
7
8 #define WWID_SIZE               128
9 #define SERIAL_SIZE             65
10 #define NODE_NAME_SIZE          224
11 #define PATH_STR_SIZE           16
12 #define PARAMS_SIZE             4096
13 #define FILE_NAME_SIZE          256
14 #define CALLOUT_MAX_SIZE        256
15 #define BLK_DEV_SIZE            33
16 #define PATH_SIZE               512
17 #define NAME_SIZE               512
18
19
20 #define SCSI_VENDOR_SIZE        9
21 #define SCSI_PRODUCT_SIZE       17
22 #define SCSI_REV_SIZE           5
23 #define SCSI_STATE_SIZE         9
24
25 #define NO_PATH_RETRY_UNDEF     0
26 #define NO_PATH_RETRY_FAIL      -1
27 #define NO_PATH_RETRY_QUEUE     -2
28
29
30 enum free_path_mode {
31         KEEP_PATHS,
32         FREE_PATHS
33 };
34
35 enum rr_weight_mode {
36         RR_WEIGHT_UNDEF,
37         RR_WEIGHT_NONE,
38         RR_WEIGHT_PRIO
39 };
40
41 enum failback_mode {
42         FAILBACK_UNDEF,
43         FAILBACK_MANUAL,
44         FAILBACK_IMMEDIATE,
45         FAILBACK_FOLLOWOVER
46 };
47
48 enum sysfs_buses {
49         SYSFS_BUS_UNDEF,
50         SYSFS_BUS_SCSI,
51         SYSFS_BUS_IDE,
52         SYSFS_BUS_CCW,
53         SYSFS_BUS_CCISS,
54 };
55
56 enum pathstates {
57         PSTATE_UNDEF,
58         PSTATE_FAILED,
59         PSTATE_ACTIVE
60 };
61
62 enum pgstates {
63         PGSTATE_UNDEF,
64         PGSTATE_ENABLED,
65         PGSTATE_DISABLED,
66         PGSTATE_ACTIVE
67 };
68
69 enum queue_without_daemon_states {
70         QUE_NO_DAEMON_UNDEF,
71         QUE_NO_DAEMON_OFF,
72         QUE_NO_DAEMON_ON,
73 };
74
75 enum pgtimeouts {
76         PGTIMEOUT_UNDEF,
77         PGTIMEOUT_NONE
78 };
79
80 enum attribute_bits {
81         ATTR_UID,
82         ATTR_GID,
83         ATTR_MODE,
84 };
85
86 enum flush_states {
87         FLUSH_UNDEF,
88         FLUSH_DISABLED,
89         FLUSH_ENABLED,
90         FLUSH_IN_PROGRESS,
91 };
92
93 enum log_checker_err_states {
94         LOG_CHKR_ERR_ALWAYS,
95         LOG_CHKR_ERR_ONCE,
96 };
97
98 enum user_friendly_names_states {
99         USER_FRIENDLY_NAMES_UNDEF,
100         USER_FRIENDLY_NAMES_OFF,
101         USER_FRIENDLY_NAMES_ON,
102 };
103
104 enum retain_hwhandler_states {
105         RETAIN_HWHANDLER_UNDEF,
106         RETAIN_HWHANDLER_OFF,
107         RETAIN_HWHANDLER_ON,
108 };
109
110 enum detect_prio_states {
111         DETECT_PRIO_UNDEF,
112         DETECT_PRIO_OFF,
113         DETECT_PRIO_ON,
114 };
115
116 struct sg_id {
117         int host_no;
118         int channel;
119         int scsi_id;
120         int lun;
121         short h_cmd_per_lun;
122         short d_queue_depth;
123         int unused1;
124         int unused2;
125 };
126
127 # ifndef HDIO_GETGEO
128 #  define HDIO_GETGEO   0x0301  /* get device geometry */
129
130 struct hd_geometry {
131       unsigned char heads;
132       unsigned char sectors;
133       unsigned short cylinders;
134       unsigned long start;
135 };
136 #endif
137
138 struct path {
139         char dev[FILE_NAME_SIZE];
140         char dev_t[BLK_DEV_SIZE];
141         struct udev_device *udev;
142         struct sg_id sg_id;
143         struct hd_geometry geom;
144         char wwid[WWID_SIZE];
145         char vendor_id[SCSI_VENDOR_SIZE];
146         char product_id[SCSI_PRODUCT_SIZE];
147         char rev[SCSI_REV_SIZE];
148         char serial[SERIAL_SIZE];
149         char tgt_node_name[NODE_NAME_SIZE];
150         unsigned long long size;
151         unsigned int checkint;
152         unsigned int tick;
153         int bus;
154         int offline;
155         int state;
156         int dmstate;
157         int chkrstate;
158         int failcount;
159         int priority;
160         int pgindex;
161         int detect_prio;
162         char * uid_attribute;
163         struct prio prio;
164         char * prio_args;
165         struct checker checker;
166         struct multipath * mpp;
167         int fd;
168
169         /* configlet pointers */
170         struct hwentry * hwe;
171 };
172
173 typedef int (pgpolicyfn) (struct multipath *);
174
175 struct multipath {
176         char wwid[WWID_SIZE];
177         char alias_old[WWID_SIZE];
178         int pgpolicy;
179         pgpolicyfn *pgpolicyfn;
180         int nextpg;
181         int bestpg;
182         int queuedio;
183         int action;
184         int pgfailback;
185         int failback_tick;
186         int rr_weight;
187         int nr_active;     /* current available(= not known as failed) paths */
188         int no_path_retry; /* number of retries after all paths are down */
189         int retry_tick;    /* remaining times for retries */
190         int minio;
191         int pg_timeout;
192         int flush_on_last_del;
193         int attribute_flags;
194         int fast_io_fail;
195         int retain_hwhandler;
196         unsigned int dev_loss;
197         uid_t uid;
198         gid_t gid;
199         mode_t mode;
200         unsigned long long size;
201         vector paths;
202         vector pg;
203         struct dm_info * dmi;
204
205         /* configlet pointers */
206         char * alias;
207         char * alias_prefix;
208         char * selector;
209         char * features;
210         char * hwhandler;
211         struct mpentry * mpe;
212         struct hwentry * hwe;
213
214         /* threads */
215         pthread_t waiter;
216
217         /* stats */
218         unsigned int stat_switchgroup;
219         unsigned int stat_path_failures;
220         unsigned int stat_map_loads;
221         unsigned int stat_total_queueing_time;
222         unsigned int stat_queueing_timeouts;
223
224         /* checkers shared data */
225         void * mpcontext;
226         
227         /* persistent management data*/
228         unsigned char * reservation_key;
229         unsigned char prflag;
230 };
231
232 struct pathgroup {
233         long id;
234         int status;
235         int priority;
236         int enabled_paths;
237         vector paths;
238         char * selector;
239 };
240
241 struct path * alloc_path (void);
242 struct pathgroup * alloc_pathgroup (void);
243 struct multipath * alloc_multipath (void);
244 void free_path (struct path *);
245 void free_pathvec (vector vec, enum free_path_mode free_paths);
246 void free_pathgroup (struct pathgroup * pgp, enum free_path_mode free_paths);
247 void free_pgvec (vector pgvec, enum free_path_mode free_paths);
248 void free_multipath (struct multipath *, enum free_path_mode free_paths);
249 void free_multipath_attributes (struct multipath *);
250 void drop_multipath (vector mpvec, char * wwid, enum free_path_mode free_paths);
251 void free_multipathvec (vector mpvec, enum free_path_mode free_paths);
252
253 int store_path (vector pathvec, struct path * pp);
254 int store_pathgroup (vector pgvec, struct pathgroup * pgp);
255
256 struct multipath * find_mp_by_alias (vector mp, char * alias);
257 struct multipath * find_mp_by_wwid (vector mp, char * wwid);
258 struct multipath * find_mp_by_str (vector mp, char * wwid);
259 struct multipath * find_mp_by_minor (vector mp, int minor);
260         
261 struct path * find_path_by_devt (vector pathvec, char * devt);
262 struct path * find_path_by_dev (vector pathvec, char * dev);
263 struct path * first_path (struct multipath * mpp);
264
265 int pathcountgr (struct pathgroup *, int);
266 int pathcount (struct multipath *, int);
267 int pathcmp (struct pathgroup *, struct pathgroup *);
268 void setup_feature(struct multipath *, char *);
269 int add_feature (char **, char *);
270 int remove_feature (char **, char *);
271
272 extern char sysfs_path[PATH_SIZE];
273
274 #endif /* _STRUCTS_H */