[libmultipath] rename find_mp() to find_mp_by_alias()
[platform/upstream/multipath-tools.git] / libmultipath / structs.h
1 #ifndef _STRUCTS_H
2 #define _STRUCTS_H
3
4 #define WWID_SIZE               64
5 #define SERIAL_SIZE             17
6 #define NODE_NAME_SIZE          19
7 #define PATH_STR_SIZE           16
8 #define PARAMS_SIZE             1024
9 #define FILE_NAME_SIZE          256
10 #define CALLOUT_MAX_SIZE        128
11 #define BLK_DEV_SIZE            33
12
13 #define SCSI_VENDOR_SIZE        9
14 #define SCSI_PRODUCT_SIZE       17
15 #define SCSI_REV_SIZE           5
16
17 #define NO_PATH_RETRY_UNDEF     0
18 #define NO_PATH_RETRY_FAIL      -1
19 #define NO_PATH_RETRY_QUEUE     -2
20
21 enum free_path_switch {
22         KEEP_PATHS,
23         FREE_PATHS
24 };
25
26 enum rr_weight_mode {
27         RR_WEIGHT_UNDEF,
28         RR_WEIGHT_NONE,
29         RR_WEIGHT_PRIO
30 };
31
32 enum failback_mode {
33         FAILBACK_UNDEF,
34         FAILBACK_MANUAL,
35         FAILBACK_IMMEDIATE
36 };
37
38 enum sysfs_buses {
39         SYSFS_BUS_UNDEF,
40         SYSFS_BUS_SCSI,
41         SYSFS_BUS_IDE
42 };
43
44 enum pathstates {
45         PSTATE_UNDEF,
46         PSTATE_FAILED,
47         PSTATE_ACTIVE
48 };
49
50 enum pgstates {
51         PGSTATE_UNDEF,
52         PGSTATE_ENABLED,
53         PGSTATE_DISABLED,
54         PGSTATE_ACTIVE
55 };
56
57 enum mapstates {
58         MAPSTATE_UNDEF,
59         MAPSTATE_ACTIVE,
60         MAPSTATE_SUSPENDED
61 };
62
63 struct scsi_idlun {
64         int dev_id;
65         int host_unique_id;
66         int host_no;
67 };
68
69 struct sg_id {
70         int host_no;
71         int channel;
72         int scsi_id;
73         int lun;
74         short h_cmd_per_lun;
75         short d_queue_depth;
76         int unused1;
77         int unused2;
78 };
79
80 struct scsi_dev {
81         char dev[FILE_NAME_SIZE];
82         struct scsi_idlun scsi_id;
83         int host_no;
84 };
85
86 struct path {
87         char dev[FILE_NAME_SIZE];
88         char dev_t[BLK_DEV_SIZE];
89         struct scsi_idlun scsi_id;
90         struct sg_id sg_id;
91         char wwid[WWID_SIZE];
92         char vendor_id[SCSI_VENDOR_SIZE];
93         char product_id[SCSI_PRODUCT_SIZE];
94         char rev[SCSI_REV_SIZE];
95         char serial[SERIAL_SIZE];
96         char tgt_node_name[NODE_NAME_SIZE];
97         unsigned long long size;
98         unsigned int checkint;
99         unsigned int tick;
100         int bus;
101         int state;
102         int dmstate;
103         int failcount;
104         int priority;
105         int pgindex;
106         char * getuid;
107         char * getprio;
108         int (*checkfn) (int, char *, void **);
109         void * checker_context;
110         struct multipath * mpp;
111         int fd;
112         
113         /* configlet pointers */
114         struct hwentry * hwe;
115 };
116
117 struct multipath {
118         char wwid[WWID_SIZE];
119         int minor;
120         int pgpolicy;
121         int nextpg;
122         int queuedio;
123         int action;
124         int pgfailback;
125         int failback_tick;
126         int rr_weight;
127         int nr_active;     /* current available(= not known as failed) paths */
128         int no_path_retry; /* number of retries after all paths are down */
129         int retry_tick;    /* remaining times for retries */
130         int dmstate;
131         unsigned long long size;
132         vector paths;
133         vector pg;
134         char params[PARAMS_SIZE];
135         char status[PARAMS_SIZE];
136
137         /* configlet pointers */
138         char * alias;
139         char * selector;
140         char * features;
141         char * hwhandler;
142         struct mpentry * mpe;
143         struct hwentry * hwe;
144
145         /* daemon store a data blob for DM event waiter threads */
146         void * waiter;
147 };
148
149 struct pathgroup {
150         long id;
151         int status;
152         int priority;
153         vector paths;
154 };
155
156 struct path * alloc_path (void);
157 struct pathgroup * alloc_pathgroup (void);
158 struct multipath * alloc_multipath (void);
159 void free_path (struct path *);
160 void free_pathvec (vector vec, int free_paths);
161 void free_pathgroup (struct pathgroup * pgp, int free_paths);
162 void free_pgvec (vector pgvec, int free_paths);
163 void free_multipath (struct multipath *, int free_paths);
164 void drop_multipath (vector mpvec, char * wwid, int free_paths);
165 void free_multipathvec (vector mpvec, int free_paths);
166
167 int store_path (vector pathvec, struct path * pp);
168 int store_pathgroup (vector pgvec, struct pathgroup * pgp);
169
170 struct multipath * find_mp_by_alias (vector mp, char * alias);
171 struct multipath * find_mp_by_wwid (vector mp, char * wwid);
172 struct multipath * find_mp_by_minor (vector mp, int minor);
173         
174 struct path * find_path_by_devt (vector pathvec, char * devt);
175 struct path * find_path_by_dev (vector pathvec, char * dev);
176
177 char sysfs_path[FILE_NAME_SIZE];
178
179 #endif