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