libmultipath: add detect_checker option
[multipath-tools/.git] / libmultipath / config.h
1 #ifndef _CONFIG_H
2 #define _CONFIG_H
3
4 #include <sys/types.h>
5 #include <stdint.h>
6 #include <urcu.h>
7
8 #define ORIGIN_DEFAULT 0
9 #define ORIGIN_CONFIG  1
10
11 /*
12  * In kernel, fast_io_fail == 0 means immediate failure on rport delete.
13  * OTOH '0' means not-configured in various places in multipath-tools.
14  */
15 #define MP_FAST_IO_FAIL_UNSET (0)
16 #define MP_FAST_IO_FAIL_OFF (-1)
17 #define MP_FAST_IO_FAIL_ZERO (-2)
18
19 enum devtypes {
20         DEV_NONE,
21         DEV_DEVT,
22         DEV_DEVNODE,
23         DEV_DEVMAP,
24         DEV_UEVENT
25 };
26
27 enum mpath_cmds {
28         CMD_NONE,
29         CMD_CREATE,
30         CMD_DRY_RUN,
31         CMD_LIST_SHORT,
32         CMD_LIST_LONG,
33         CMD_VALID_PATH,
34         CMD_REMOVE_WWID,
35         CMD_RESET_WWIDS,
36         CMD_ADD_WWID,
37 };
38
39 struct hwentry {
40         char * vendor;
41         char * product;
42         char * revision;
43         char * uid_attribute;
44         char * getuid;
45         char * features;
46         char * hwhandler;
47         char * selector;
48         char * checker_name;
49         char * prio_name;
50         char * prio_args;
51         char * alias_prefix;
52
53         int pgpolicy;
54         int pgfailback;
55         int rr_weight;
56         int no_path_retry;
57         int minio;
58         int minio_rq;
59         int flush_on_last_del;
60         int fast_io_fail;
61         unsigned int dev_loss;
62         int user_friendly_names;
63         int retain_hwhandler;
64         int detect_prio;
65         int detect_checker;
66         int deferred_remove;
67         int delay_watch_checks;
68         int delay_wait_checks;
69         int san_path_err_threshold;
70         int san_path_err_forget_rate;
71         int san_path_err_recovery_time;
72         int skip_kpartx;
73         int max_sectors_kb;
74         char * bl_product;
75 };
76
77 struct mpentry {
78         char * wwid;
79         char * alias;
80         char * uid_attribute;
81         char * getuid;
82         char * selector;
83         char * features;
84
85         char * prio_name;
86         char * prio_args;
87         unsigned char * reservation_key;
88         int pgpolicy;
89         int pgfailback;
90         int rr_weight;
91         int no_path_retry;
92         int minio;
93         int minio_rq;
94         int flush_on_last_del;
95         int attribute_flags;
96         int user_friendly_names;
97         int deferred_remove;
98         int delay_watch_checks;
99         int delay_wait_checks;
100         int san_path_err_threshold;
101         int san_path_err_forget_rate;
102         int san_path_err_recovery_time;
103         int skip_kpartx;
104         int max_sectors_kb;
105         uid_t uid;
106         gid_t gid;
107         mode_t mode;
108 };
109
110 struct config {
111         struct rcu_head rcu;
112         int verbosity;
113         int pgpolicy_flag;
114         int pgpolicy;
115         int minio;
116         int minio_rq;
117         int checkint;
118         int max_checkint;
119         int pgfailback;
120         int remove;
121         int rr_weight;
122         int no_path_retry;
123         int user_friendly_names;
124         int bindings_read_only;
125         int max_fds;
126         int force_reload;
127         int queue_without_daemon;
128         int ignore_wwids;
129         int checker_timeout;
130         int flush_on_last_del;
131         int attribute_flags;
132         int fast_io_fail;
133         unsigned int dev_loss;
134         int log_checker_err;
135         int allow_queueing;
136         int find_multipaths;
137         uid_t uid;
138         gid_t gid;
139         mode_t mode;
140         int reassign_maps;
141         int retain_hwhandler;
142         int detect_prio;
143         int detect_checker;
144         int force_sync;
145         int deferred_remove;
146         int processed_main_config;
147         int delay_watch_checks;
148         int delay_wait_checks;
149         int san_path_err_threshold;
150         int san_path_err_forget_rate;
151         int san_path_err_recovery_time;
152         int uxsock_timeout;
153         int strict_timing;
154         int retrigger_tries;
155         int retrigger_delay;
156         int ignore_new_devs;
157         int delayed_reconfig;
158         int uev_wait_timeout;
159         int skip_kpartx;
160         int disable_changed_wwids;
161         int remove_retries;
162         int max_sectors_kb;
163         unsigned int version[3];
164
165         char * multipath_dir;
166         char * selector;
167         char * uid_attribute;
168         char * getuid;
169         char * features;
170         char * hwhandler;
171         char * bindings_file;
172         char * wwids_file;
173         char * prio_name;
174         char * prio_args;
175         char * checker_name;
176         char * alias_prefix;
177         char * partition_delim;
178         char * config_dir;
179         unsigned char * reservation_key;
180
181         vector keywords;
182         vector mptable;
183         vector hwtable;
184         struct hwentry *overrides;
185
186         vector blist_devnode;
187         vector blist_wwid;
188         vector blist_device;
189         vector blist_property;
190         vector elist_devnode;
191         vector elist_wwid;
192         vector elist_device;
193         vector elist_property;
194 };
195
196 extern struct udev * udev;
197
198 struct hwentry * find_hwe (vector hwtable, char * vendor, char * product, char *revision);
199 struct mpentry * find_mpe (vector mptable, char * wwid);
200 char * get_mpe_wwid (vector mptable, char * alias);
201
202 struct hwentry * alloc_hwe (void);
203 struct mpentry * alloc_mpe (void);
204
205 void free_hwe (struct hwentry * hwe);
206 void free_hwtable (vector hwtable);
207 void free_mpe (struct mpentry * mpe);
208 void free_mptable (vector mptable);
209
210 int store_hwe (vector hwtable, struct hwentry *);
211
212 struct config *load_config (char * file);
213 struct config * alloc_config (void);
214 void free_config (struct config * conf);
215 extern struct config *get_multipath_config(void);
216 extern void put_multipath_config(struct config *);
217
218 #endif