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