summaryrefslogtreecommitdiff
path: root/extras/multipath-tools/multipath/main.h
blob: ada7a7394b74871badc8cf750dbf60fecd9f66dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Soft:        Description here...
 *
 * Version:     $Id: main.h,v 0.0.1 2003/09/18 15:13:38 cvaroqui Exp $
 *
 * Author:      Copyright (C) 2003 Christophe Varoqui
 *
 *              This program is distributed in the hope that it will be useful,
 *              but WITHOUT ANY WARRANTY; without even the implied warranty of
 *              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *              See the GNU General Public License for more details.
 *
 *              This program is free software; you can redistribute it and/or
 *              modify it under the terms of the GNU General Public License
 *              as published by the Free Software Foundation; either version
 *              2 of the License, or (at your option) any later version.
 */

#ifndef _MAIN_H
#define _MAIN_H

/* local includes */
#include "sg_include.h"

/* exerpt from "sg_err.h" */
#define SCSI_CHECK_CONDITION 	0x2
#define SCSI_COMMAND_TERMINATED 0x22
#define SG_ERR_DRIVER_SENSE     0x08

/* exerpt from "scsi.h" */
#define SCSI_IOCTL_GET_IDLUN            0x5382
#define SCSI_IOCTL_GET_BUS_NUMBER       0x5386

/* global defs */
#define WWID_SIZE	33
#define SERIAL_SIZE	14
#define MAX_DEVS	128
#define MAX_MP		MAX_DEVS / 2
#define MAX_MP_PATHS	MAX_DEVS / 4
#define FILE_NAME_SIZE	256
#define DEF_TIMEOUT	60000
#define EBUFF_SZ	256
#define TUR_CMD_LEN	6
#define DM_TARGET	"multipath"
#define PIDFILE		"/var/run/multipathd.pid"
#define RUN		"/var/run/multipath.run"
#define MAXTRY		50

/* Storage controlers cpabilities */
#define FAILOVER	0
#define MULTIBUS	1
#define GROUP_BY_SERIAL	2
#define GROUP_BY_TUR	4

#define PINDEX(x,y)	mp[(x)].pindex[(y)]

/* global types */
struct scsi_idlun {
	int dev_id;
	int host_unique_id;
	int host_no;
};

struct sg_id {
	int host_no;
	int channel;
	int scsi_id;
	int lun;
	int scsi_type;
	short h_cmd_per_lun;
	short d_queue_depth;
	int unused1;
	int unused2;
};

struct scsi_dev {
	char dev[FILE_NAME_SIZE];
	struct scsi_idlun scsi_id;
	int host_no;
};

struct path {
	char dev[FILE_NAME_SIZE];
	char sg_dev[FILE_NAME_SIZE];
	struct scsi_idlun scsi_id;
	struct sg_id sg_id;
	char wwid[WWID_SIZE];
	char vendor_id[8];
	char product_id[16];
	char rev[4];
	char serial[SERIAL_SIZE];
	int iopolicy;
	int tur;
};

struct multipath {
	char wwid[WWID_SIZE];
	int npaths;
	long size;
	int pindex[MAX_MP_PATHS];
};

struct env {
	int max_devs;
	int verbose;
	int quiet;
	int dry_run;
	int iopolicy;
	int with_sysfs;
	int major;
	int minor;
	char sysfs_path[FILE_NAME_SIZE];
	char hotplugdev[FILE_NAME_SIZE];
};

/* Build version */
#define PROG    "multipath"

#define VERSION_CODE 0x000012
#define DATE_CODE    0x021504

#define MULTIPATH_VERSION(version)	\
	(version >> 16) & 0xFF,		\
	(version >> 8) & 0xFF,		\
	version & 0xFF

#define VERSION_STRING PROG" v%d.%d.%d (%.2d/%.2d, 20%.2d)\n",	\
                MULTIPATH_VERSION(VERSION_CODE),		\
                MULTIPATH_VERSION(DATE_CODE)

#endif