0149ad37ea4b10c60b8042e64c7e1e06ce611582
[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_CREATE,
28         CMD_DRY_RUN,
29         CMD_LIST_SHORT,
30         CMD_LIST_LONG,
31         CMD_VALID_PATH,
32         CMD_REMOVE_WWID,
33         CMD_RESET_WWIDS,
34         CMD_ADD_WWID,
35 };
36
37 struct hwentry {
38         char * vendor;
39         char * product;
40         char * revision;
41         char * uid_attribute;
42         char * getuid;
43         char * features;
44         char * hwhandler;
45         char * selector;
46         char * checker_name;
47         char * prio_name;
48         char * prio_args;
49         char * alias_prefix;
50
51         int pgpolicy;
52         int pgfailback;
53         int rr_weight;
54         int no_path_retry;
55         int minio;
56         int minio_rq;
57         int flush_on_last_del;
58         int fast_io_fail;
59         unsigned int dev_loss;
60         int user_friendly_names;
61         int retain_hwhandler;
62         int detect_prio;
63         int deferred_remove;
64         int delay_watch_checks;
65         int delay_wait_checks;
66         char * bl_product;
67 };
68
69 struct mpentry {
70         char * wwid;
71         char * alias;
72         char * uid_attribute;
73         char * getuid;
74         char * selector;
75         char * features;
76
77         char * prio_name;
78         char * prio_args;
79         unsigned char * reservation_key;
80         int pgpolicy;
81         int pgfailback;
82         int rr_weight;
83         int no_path_retry;
84         int minio;
85         int minio_rq;
86         int flush_on_last_del;
87         int attribute_flags;
88         int user_friendly_names;
89         int deferred_remove;
90         int delay_watch_checks;
91         int delay_wait_checks;
92         uid_t uid;
93         gid_t gid;
94         mode_t mode;
95 };
96
97 struct config {
98         int verbosity;
99         enum mpath_cmds cmd;
100         int pgpolicy_flag;
101         int pgpolicy;
102         enum devtypes dev_type;
103         int minio;
104         int minio_rq;
105         int checkint;
106         int max_checkint;
107         int pgfailback;
108         int remove;
109         int rr_weight;
110         int no_path_retry;
111         int user_friendly_names;
112         int bindings_read_only;
113         int max_fds;
114         int force_reload;
115         int queue_without_daemon;
116         int ignore_wwids;
117         int checker_timeout;
118         int daemon;
119         int watchdog;
120         int flush_on_last_del;
121         int attribute_flags;
122         int fast_io_fail;
123         unsigned int dev_loss;
124         int log_checker_err;
125         int allow_queueing;
126         int find_multipaths;
127         uid_t uid;
128         gid_t gid;
129         mode_t mode;
130         int reassign_maps;
131         int retain_hwhandler;
132         int detect_prio;
133         int force_sync;
134         int deferred_remove;
135         int processed_main_config;
136         int delay_watch_checks;
137         int delay_wait_checks;
138         int uxsock_timeout;
139         unsigned int version[3];
140
141         char * dev;
142         struct udev * udev;
143         char * multipath_dir;
144         char * selector;
145         char * uid_attribute;
146         char * getuid;
147         char * features;
148         char * hwhandler;
149         char * bindings_file;
150         char * wwids_file;
151         char * prio_name;
152         char * prio_args;
153         char * checker_name;
154         char * alias_prefix;
155         char * partition_delim;
156         char * config_dir;
157         unsigned char * reservation_key;
158
159         vector keywords;
160         vector mptable;
161         vector hwtable;
162         struct hwentry *overrides;
163
164         vector blist_devnode;
165         vector blist_wwid;
166         vector blist_device;
167         vector blist_property;
168         vector elist_devnode;
169         vector elist_wwid;
170         vector elist_device;
171         vector elist_property;
172 };
173
174 struct config * conf;
175
176 struct hwentry * find_hwe (vector hwtable, char * vendor, char * product, char *revision);
177 struct mpentry * find_mpe (char * wwid);
178 char * get_mpe_wwid (char * alias);
179
180 struct hwentry * alloc_hwe (void);
181 struct mpentry * alloc_mpe (void);
182
183 void free_hwe (struct hwentry * hwe);
184 void free_hwtable (vector hwtable);
185 void free_mpe (struct mpentry * mpe);
186 void free_mptable (vector mptable);
187
188 int store_hwe (vector hwtable, struct hwentry *);
189
190 int load_config (char * file, struct udev * udev);
191 struct config * alloc_config (void);
192 void free_config (struct config * conf);
193
194 #endif