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