add disable_changed_wwids 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 deferred_remove;
66         int delay_watch_checks;
67         int delay_wait_checks;
68         int skip_kpartx;
69         char * bl_product;
70 };
71
72 struct mpentry {
73         char * wwid;
74         char * alias;
75         char * uid_attribute;
76         char * getuid;
77         char * selector;
78         char * features;
79
80         char * prio_name;
81         char * prio_args;
82         unsigned char * reservation_key;
83         int pgpolicy;
84         int pgfailback;
85         int rr_weight;
86         int no_path_retry;
87         int minio;
88         int minio_rq;
89         int flush_on_last_del;
90         int attribute_flags;
91         int user_friendly_names;
92         int deferred_remove;
93         int delay_watch_checks;
94         int delay_wait_checks;
95         int skip_kpartx;
96         uid_t uid;
97         gid_t gid;
98         mode_t mode;
99 };
100
101 struct config {
102         struct rcu_head rcu;
103         int verbosity;
104         int pgpolicy_flag;
105         int pgpolicy;
106         int minio;
107         int minio_rq;
108         int checkint;
109         int max_checkint;
110         int pgfailback;
111         int remove;
112         int rr_weight;
113         int no_path_retry;
114         int user_friendly_names;
115         int bindings_read_only;
116         int max_fds;
117         int force_reload;
118         int queue_without_daemon;
119         int ignore_wwids;
120         int checker_timeout;
121         int flush_on_last_del;
122         int attribute_flags;
123         int fast_io_fail;
124         unsigned int dev_loss;
125         int log_checker_err;
126         int allow_queueing;
127         int find_multipaths;
128         uid_t uid;
129         gid_t gid;
130         mode_t mode;
131         int reassign_maps;
132         int retain_hwhandler;
133         int detect_prio;
134         int force_sync;
135         int deferred_remove;
136         int processed_main_config;
137         int delay_watch_checks;
138         int delay_wait_checks;
139         int uxsock_timeout;
140         int strict_timing;
141         int retrigger_tries;
142         int retrigger_delay;
143         int ignore_new_devs;
144         int delayed_reconfig;
145         int uev_wait_timeout;
146         int skip_kpartx;
147         int disable_changed_wwids;
148         unsigned int version[3];
149
150         char * multipath_dir;
151         char * selector;
152         char * uid_attribute;
153         char * getuid;
154         char * features;
155         char * hwhandler;
156         char * bindings_file;
157         char * wwids_file;
158         char * prio_name;
159         char * prio_args;
160         char * checker_name;
161         char * alias_prefix;
162         char * partition_delim;
163         char * config_dir;
164         unsigned char * reservation_key;
165
166         vector keywords;
167         vector mptable;
168         vector hwtable;
169         struct hwentry *overrides;
170
171         vector blist_devnode;
172         vector blist_wwid;
173         vector blist_device;
174         vector blist_property;
175         vector elist_devnode;
176         vector elist_wwid;
177         vector elist_device;
178         vector elist_property;
179 };
180
181 extern struct udev * udev;
182
183 struct hwentry * find_hwe (vector hwtable, char * vendor, char * product, char *revision);
184 struct mpentry * find_mpe (vector mptable, char * wwid);
185 char * get_mpe_wwid (vector mptable, char * alias);
186
187 struct hwentry * alloc_hwe (void);
188 struct mpentry * alloc_mpe (void);
189
190 void free_hwe (struct hwentry * hwe);
191 void free_hwtable (vector hwtable);
192 void free_mpe (struct mpentry * mpe);
193 void free_mptable (vector mptable);
194
195 int store_hwe (vector hwtable, struct hwentry *);
196
197 struct config *load_config (char * file);
198 struct config * alloc_config (void);
199 void free_config (struct config * conf);
200 extern struct config *get_multipath_config(void);
201 extern void put_multipath_config(struct config *);
202
203 #endif