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