chiark / gitweb /
ada7a7394b74871badc8cf750dbf60fecd9f66dd
[elogind.git] / extras / multipath-tools / multipath / main.h
1 /*
2  * Soft:        Description here...
3  *
4  * Version:     $Id: main.h,v 0.0.1 2003/09/18 15:13:38 cvaroqui Exp $
5  *
6  * Author:      Copyright (C) 2003 Christophe Varoqui
7  *
8  *              This program is distributed in the hope that it will be useful,
9  *              but WITHOUT ANY WARRANTY; without even the implied warranty of
10  *              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  *              See the GNU General Public License for more details.
12  *
13  *              This program is free software; you can redistribute it and/or
14  *              modify it under the terms of the GNU General Public License
15  *              as published by the Free Software Foundation; either version
16  *              2 of the License, or (at your option) any later version.
17  */
18
19 #ifndef _MAIN_H
20 #define _MAIN_H
21
22 /* local includes */
23 #include "sg_include.h"
24
25 /* exerpt from "sg_err.h" */
26 #define SCSI_CHECK_CONDITION    0x2
27 #define SCSI_COMMAND_TERMINATED 0x22
28 #define SG_ERR_DRIVER_SENSE     0x08
29
30 /* exerpt from "scsi.h" */
31 #define SCSI_IOCTL_GET_IDLUN            0x5382
32 #define SCSI_IOCTL_GET_BUS_NUMBER       0x5386
33
34 /* global defs */
35 #define WWID_SIZE       33
36 #define SERIAL_SIZE     14
37 #define MAX_DEVS        128
38 #define MAX_MP          MAX_DEVS / 2
39 #define MAX_MP_PATHS    MAX_DEVS / 4
40 #define FILE_NAME_SIZE  256
41 #define DEF_TIMEOUT     60000
42 #define EBUFF_SZ        256
43 #define TUR_CMD_LEN     6
44 #define DM_TARGET       "multipath"
45 #define PIDFILE         "/var/run/multipathd.pid"
46 #define RUN             "/var/run/multipath.run"
47 #define MAXTRY          50
48
49 /* Storage controlers cpabilities */
50 #define FAILOVER        0
51 #define MULTIBUS        1
52 #define GROUP_BY_SERIAL 2
53 #define GROUP_BY_TUR    4
54
55 #define PINDEX(x,y)     mp[(x)].pindex[(y)]
56
57 /* global types */
58 struct scsi_idlun {
59         int dev_id;
60         int host_unique_id;
61         int host_no;
62 };
63
64 struct sg_id {
65         int host_no;
66         int channel;
67         int scsi_id;
68         int lun;
69         int scsi_type;
70         short h_cmd_per_lun;
71         short d_queue_depth;
72         int unused1;
73         int unused2;
74 };
75
76 struct scsi_dev {
77         char dev[FILE_NAME_SIZE];
78         struct scsi_idlun scsi_id;
79         int host_no;
80 };
81
82 struct path {
83         char dev[FILE_NAME_SIZE];
84         char sg_dev[FILE_NAME_SIZE];
85         struct scsi_idlun scsi_id;
86         struct sg_id sg_id;
87         char wwid[WWID_SIZE];
88         char vendor_id[8];
89         char product_id[16];
90         char rev[4];
91         char serial[SERIAL_SIZE];
92         int iopolicy;
93         int tur;
94 };
95
96 struct multipath {
97         char wwid[WWID_SIZE];
98         int npaths;
99         long size;
100         int pindex[MAX_MP_PATHS];
101 };
102
103 struct env {
104         int max_devs;
105         int verbose;
106         int quiet;
107         int dry_run;
108         int iopolicy;
109         int with_sysfs;
110         int major;
111         int minor;
112         char sysfs_path[FILE_NAME_SIZE];
113         char hotplugdev[FILE_NAME_SIZE];
114 };
115
116 /* Build version */
117 #define PROG    "multipath"
118
119 #define VERSION_CODE 0x000012
120 #define DATE_CODE    0x021504
121
122 #define MULTIPATH_VERSION(version)      \
123         (version >> 16) & 0xFF,         \
124         (version >> 8) & 0xFF,          \
125         version & 0xFF
126
127 #define VERSION_STRING PROG" v%d.%d.%d (%.2d/%.2d, 20%.2d)\n",  \
128                 MULTIPATH_VERSION(VERSION_CODE),                \
129                 MULTIPATH_VERSION(DATE_CODE)
130
131 #endif