]> git.ipfire.org Git - thirdparty/systemd.git/blob - extras/multipath/main.h
[PATCH] allow to specify node permissions in the rule
[thirdparty/systemd.git] / extras / 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
46 /* Storage controlers cpabilities */
47 #define FAILOVER 0
48 #define MULTIBUS 1
49 #define GROUP_BY_SERIAL 2
50
51 #define PINDEX(x,y) mp[(x)].pindex[(y)]
52
53 /* global types */
54 struct scsi_idlun {
55 int dev_id;
56 int host_unique_id;
57 int host_no;
58 };
59
60 struct sg_id {
61 int host_no;
62 int channel;
63 int scsi_id;
64 int lun;
65 int scsi_type;
66 short h_cmd_per_lun;
67 short d_queue_depth;
68 int unused1;
69 int unused2;
70 };
71
72 struct scsi_dev {
73 char dev[FILE_NAME_SIZE];
74 struct scsi_idlun scsi_id;
75 int host_no;
76 };
77
78 struct path {
79 char dev[FILE_NAME_SIZE];
80 char sg_dev[FILE_NAME_SIZE];
81 struct scsi_idlun scsi_id;
82 struct sg_id sg_id;
83 char wwid[WWID_SIZE];
84 char vendor_id[8];
85 char product_id[16];
86 char rev[4];
87 char serial[SERIAL_SIZE];
88 int iopolicy;
89 };
90
91 struct multipath {
92 char wwid[WWID_SIZE];
93 int npaths;
94 long size;
95 int pindex[MAX_MP_PATHS];
96 };
97
98 struct env {
99 int max_devs;
100 int verbose;
101 int quiet;
102 int dry_run;
103 int iopolicy;
104 int with_sysfs;
105 char sysfs_path[FILE_NAME_SIZE];
106 char hotplugdev[FILE_NAME_SIZE];
107 };
108
109 /* Build version */
110 #define PROG "multipath"
111
112 #define VERSION_CODE 0x000012
113 #define DATE_CODE 0x021504
114
115 #define MULTIPATH_VERSION(version) \
116 (version >> 16) & 0xFF, \
117 (version >> 8) & 0xFF, \
118 version & 0xFF
119
120 #define VERSION_STRING PROG" v%d.%d.%d (%.2d/%.2d, 20%.2d)\n", \
121 MULTIPATH_VERSION(VERSION_CODE), \
122 MULTIPATH_VERSION(DATE_CODE)
123
124 #endif