[multipath] remove dead maps
[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 enum free_path_switch {
18         KEEP_PATHS,
19         FREE_PATHS
20 };
21
22 enum rr_weight_mode {
23         RR_WEIGHT_UNDEF,
24         RR_WEIGHT_NONE,
25         RR_WEIGHT_PRIO
26 };
27
28 enum failback_mode {
29         FAILBACK_UNDEF,
30         FAILBACK_MANUAL,
31         FAILBACK_IMMEDIATE
32 };
33
34 enum sysfs_buses {
35         SYSFS_BUS_UNDEF,
36         SYSFS_BUS_SCSI,
37         SYSFS_BUS_IDE
38 };
39
40 enum pathstates {
41         PSTATE_UNDEF,
42         PSTATE_FAILED,
43         PSTATE_ACTIVE
44 };
45
46 enum pgstates {
47         PGSTATE_UNDEF,
48         PGSTATE_ENABLED,
49         PGSTATE_DISABLED,
50         PGSTATE_ACTIVE
51 };
52
53 struct scsi_idlun {
54         int dev_id;
55         int host_unique_id;
56         int host_no;
57 };
58
59 struct sg_id {
60         int host_no;
61         int channel;
62         int scsi_id;
63         int lun;
64         short h_cmd_per_lun;
65         short d_queue_depth;
66         int unused1;
67         int unused2;
68 };
69
70 struct scsi_dev {
71         char dev[FILE_NAME_SIZE];
72         struct scsi_idlun scsi_id;
73         int host_no;
74 };
75
76 struct path {
77         char dev[FILE_NAME_SIZE];
78         char dev_t[BLK_DEV_SIZE];
79         struct scsi_idlun scsi_id;
80         struct sg_id sg_id;
81         char wwid[WWID_SIZE];
82         char vendor_id[SCSI_VENDOR_SIZE];
83         char product_id[SCSI_PRODUCT_SIZE];
84         char rev[SCSI_REV_SIZE];
85         char serial[SERIAL_SIZE];
86         char tgt_node_name[NODE_NAME_SIZE];
87         unsigned long long size;
88         unsigned int checkint;
89         unsigned int tick;
90         int bus;
91         int state;
92         int dmstate;
93         int failcount;
94         int priority;
95         int claimed;
96         int pgindex;
97         char * getuid;
98         char * getprio;
99         int (*checkfn) (int, char *, void **);
100         void * checker_context;
101         struct multipath * mpp;
102         int fd;
103         
104         /* configlet pointers */
105         struct hwentry * hwe;
106 };
107
108 struct multipath {
109         char wwid[WWID_SIZE];
110         int minor;
111         int pgpolicy;
112         int nextpg;
113         int queuedio;
114         int action;
115         int pgfailback;
116         int failback_tick;
117         int rr_weight;
118         unsigned long long size;
119         vector paths;
120         vector pg;
121         char params[PARAMS_SIZE];
122         char status[PARAMS_SIZE];
123
124         /* configlet pointers */
125         char * alias;
126         char * selector;
127         char * features;
128         char * hwhandler;
129         struct mpentry * mpe;
130         struct hwentry * hwe;
131
132         /* daemon store a data blob for DM event waiter threads */
133         void * waiter;
134 };
135
136 struct pathgroup {
137         long id;
138         int status;
139         int priority;
140         vector paths;
141 };
142
143 struct path * alloc_path (void);
144 struct pathgroup * alloc_pathgroup (void);
145 struct multipath * alloc_multipath (void);
146 void free_path (struct path *);
147 void free_pathvec (vector vec, int free_paths);
148 void free_pathgroup (struct pathgroup * pgp, int free_paths);
149 void free_pgvec (vector pgvec, int free_paths);
150 void free_multipath (struct multipath *, int free_paths);
151 void drop_multipath (vector mpvec, char * wwid, int free_paths);
152 void free_multipathvec (vector mpvec, int free_paths);
153
154 int store_path (vector pathvec, struct path * pp);
155 int store_pathgroup (vector pgvec, struct pathgroup * pgp);
156
157 struct multipath * find_mp (vector mp, char * alias);
158 struct multipath * find_mp_by_wwid (vector mp, char * wwid);
159 struct multipath * find_mp_by_minor (vector mp, int minor);
160         
161 struct path * find_path_by_devt (vector pathvec, char * devt);
162 struct path * find_path_by_dev (vector pathvec, char * dev);
163
164 char sysfs_path[FILE_NAME_SIZE];
165
166 #endif