020c8aa994bf338d5ca130de6db4cfea6f4f62d0
[multipath-tools/.git] / libmultipath / hwtable.c
1 #include <stdio.h>
2
3 #include "checkers.h"
4 #include "vector.h"
5 #include "defaults.h"
6 #include "structs.h"
7 #include "config.h"
8 #include "pgpolicies.h"
9 #include "prio.h"
10
11 /*
12  * Tuning suggestions on these parameters should go to
13  * dm-devel@redhat.com
14  * 
15  * You are welcome to claim maintainership over a controller
16  * family. Please mail the currently enlisted maintainer and
17  * the upstream package maintainer.
18  */
19 static struct hwentry default_hw[] = {
20         /*
21          * Compellent Technologies, Inc.
22          *
23          * Maintainer : Jim Lester, Compellent
24          * Mail : jim.lester@compellent.com
25          */
26         {
27                 .vendor        = "COMPELNT",
28                 .product       = "Compellent Vol",
29                 .getuid        = DEFAULT_GETUID,
30                 .features      = DEFAULT_FEATURES,
31                 .hwhandler     = DEFAULT_HWHANDLER,
32                 .selector      = DEFAULT_SELECTOR,
33                 .pgpolicy      = MULTIBUS,
34                 .pgfailback    = -FAILBACK_IMMEDIATE,
35                 .rr_weight     = RR_WEIGHT_NONE,
36                 .no_path_retry = NO_PATH_RETRY_QUEUE,
37                 .minio         = DEFAULT_MINIO,
38                 .minio_rq      = DEFAULT_MINIO_RQ,
39                 .checker_name  = TUR,
40                 .prio_name     = DEFAULT_PRIO,
41                 .prio_args     = NULL,
42         },
43         /*
44          * Apple controller family
45          *
46          * Maintainer : Shyam Sundar
47          * Mail : g.shyamsundar@yahoo.co.in
48          */
49         {
50                 .vendor        = "APPLE*",
51                 .product       = "Xserve RAID ",
52                 .getuid        = DEFAULT_GETUID,
53                 .features      = DEFAULT_FEATURES,
54                 .hwhandler     = DEFAULT_HWHANDLER,
55                 .selector      = DEFAULT_SELECTOR,
56                 .pgpolicy      = MULTIBUS,
57                 .pgfailback    = FAILBACK_UNDEF,
58                 .rr_weight     = RR_WEIGHT_NONE,
59                 .no_path_retry = NO_PATH_RETRY_UNDEF,
60                 .minio         = DEFAULT_MINIO,
61                 .minio_rq      = DEFAULT_MINIO_RQ,
62                 .checker_name  = DEFAULT_CHECKER,
63                 .prio_name     = DEFAULT_PRIO,
64                 .prio_args     = NULL,
65         },
66         /*
67          * StorageWorks controller family
68          *
69          * Maintainer : Christophe Varoqui
70          * Mail : christophe.varoqui@opensvc.com
71          */
72         {
73                 .vendor        = "3PARdata",
74                 .product       = "VV",
75                 .getuid        = DEFAULT_GETUID,
76                 .features      = DEFAULT_FEATURES,
77                 .hwhandler     = DEFAULT_HWHANDLER,
78                 .selector      = DEFAULT_SELECTOR,
79                 .pgpolicy      = MULTIBUS,
80                 .pgfailback    = FAILBACK_UNDEF,
81                 .rr_weight     = RR_WEIGHT_NONE,
82                 .no_path_retry = NO_PATH_RETRY_UNDEF,
83                 .minio         = DEFAULT_MINIO,
84                 .minio_rq      = DEFAULT_MINIO_RQ,
85                 .checker_name  = DEFAULT_CHECKER,
86                 .prio_name     = DEFAULT_PRIO,
87                 .prio_args     = NULL,
88         },
89         {
90                 .vendor        = "DEC",
91                 .product       = "HSG80",
92                 .getuid        = DEFAULT_GETUID,
93                 .features      = "1 queue_if_no_path",
94                 .hwhandler     = "1 hp_sw",
95                 .selector      = DEFAULT_SELECTOR,
96                 .pgpolicy      = GROUP_BY_PRIO,
97                 .pgfailback    = FAILBACK_UNDEF,
98                 .rr_weight     = RR_WEIGHT_NONE,
99                 .no_path_retry = NO_PATH_RETRY_UNDEF,
100                 .minio         = DEFAULT_MINIO,
101                 .minio_rq      = DEFAULT_MINIO_RQ,
102                 .checker_name  = HP_SW,
103                 .prio_name     = PRIO_HP_SW,
104                 .prio_args     = NULL,
105         },
106         {
107                 .vendor        = "HP",
108                 .product       = "A6189A",
109                 .getuid        = DEFAULT_GETUID,
110                 .features      = DEFAULT_FEATURES,
111                 .hwhandler     = DEFAULT_HWHANDLER,
112                 .selector      = DEFAULT_SELECTOR,
113                 .pgpolicy      = MULTIBUS,
114                 .pgfailback    = FAILBACK_UNDEF,
115                 .rr_weight     = RR_WEIGHT_NONE,
116                 .no_path_retry = 12,
117                 .minio         = DEFAULT_MINIO,
118                 .minio_rq      = DEFAULT_MINIO_RQ,
119                 .checker_name  = DIRECTIO,
120                 .prio_name     = DEFAULT_PRIO,
121                 .prio_args     = NULL,
122         },
123         {
124                 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
125                 .vendor        = "(COMPAQ|HP)",
126                 .product       = "(MSA|HSV)1.0.*",
127                 .getuid        = DEFAULT_GETUID,
128                 .features      = "1 queue_if_no_path",
129                 .hwhandler     = "1 hp_sw",
130                 .selector      = DEFAULT_SELECTOR,
131                 .pgpolicy      = GROUP_BY_PRIO,
132                 .pgfailback    = FAILBACK_UNDEF,
133                 .rr_weight     = RR_WEIGHT_NONE,
134                 .no_path_retry = 12,
135                 .minio         = 100,
136                 .checker_name  = HP_SW,
137                 .prio_name     = PRIO_HP_SW,
138                 .prio_args     = NULL,
139         },
140         {
141                 /* MSA 1000/1500 with new firmware */
142                 .vendor        = "(COMPAQ|HP)",
143                 .product       = "MSA VOLUME",
144                 .getuid        = DEFAULT_GETUID,
145                 .features      = DEFAULT_FEATURES,
146                 .hwhandler     = DEFAULT_HWHANDLER,
147                 .selector      = DEFAULT_SELECTOR,
148                 .pgpolicy      = GROUP_BY_PRIO,
149                 .pgfailback    = -FAILBACK_IMMEDIATE,
150                 .rr_weight     = RR_WEIGHT_NONE,
151                 .no_path_retry = 12,
152                 .minio         = 100,
153                 .checker_name  = TUR,
154                 .prio_name     = PRIO_ALUA,
155                 .prio_args     = NULL,
156         },
157         {
158                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
159                 .vendor        = "(COMPAQ|HP)",
160                 .product       = "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0",
161                 .getuid        = DEFAULT_GETUID,
162                 .features      = DEFAULT_FEATURES,
163                 .hwhandler     = DEFAULT_HWHANDLER,
164                 .selector      = DEFAULT_SELECTOR,
165                 .pgpolicy      = GROUP_BY_PRIO,
166                 .pgfailback    = -FAILBACK_IMMEDIATE,
167                 .rr_weight     = RR_WEIGHT_NONE,
168                 .no_path_retry = 12,
169                 .minio         = 100,
170                 .checker_name  = TUR,
171                 .prio_name     = PRIO_ALUA,
172                 .prio_args     = NULL,
173         },
174         {
175                 /* HP MSA2000 product family with old firmware */
176                 .vendor        = "HP",
177                 .product       = "MSA2[02]12fc|MSA2012i",
178                 .getuid        = DEFAULT_GETUID,
179                 .features      = DEFAULT_FEATURES,
180                 .hwhandler     = DEFAULT_HWHANDLER,
181                 .selector      = DEFAULT_SELECTOR,
182                 .pgpolicy      = MULTIBUS,
183                 .pgfailback    = -FAILBACK_IMMEDIATE,
184                 .rr_weight     = RR_WEIGHT_NONE,
185                 .no_path_retry = 18,
186                 .minio         = 100,
187                 .checker_name  = TUR,
188                 .prio_name     = DEFAULT_PRIO,
189                 .prio_args     = NULL,
190         },
191         {
192                 /* HP MSA2000 product family with new firmware */
193                 .vendor        = "HP",
194                 .product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
195                 .getuid        = DEFAULT_GETUID,
196                 .features      = DEFAULT_FEATURES,
197                 .hwhandler     = DEFAULT_HWHANDLER,
198                 .selector      = DEFAULT_SELECTOR,
199                 .pgpolicy      = GROUP_BY_PRIO,
200                 .pgfailback    = -FAILBACK_IMMEDIATE,
201                 .rr_weight     = RR_WEIGHT_NONE,
202                 .no_path_retry = 18,
203                 .minio         = 100,
204                 .checker_name  = TUR,
205                 .prio_name     = PRIO_ALUA,
206                 .prio_args     = NULL,
207         },
208
209         {
210                 /* HP SVSP */
211                 .vendor        = "HP",
212                 .product       = "HSVX700",
213                 .getuid        = DEFAULT_GETUID,
214                 .features      = DEFAULT_FEATURES,
215                 .hwhandler     = "1 alua",
216                 .selector      = DEFAULT_SELECTOR,
217                 .pgpolicy      = GROUP_BY_PRIO,
218                 .pgfailback    = -FAILBACK_IMMEDIATE,
219                 .rr_weight     = RR_WEIGHT_NONE,
220                 .no_path_retry = 12,
221                 .minio         = 100,
222                 .checker_name  = TUR,
223                 .prio_name     = PRIO_ALUA,
224                 .prio_args     = NULL,
225         },
226
227         {
228                 /* HP Smart Array */
229                 .vendor        = "HP",
230                 .product       = "LOGICAL VOLUME.*",
231                 .getuid        = DEFAULT_GETUID,
232                 .features      = DEFAULT_FEATURES,
233                 .hwhandler     = DEFAULT_HWHANDLER,
234                 .selector      = DEFAULT_SELECTOR,
235                 .pgpolicy      = MULTIBUS,
236                 .pgfailback    = FAILBACK_UNDEF,
237                 .rr_weight     = RR_WEIGHT_NONE,
238                 .no_path_retry = 12,
239                 .minio         = DEFAULT_MINIO,
240                 .minio_rq      = DEFAULT_MINIO_RQ,
241                 .checker_name  = TUR,
242                 .prio_name     = DEFAULT_PRIO,
243                 .prio_args     = NULL,
244         },
245         {
246                 /* HP P2000 family arrays */
247                 .vendor        = "HP",
248                 .product       = "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI",
249                 .getuid        = DEFAULT_GETUID,
250                 .features      = DEFAULT_FEATURES,
251                 .hwhandler     = DEFAULT_HWHANDLER,
252                 .selector      = DEFAULT_SELECTOR,
253                 .pgpolicy      = GROUP_BY_PRIO,
254                 .pgfailback    = -FAILBACK_IMMEDIATE,
255                 .rr_weight     = RR_WEIGHT_NONE,
256                 .no_path_retry = 18,
257                 .minio         = 100,
258                 .minio_rq      = DEFAULT_MINIO_RQ,
259                 .checker_name  = TUR,
260                 .prio_name     = PRIO_ALUA,
261                 .prio_args     = NULL,
262         },
263         /*
264          * DDN controller family
265          *
266          * Maintainer : Christophe Varoqui
267          * Mail : christophe.varoqui@opensvc.com
268          */
269         {
270                 .vendor        = "DDN",
271                 .product       = "SAN DataDirector",
272                 .getuid        = DEFAULT_GETUID,
273                 .features      = DEFAULT_FEATURES,
274                 .hwhandler     = DEFAULT_HWHANDLER,
275                 .selector      = DEFAULT_SELECTOR,
276                 .pgpolicy      = MULTIBUS,
277                 .pgfailback    = FAILBACK_UNDEF,
278                 .rr_weight     = RR_WEIGHT_NONE,
279                 .no_path_retry = NO_PATH_RETRY_UNDEF,
280                 .minio         = DEFAULT_MINIO,
281                 .minio_rq      = DEFAULT_MINIO_RQ,
282                 .checker_name  = DIRECTIO,
283                 .prio_name     = DEFAULT_PRIO,
284                 .prio_args     = NULL,
285         },
286         /*
287          * EMC / Clariion controller family
288          *
289          * Maintainer : Edward Goggin, EMC
290          * Mail : egoggin@emc.com
291          */
292         {
293                 .vendor        = "EMC",
294                 .product       = "SYMMETRIX",
295                 .getuid        = "/lib/udev/scsi_id --page=pre-spc3-83 --whitelisted --device=/dev/%n",
296                 .features      = DEFAULT_FEATURES,
297                 .hwhandler     = DEFAULT_HWHANDLER,
298                 .selector      = DEFAULT_SELECTOR,
299                 .pgpolicy      = MULTIBUS,
300                 .pgfailback    = FAILBACK_UNDEF,
301                 .rr_weight     = RR_WEIGHT_NONE,
302                 .no_path_retry = 6,
303                 .minio         = DEFAULT_MINIO,
304                 .minio_rq      = DEFAULT_MINIO_RQ,
305                 .checker_name  = TUR,
306                 .prio_name     = DEFAULT_PRIO,
307                 .prio_args     = NULL,
308         },
309         {
310                 .vendor        = "DGC",
311                 .product       = ".*",
312                 .bl_product    = "LUNZ",
313                 .getuid        = DEFAULT_GETUID,
314                 .features      = "1 queue_if_no_path",
315                 .hwhandler     = "1 emc",
316                 .selector      = DEFAULT_SELECTOR,
317                 .pgpolicy      = GROUP_BY_PRIO,
318                 .pgfailback    = -FAILBACK_IMMEDIATE,
319                 .rr_weight     = RR_WEIGHT_NONE,
320                 .no_path_retry = (300 / DEFAULT_CHECKINT),
321                 .minio         = DEFAULT_MINIO,
322                 .minio_rq      = DEFAULT_MINIO_RQ,
323                 .checker_name  = EMC_CLARIION,
324                 .prio_name     = PRIO_EMC,
325                 .prio_args     = NULL,
326         },
327         {
328                 .vendor        = "EMC",
329                 .product       = "Invista",
330                 .bl_product    = "LUNZ",
331                 .getuid        = DEFAULT_GETUID,
332                 .features      = DEFAULT_FEATURES,
333                 .hwhandler     = DEFAULT_HWHANDLER,
334                 .selector      = DEFAULT_SELECTOR,
335                 .pgpolicy      = MULTIBUS,
336                 .pgfailback    = FAILBACK_UNDEF,
337                 .rr_weight     = RR_WEIGHT_NONE,
338                 .no_path_retry = 5,
339                 .minio         = DEFAULT_MINIO,
340                 .minio_rq      = DEFAULT_MINIO_RQ,
341                 .checker_name  = TUR,
342                 .prio_name     = DEFAULT_PRIO,
343                 .prio_args     = NULL,
344         },
345         /*
346          * Fujitsu controller family
347          *
348          * Maintainer : Christophe Varoqui
349          * Mail : christophe.varoqui@opensvc.com
350          */
351         {
352                 .vendor        = "FSC",
353                 .product       = "CentricStor",
354                 .getuid        = DEFAULT_GETUID,
355                 .features      = DEFAULT_FEATURES,
356                 .hwhandler     = DEFAULT_HWHANDLER,
357                 .selector      = DEFAULT_SELECTOR,
358                 .pgpolicy      = GROUP_BY_SERIAL,
359                 .pgfailback    = FAILBACK_UNDEF,
360                 .rr_weight     = RR_WEIGHT_NONE,
361                 .no_path_retry = NO_PATH_RETRY_UNDEF,
362                 .minio         = DEFAULT_MINIO,
363                 .minio_rq      = DEFAULT_MINIO_RQ,
364                 .checker_name  = DIRECTIO,
365                 .prio_name     = DEFAULT_PRIO,
366                 .prio_args     = NULL,
367         },
368         {
369                 .vendor        = "FUJITSU",
370                 .product       = "ETERNUS_DX(L|400|8000)",
371                 .getuid        = DEFAULT_GETUID,
372                 .features      = "1 queue_if_no_path",
373                 .hwhandler     = DEFAULT_HWHANDLER,
374                 .selector      = DEFAULT_SELECTOR,
375                 .pgpolicy      = GROUP_BY_PRIO,
376                 .pgfailback    = -FAILBACK_IMMEDIATE,
377                 .rr_weight     = RR_WEIGHT_NONE,
378                 .no_path_retry = 10,
379                 .minio         = DEFAULT_MINIO,
380                 .checker_name  = TUR,
381                 .prio_name     = PRIO_ALUA,
382                 .prio_args     = NULL,
383         },
384         /*
385          * Hitachi controller family
386          *
387          * Maintainer : Matthias Rudolph
388          * Mail : matthias.rudolph@hds.com
389          */
390         {
391                 .vendor        = "(HITACHI|HP)",
392                 .product       = "OPEN-.*",
393                 .getuid        = DEFAULT_GETUID,
394                 .features      = DEFAULT_FEATURES,
395                 .hwhandler     = DEFAULT_HWHANDLER,
396                 .selector      = DEFAULT_SELECTOR,
397                 .pgpolicy      = MULTIBUS,
398                 .pgfailback    = FAILBACK_UNDEF,
399                 .rr_weight     = RR_WEIGHT_NONE,
400                 .no_path_retry = NO_PATH_RETRY_UNDEF,
401                 .minio         = DEFAULT_MINIO,
402                 .minio_rq      = DEFAULT_MINIO_RQ,
403                 .checker_name  = TUR,
404                 .prio_name     = DEFAULT_PRIO,
405                 .prio_args     = NULL,
406         },
407         {
408                 .vendor        = "HITACHI",
409                 .product       = "DF.*",
410                 .getuid        = DEFAULT_GETUID,
411                 .features      = "1 queue_if_no_path",
412                 .hwhandler     = DEFAULT_HWHANDLER,
413                 .selector      = DEFAULT_SELECTOR,
414                 .pgpolicy      = GROUP_BY_PRIO,
415                 .pgfailback    = -FAILBACK_IMMEDIATE,
416                 .rr_weight     = RR_WEIGHT_NONE,
417                 .no_path_retry = NO_PATH_RETRY_UNDEF,
418                 .minio         = DEFAULT_MINIO,
419                 .minio_rq      = DEFAULT_MINIO_RQ,
420                 .checker_name  = TUR,
421                 .prio_name     = PRIO_HDS,
422                 .prio_args     = NULL,
423         },
424         /*
425          * IBM controller family
426          *
427          * Maintainer : Hannes Reinecke, SuSE
428          * Mail : hare@suse.de
429          */
430         {
431                 .vendor        = "IBM",
432                 .product       = "ProFibre 4000R",
433                 .getuid        = DEFAULT_GETUID,
434                 .features      = DEFAULT_FEATURES,
435                 .hwhandler     = DEFAULT_HWHANDLER,
436                 .selector      = DEFAULT_SELECTOR,
437                 .pgpolicy      = MULTIBUS,
438                 .pgfailback    = FAILBACK_UNDEF,
439                 .rr_weight     = RR_WEIGHT_NONE,
440                 .no_path_retry = NO_PATH_RETRY_UNDEF,
441                 .minio         = DEFAULT_MINIO,
442                 .minio_rq      = DEFAULT_MINIO_RQ,
443                 .checker_name  = DIRECTIO,
444                 .prio_name     = DEFAULT_PRIO,
445                 .prio_args     = NULL,
446         },
447         {
448                 /* IBM FAStT 1722-600 */
449                 .vendor        = "IBM",
450                 .product       = "^1722-600",
451                 .getuid        = DEFAULT_GETUID,
452                 .features      = "1 queue_if_no_path",
453                 .hwhandler     = "1 rdac",
454                 .selector      = DEFAULT_SELECTOR,
455                 .pgpolicy      = GROUP_BY_PRIO,
456                 .pgfailback    = -FAILBACK_IMMEDIATE,
457                 .rr_weight     = RR_WEIGHT_NONE,
458                 .no_path_retry = 300,
459                 .minio         = DEFAULT_MINIO,
460                 .minio_rq      = DEFAULT_MINIO_RQ,
461                 .checker_name  = RDAC,
462                 .prio_name     = PRIO_RDAC,
463                 .prio_args     = NULL,
464         },
465         {
466                 /* IBM DS4100 */
467                 .vendor        = "IBM",
468                 .product       = "^1724",
469                 .getuid        = DEFAULT_GETUID,
470                 .features      = "1 queue_if_no_path",
471                 .hwhandler     = "1 rdac",
472                 .selector      = DEFAULT_SELECTOR,
473                 .pgpolicy      = GROUP_BY_PRIO,
474                 .pgfailback    = -FAILBACK_IMMEDIATE,
475                 .rr_weight     = RR_WEIGHT_NONE,
476                 .no_path_retry = 300,
477                 .minio         = DEFAULT_MINIO,
478                 .minio_rq      = DEFAULT_MINIO_RQ,
479                 .checker_name  = RDAC,
480                 .prio_name     = PRIO_RDAC,
481                 .prio_args     = NULL,
482         },
483         {
484                 /* IBM DS3200 / DS3300 / DS3400 */
485                 .vendor        = "IBM",
486                 .product       = "^1726",
487                 .getuid        = DEFAULT_GETUID,
488                 .features      = "1 queue_if_no_path",
489                 .hwhandler     = "1 rdac",
490                 .selector      = DEFAULT_SELECTOR,
491                 .pgpolicy      = GROUP_BY_PRIO,
492                 .pgfailback    = -FAILBACK_IMMEDIATE,
493                 .rr_weight     = RR_WEIGHT_NONE,
494                 .no_path_retry = 300,
495                 .minio         = DEFAULT_MINIO,
496                 .minio_rq      = DEFAULT_MINIO_RQ,
497                 .checker_name  = RDAC,
498                 .prio_name     = PRIO_RDAC,
499                 .prio_args     = NULL,
500         },
501         {
502                 /* IBM DS4400 / DS4500 / FAStT700 */
503                 .vendor        = "IBM",
504                 .product       = "^1742",
505                 .getuid        = DEFAULT_GETUID,
506                 .features      = DEFAULT_FEATURES,
507                 .hwhandler     = "1 rdac",
508                 .selector      = DEFAULT_SELECTOR,
509                 .pgpolicy      = GROUP_BY_PRIO,
510                 .pgfailback    = -FAILBACK_IMMEDIATE,
511                 .rr_weight     = RR_WEIGHT_NONE,
512                 .no_path_retry = NO_PATH_RETRY_QUEUE,
513                 .minio         = DEFAULT_MINIO,
514                 .minio_rq      = DEFAULT_MINIO_RQ,
515                 .checker_name  = RDAC,
516                 .prio_name     = PRIO_RDAC,
517                 .prio_args     = NULL,
518         },
519         {
520                 .vendor        = "IBM",
521                 .product       = "^1745|^1746",
522                 .getuid        = DEFAULT_GETUID,
523                 .features      = "2 pg_init_retries 50",
524                 .hwhandler     = "1 rdac",
525                 .selector      = DEFAULT_SELECTOR,
526                 .pgpolicy      = GROUP_BY_PRIO,
527                 .pgfailback    = -FAILBACK_IMMEDIATE,
528                 .rr_weight     = RR_WEIGHT_NONE,
529                 .no_path_retry = 15,
530                 .minio         = DEFAULT_MINIO,
531                 .minio_rq      = DEFAULT_MINIO_RQ,
532                 .checker_name  = RDAC,
533                 .prio_name     = PRIO_RDAC,
534                 .prio_args     = NULL,
535         },
536         {
537             /* IBM DS4700 */
538                 .vendor        = "IBM",
539                 .product       = "^1814",
540                 .getuid        = DEFAULT_GETUID,
541                 .features      = DEFAULT_FEATURES,
542                 .hwhandler     = "1 rdac",
543                 .selector      = DEFAULT_SELECTOR,
544                 .pgpolicy      = GROUP_BY_PRIO,
545                 .pgfailback    = -FAILBACK_IMMEDIATE,
546                 .rr_weight     = RR_WEIGHT_NONE,
547                 .no_path_retry = NO_PATH_RETRY_QUEUE,
548                 .minio         = DEFAULT_MINIO,
549                 .minio_rq      = DEFAULT_MINIO_RQ,
550                 .checker_name  = RDAC,
551                 .prio_name     = PRIO_RDAC,
552                 .prio_args     = NULL,
553         },
554         {
555             /* IBM DS4800 */
556                 .vendor        = "IBM",
557                 .product       = "^1815",
558                 .getuid        = DEFAULT_GETUID,
559                 .features      = DEFAULT_FEATURES,
560                 .hwhandler     = "1 rdac",
561                 .selector      = DEFAULT_SELECTOR,
562                 .pgpolicy      = GROUP_BY_PRIO,
563                 .pgfailback    = -FAILBACK_IMMEDIATE,
564                 .rr_weight     = RR_WEIGHT_NONE,
565                 .no_path_retry = NO_PATH_RETRY_QUEUE,
566                 .minio         = DEFAULT_MINIO,
567                 .minio_rq      = DEFAULT_MINIO_RQ,
568                 .checker_name  = RDAC,
569                 .prio_name     = PRIO_RDAC,
570                 .prio_args     = NULL,
571         },
572         {
573             /* IBM DS5000 */
574                 .vendor        = "IBM",
575                 .product       = "^1818",
576                 .getuid        = DEFAULT_GETUID,
577                 .features      = DEFAULT_FEATURES,
578                 .hwhandler     = "1 rdac",
579                 .selector      = DEFAULT_SELECTOR,
580                 .pgpolicy      = GROUP_BY_PRIO,
581                 .pgfailback    = -FAILBACK_IMMEDIATE,
582                 .rr_weight     = RR_WEIGHT_NONE,
583                 .no_path_retry = NO_PATH_RETRY_QUEUE,
584                 .minio         = DEFAULT_MINIO,
585                 .minio_rq      = DEFAULT_MINIO_RQ,
586                 .checker_name  = RDAC,
587                 .prio_name     = PRIO_RDAC,
588                 .prio_args     = NULL,
589         },
590         {
591                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
592                 .vendor        = "IBM",
593                 .product       = "^3526",
594                 .getuid        = DEFAULT_GETUID,
595                 .features      = DEFAULT_FEATURES,
596                 .hwhandler     = "1 rdac",
597                 .selector      = DEFAULT_SELECTOR,
598                 .pgpolicy      = GROUP_BY_PRIO,
599                 .pgfailback    = -FAILBACK_IMMEDIATE,
600                 .rr_weight     = RR_WEIGHT_NONE,
601                 .no_path_retry = NO_PATH_RETRY_QUEUE,
602                 .minio         = DEFAULT_MINIO,
603                 .minio_rq      = DEFAULT_MINIO_RQ,
604                 .checker_name  = RDAC,
605                 .prio_name     = PRIO_RDAC,
606                 .prio_args     = NULL,
607         },
608         {
609                 /* IBM DS4200 / FAStT200 */
610                 .vendor        = "IBM",
611                 .product       = "^3542",
612                 .getuid        = DEFAULT_GETUID,
613                 .features      = DEFAULT_FEATURES,
614                 .hwhandler     = DEFAULT_HWHANDLER,
615                 .selector      = DEFAULT_SELECTOR,
616                 .pgpolicy      = GROUP_BY_SERIAL,
617                 .pgfailback    = FAILBACK_UNDEF,
618                 .rr_weight     = RR_WEIGHT_NONE,
619                 .no_path_retry = NO_PATH_RETRY_UNDEF,
620                 .minio         = DEFAULT_MINIO,
621                 .minio_rq      = DEFAULT_MINIO_RQ,
622                 .checker_name  = TUR,
623                 .prio_name     = DEFAULT_PRIO,
624                 .prio_args     = NULL,
625         },
626         {
627                 /* IBM ESS F20 aka Shark */
628                 .vendor        = "IBM",
629                 .product       = "^2105800",
630                 .getuid        = DEFAULT_GETUID,
631                 .features      = "1 queue_if_no_path",
632                 .hwhandler     = DEFAULT_HWHANDLER,
633                 .selector      = DEFAULT_SELECTOR,
634                 .pgpolicy      = GROUP_BY_SERIAL,
635                 .pgfailback    = FAILBACK_UNDEF,
636                 .rr_weight     = RR_WEIGHT_NONE,
637                 .no_path_retry = NO_PATH_RETRY_UNDEF,
638                 .minio         = DEFAULT_MINIO,
639                 .minio_rq      = DEFAULT_MINIO_RQ,
640                 .checker_name  = TUR,
641                 .prio_name     = DEFAULT_PRIO,
642                 .prio_args     = NULL,
643         },
644         {
645                 /* IBM ESS F20 aka Shark */
646                 .vendor        = "IBM",
647                 .product       = "^2105F20",
648                 .getuid        = DEFAULT_GETUID,
649                 .features      = "1 queue_if_no_path",
650                 .hwhandler     = DEFAULT_HWHANDLER,
651                 .selector      = DEFAULT_SELECTOR,
652                 .pgpolicy      = GROUP_BY_SERIAL,
653                 .pgfailback    = FAILBACK_UNDEF,
654                 .rr_weight     = RR_WEIGHT_NONE,
655                 .no_path_retry = NO_PATH_RETRY_UNDEF,
656                 .minio         = DEFAULT_MINIO,
657                 .minio_rq      = DEFAULT_MINIO_RQ,
658                 .checker_name  = TUR,
659                 .prio_name     = DEFAULT_PRIO,
660                 .prio_args     = NULL,
661         },
662         {
663                 /* IBM DS6000 */
664                 .vendor        = "IBM",
665                 .product       = "^1750500",
666                 .getuid        = DEFAULT_GETUID,
667                 .features      = "1 queue_if_no_path",
668                 .hwhandler     = DEFAULT_HWHANDLER,
669                 .selector      = DEFAULT_SELECTOR,
670                 .pgpolicy      = GROUP_BY_PRIO,
671                 .pgfailback    = -FAILBACK_IMMEDIATE,
672                 .rr_weight     = RR_WEIGHT_NONE,
673                 .no_path_retry = NO_PATH_RETRY_UNDEF,
674                 .minio         = DEFAULT_MINIO,
675                 .minio_rq      = DEFAULT_MINIO_RQ,
676                 .checker_name  = TUR,
677                 .prio_name     = PRIO_ALUA,
678                 .prio_args     = NULL,
679         },
680         {
681                 /* IBM DS8000 */
682                 .vendor        = "IBM",
683                 .product       = "^2107900",
684                 .getuid        = DEFAULT_GETUID,
685                 .features      = "1 queue_if_no_path",
686                 .hwhandler     = DEFAULT_HWHANDLER,
687                 .selector      = DEFAULT_SELECTOR,
688                 .pgpolicy      = MULTIBUS,
689                 .pgfailback    = FAILBACK_UNDEF,
690                 .rr_weight     = RR_WEIGHT_NONE,
691                 .no_path_retry = NO_PATH_RETRY_UNDEF,
692                 .minio         = DEFAULT_MINIO,
693                 .minio_rq      = DEFAULT_MINIO_RQ,
694                 .checker_name  = TUR,
695                 .prio_name     = DEFAULT_PRIO,
696                 .prio_args     = NULL,
697         },
698         {
699                 /* IBM SAN Volume Controller */
700                 .vendor        = "IBM",
701                 .product       = "^2145",
702                 .getuid        = DEFAULT_GETUID,
703                 .features      = "1 queue_if_no_path",
704                 .hwhandler     = DEFAULT_HWHANDLER,
705                 .selector      = DEFAULT_SELECTOR,
706                 .pgpolicy      = GROUP_BY_PRIO,
707                 .pgfailback    = -FAILBACK_IMMEDIATE,
708                 .rr_weight     = RR_WEIGHT_NONE,
709                 .no_path_retry = NO_PATH_RETRY_UNDEF,
710                 .minio         = DEFAULT_MINIO,
711                 .minio_rq      = DEFAULT_MINIO_RQ,
712                 .checker_name  = TUR,
713                 .prio_name     = PRIO_ALUA,
714                 .prio_args     = NULL,
715         },
716         {
717                 /* IBM S/390 ECKD DASD */
718                 .vendor        = "IBM",
719                 .product       = "S/390 DASD ECKD",
720                 .bl_product       = "S/390.*",
721                 .getuid        = "/sbin/dasdinfo -u -b %n",
722                 .features      = "1 queue_if_no_path",
723                 .hwhandler     = DEFAULT_HWHANDLER,
724                 .selector      = DEFAULT_SELECTOR,
725                 .pgpolicy      = MULTIBUS,
726                 .pgfailback    = FAILBACK_UNDEF,
727                 .rr_weight     = RR_WEIGHT_NONE,
728                 .no_path_retry = NO_PATH_RETRY_UNDEF,
729                 .minio         = DEFAULT_MINIO,
730                 .minio_rq      = DEFAULT_MINIO_RQ,
731                 .checker_name  = DIRECTIO,
732                 .prio_name     = DEFAULT_PRIO,
733                 .prio_args     = NULL,
734         },
735         {
736                 /* IBM S/390 FBA DASD */
737                 .vendor        = "IBM",
738                 .product       = "S/390 DASD FBA",
739                 .bl_product       = "S/390.*",
740                 .getuid        = "/sbin/dasdinfo -u -b %n",
741                 .features      = "1 queue_if_no_path",
742                 .hwhandler     = DEFAULT_HWHANDLER,
743                 .selector      = DEFAULT_SELECTOR,
744                 .pgpolicy      = MULTIBUS,
745                 .pgfailback    = FAILBACK_UNDEF,
746                 .rr_weight     = RR_WEIGHT_NONE,
747                 .no_path_retry = NO_PATH_RETRY_UNDEF,
748                 .minio         = DEFAULT_MINIO,
749                 .minio_rq      = DEFAULT_MINIO_RQ,
750                 .checker_name  = DIRECTIO,
751                 .prio_name     = DEFAULT_PRIO,
752                 .prio_args     = NULL,
753         },
754         {
755                 /* IBM IPR */
756                 .vendor        = "IBM",
757                 .product       = "^IPR.*",
758                 .getuid        = DEFAULT_GETUID,
759                 .features      = "1 queue_if_no_path",
760                 .hwhandler     = "1 alua",
761                 .selector      = DEFAULT_SELECTOR,
762                 .pgpolicy      = GROUP_BY_PRIO,
763                 .pgfailback    = -FAILBACK_IMMEDIATE,
764                 .rr_weight     = RR_WEIGHT_NONE,
765                 .no_path_retry = NO_PATH_RETRY_UNDEF,
766                 .minio         = DEFAULT_MINIO,
767                 .minio_rq      = DEFAULT_MINIO_RQ,
768                 .checker_name  = TUR,
769                 .prio_name     = PRIO_ALUA,
770                 .prio_args     = NULL,
771         },
772         {
773                 /* IBM RSSM */
774                 .vendor        = "IBM",
775                 .product       = "1820N00",
776                 .getuid        = DEFAULT_GETUID,
777                 .features      = DEFAULT_FEATURES,
778                 .hwhandler     = DEFAULT_HWHANDLER,
779                 .selector      = DEFAULT_SELECTOR,
780                 .pgpolicy      = GROUP_BY_PRIO,
781                 .pgfailback    = -FAILBACK_IMMEDIATE,
782                 .rr_weight     = RR_WEIGHT_NONE,
783                 .no_path_retry = NO_PATH_RETRY_QUEUE,
784                 .minio         = 100,
785                 .minio_rq      = DEFAULT_MINIO_RQ,
786                 .checker_name  = TUR,
787                 .prio_name     = PRIO_ALUA,
788                 .prio_args     = NULL,
789         },
790         {
791                 /* IBM XIV Storage System */
792                 .vendor        = "IBM",
793                 .product       = "2810XIV",
794                 .getuid        = DEFAULT_GETUID,
795                 .features      = "1 queue_if_no_path",
796                 .hwhandler     = DEFAULT_HWHANDLER,
797                 .selector      = DEFAULT_SELECTOR,
798                 .pgpolicy      = MULTIBUS,
799                 .pgfailback    = 15,
800                 .rr_weight     = RR_WEIGHT_NONE,
801                 .no_path_retry = NO_PATH_RETRY_UNDEF,
802                 .minio         = 15,
803                 .minio_rq      = DEFAULT_MINIO_RQ,
804                 .checker_name  = TUR,
805                 .prio_name     = DEFAULT_PRIO,
806                 .prio_args     = NULL,
807         },
808         /*
809          * IBM Power Virtual SCSI Devices
810          *
811          * Maintainer : Brian King, IBM
812          * Mail : brking@linux.vnet.ibm.com
813          */
814         {
815                 /* AIX VDASD */
816                 .vendor        = "AIX",
817                 .product       = "VDASD",
818                 .getuid        = DEFAULT_GETUID,
819                 .features      = DEFAULT_FEATURES,
820                 .hwhandler     = DEFAULT_HWHANDLER,
821                 .selector      = DEFAULT_SELECTOR,
822                 .pgpolicy      = MULTIBUS,
823                 .pgfailback    = -FAILBACK_IMMEDIATE,
824                 .rr_weight     = RR_WEIGHT_NONE,
825                 .no_path_retry = (300 / DEFAULT_CHECKINT),
826                 .minio         = DEFAULT_MINIO,
827                 .minio_rq      = DEFAULT_MINIO_RQ,
828                 .checker_name  = DIRECTIO,
829                 .prio_name     = DEFAULT_PRIO,
830                 .prio_args     = NULL,
831         },
832         {
833                 /* IBM 3303      NVDISK */
834                 .vendor        = "IBM",
835                 .product       = "3303      NVDISK",
836                 .getuid        = DEFAULT_GETUID,
837                 .features      = DEFAULT_FEATURES,
838                 .hwhandler     = DEFAULT_HWHANDLER,
839                 .selector      = DEFAULT_SELECTOR,
840                 .pgpolicy      = FAILOVER,
841                 .pgfailback    = -FAILBACK_IMMEDIATE,
842                 .rr_weight     = RR_WEIGHT_NONE,
843                 .no_path_retry = (300 / DEFAULT_CHECKINT),
844                 .minio         = DEFAULT_MINIO,
845                 .minio_rq      = DEFAULT_MINIO_RQ,
846                 .checker_name  = TUR,
847                 .prio_name     = DEFAULT_PRIO,
848                 .prio_args     = NULL,
849         },
850         {
851                 /* AIX NVDISK */
852                 .vendor        = "AIX",
853                 .product       = "NVDISK",
854                 .getuid        = DEFAULT_GETUID,
855                 .features      = DEFAULT_FEATURES,
856                 .hwhandler     = "1 alua",
857                 .selector      = DEFAULT_SELECTOR,
858                 .pgpolicy      = GROUP_BY_PRIO,
859                 .pgfailback    = -FAILBACK_IMMEDIATE,
860                 .rr_weight     = RR_WEIGHT_NONE,
861                 .no_path_retry = (300 / DEFAULT_CHECKINT),
862                 .minio         = DEFAULT_MINIO,
863                 .minio_rq      = DEFAULT_MINIO_RQ,
864                 .checker_name  = TUR,
865                 .prio_name     = PRIO_ALUA,
866                 .prio_args     = NULL,
867         },
868         {
869                 /* DELL MD3000 */
870                 .vendor        = "DELL",
871                 .product       = "MD3000",
872                 .getuid        = DEFAULT_GETUID,
873                 .features      = "2 pg_init_retries 50",
874                 .hwhandler     = "1 rdac",
875                 .selector      = DEFAULT_SELECTOR,
876                 .pgpolicy      = GROUP_BY_PRIO,
877                 .pgfailback    = -FAILBACK_IMMEDIATE,
878                 .rr_weight     = RR_WEIGHT_NONE,
879                 .no_path_retry = 15,
880                 .minio         = DEFAULT_MINIO,
881                 .minio_rq      = DEFAULT_MINIO_RQ,
882                 .checker_name  = RDAC,
883                 .prio_name     = PRIO_RDAC,
884                 .prio_args     = NULL,
885         },
886         {
887                 /* DELL MD3000i */
888                 .vendor        = "DELL",
889                 .product       = "MD3000i",
890                 .getuid        = DEFAULT_GETUID,
891                 .features      = "2 pg_init_retries 50",
892                 .hwhandler     = "1 rdac",
893                 .selector      = DEFAULT_SELECTOR,
894                 .pgpolicy      = GROUP_BY_PRIO,
895                 .pgfailback    = -FAILBACK_IMMEDIATE,
896                 .rr_weight     = RR_WEIGHT_NONE,
897                 .no_path_retry = 15,
898                 .minio         = DEFAULT_MINIO,
899                 .minio_rq      = DEFAULT_MINIO_RQ,
900                 .checker_name  = RDAC,
901                 .prio_name     = PRIO_RDAC,
902                 .prio_args     = NULL,
903         },
904         {
905                 /* DELL MD32xx */
906                 .vendor        = "DELL",
907                 .product       = "MD32xx",
908                 .getuid        = DEFAULT_GETUID,
909                 .features      = "2 pg_init_retries 50",
910                 .hwhandler     = "1 rdac",
911                 .selector      = DEFAULT_SELECTOR,
912                 .pgpolicy      = GROUP_BY_PRIO,
913                 .pgfailback    = -FAILBACK_IMMEDIATE,
914                 .rr_weight     = RR_WEIGHT_NONE,
915                 .no_path_retry = 15,
916                 .minio         = DEFAULT_MINIO,
917                 .minio_rq      = DEFAULT_MINIO_RQ,
918                 .checker_name  = RDAC,
919                 .prio_name     = PRIO_RDAC,
920                 .prio_args     = NULL,
921         },
922         {
923                 /* DELL MD32xxi */
924                 .vendor        = "DELL",
925                 .product       = "MD32xxi",
926                 .getuid        = DEFAULT_GETUID,
927                 .features      = "2 pg_init_retries 50",
928                 .hwhandler     = "1 rdac",
929                 .selector      = DEFAULT_SELECTOR,
930                 .pgpolicy      = GROUP_BY_PRIO,
931                 .pgfailback    = -FAILBACK_IMMEDIATE,
932                 .rr_weight     = RR_WEIGHT_NONE,
933                 .no_path_retry = 15,
934                 .minio         = DEFAULT_MINIO,
935                 .minio_rq      = DEFAULT_MINIO_RQ,
936                 .checker_name  = RDAC,
937                 .prio_name     = PRIO_RDAC,
938                 .prio_args     = NULL,
939         },
940         /*
941          * NETAPP controller family
942          *
943          * Maintainer : Dave Wysochanski
944          * Mail : davidw@netapp.com
945          */
946         {
947                 .vendor        = "NETAPP",
948                 .product       = "LUN.*",
949                 .getuid        = DEFAULT_GETUID,
950                 .features      = "1 queue_if_no_path",
951                 .hwhandler     = DEFAULT_HWHANDLER,
952                 .selector      = DEFAULT_SELECTOR,
953                 .pgpolicy      = GROUP_BY_PRIO,
954                 .pgfailback    = -FAILBACK_IMMEDIATE,
955                 .rr_weight     = RR_WEIGHT_NONE,
956                 .no_path_retry = NO_PATH_RETRY_UNDEF,
957                 .minio         = 128,
958                 .checker_name  = DIRECTIO,
959                 .prio_name     = PRIO_ONTAP,
960                 .prio_args     = NULL,
961         },
962         /*
963          * NEXENTA/COMSTAR controller family
964          *
965          * Maintainer : Yacine Kheddache
966          * Mail : yacine@alyseo.com
967          */
968         {
969                 .vendor        = "NEXENTA",
970                 .product       = "COMSTAR",
971                 .getuid        = DEFAULT_GETUID,
972                 .features      = "1 queue_if_no_path",
973                 .hwhandler     = DEFAULT_HWHANDLER,
974                 .selector      = DEFAULT_SELECTOR,
975                 .pgpolicy      = GROUP_BY_SERIAL,
976                 .pgfailback    = -FAILBACK_IMMEDIATE,
977                 .rr_weight     = RR_WEIGHT_NONE,
978                 .no_path_retry = 30,
979                 .minio         = 128,
980                 .checker_name  = DIRECTIO,
981                 .prio_name     = DEFAULT_PRIO,
982                 .prio_args     = NULL,
983         },
984         /*
985          * IBM NSeries (NETAPP) controller family
986          *
987          * Maintainer : Dave Wysochanski
988          * Mail : davidw@netapp.com
989          */
990         {
991                 .vendor        = "IBM",
992                 .product       = "Nseries.*",
993                 .getuid        = DEFAULT_GETUID,
994                 .features      = "1 queue_if_no_path",
995                 .hwhandler     = DEFAULT_HWHANDLER,
996                 .selector      = DEFAULT_SELECTOR,
997                 .pgpolicy      = GROUP_BY_PRIO,
998                 .pgfailback    = -FAILBACK_IMMEDIATE,
999                 .rr_weight     = RR_WEIGHT_NONE,
1000                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1001                 .minio         = 128,
1002                 .checker_name  = DIRECTIO,
1003                 .prio_name     = PRIO_ONTAP,
1004                 .prio_args     = NULL,
1005         },
1006         /*
1007          * Pillar Data controller family
1008          *
1009          * Maintainer : Srinivasan Ramani
1010          * Mail : sramani@pillardata.com
1011          */
1012         {
1013                 .vendor        = "Pillar",
1014                 .product       = "Axiom.*",
1015                 .getuid        = DEFAULT_GETUID,
1016                 .features      = DEFAULT_FEATURES,
1017                 .hwhandler     = DEFAULT_HWHANDLER,
1018                 .selector      = DEFAULT_SELECTOR,
1019                 .pgpolicy      = GROUP_BY_PRIO,
1020                 .pgfailback    = FAILBACK_UNDEF,
1021                 .rr_weight     = RR_WEIGHT_NONE,
1022                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1023                 .minio         = DEFAULT_MINIO,
1024                 .minio_rq      = DEFAULT_MINIO_RQ,
1025                 .checker_name  = TUR,
1026                 .prio_name     = PRIO_ALUA,
1027                 .prio_args     = NULL,
1028         },
1029
1030         /*
1031          * SGI arrays
1032          *
1033          * Maintainer : Christophe Varoqui
1034          * Mail : christophe.varoqui@opensvc.com
1035          */
1036         {
1037                 .vendor        = "SGI",
1038                 .product       = "TP9[13]00",
1039                 .getuid        = DEFAULT_GETUID,
1040                 .features      = DEFAULT_FEATURES,
1041                 .hwhandler     = DEFAULT_HWHANDLER,
1042                 .selector      = DEFAULT_SELECTOR,
1043                 .pgpolicy      = MULTIBUS,
1044                 .pgfailback    = FAILBACK_UNDEF,
1045                 .rr_weight     = RR_WEIGHT_NONE,
1046                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1047                 .minio         = DEFAULT_MINIO,
1048                 .minio_rq      = DEFAULT_MINIO_RQ,
1049                 .checker_name  = DIRECTIO,
1050                 .prio_name     = DEFAULT_PRIO,
1051                 .prio_args     = NULL,
1052         },
1053         {
1054                 .vendor        = "SGI",
1055                 .product       = "TP9[45]00",
1056                 .getuid        = DEFAULT_GETUID,
1057                 .features      = DEFAULT_FEATURES,
1058                 .hwhandler     = "1 rdac",
1059                 .selector      = DEFAULT_SELECTOR,
1060                 .pgpolicy      = GROUP_BY_PRIO,
1061                 .pgfailback    = -FAILBACK_IMMEDIATE,
1062                 .rr_weight     = RR_WEIGHT_NONE,
1063                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1064                 .minio         = DEFAULT_MINIO,
1065                 .minio_rq      = DEFAULT_MINIO_RQ,
1066                 .checker_name  = RDAC,
1067                 .prio_name     = PRIO_RDAC,
1068                 .prio_args     = NULL,
1069         },
1070         {
1071                 .vendor        = "SGI",
1072                 .product       = "IS.*",
1073                 .getuid        = DEFAULT_GETUID,
1074                 .features      = "2 pg_init_retries 50",
1075                 .hwhandler     = "1 rdac",
1076                 .selector      = DEFAULT_SELECTOR,
1077                 .pgpolicy      = GROUP_BY_PRIO,
1078                 .pgfailback    = -FAILBACK_IMMEDIATE,
1079                 .rr_weight     = RR_WEIGHT_NONE,
1080                 .no_path_retry = 15,
1081                 .minio         = DEFAULT_MINIO,
1082                 .minio_rq      = DEFAULT_MINIO_RQ,
1083                 .checker_name  = RDAC,
1084                 .prio_name     = PRIO_RDAC,
1085                 .prio_args     = NULL,
1086         },
1087         /* NEC Storage M Series */
1088         {
1089                 .vendor        = "NEC",
1090                 .product       = "DISK ARRAY",
1091                 .getuid        = DEFAULT_GETUID,
1092                 .features      = DEFAULT_FEATURES,
1093                 .hwhandler     = "1 alua",
1094                 .selector      = DEFAULT_SELECTOR,
1095                 .pgpolicy      = GROUP_BY_PRIO,
1096                 .pgfailback    = -FAILBACK_IMMEDIATE,
1097                 .rr_weight     = RR_WEIGHT_NONE,
1098                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1099                 .minio         = DEFAULT_MINIO,
1100                 .minio_rq      = DEFAULT_MINIO_RQ,
1101                 .checker_name  = TUR,
1102                 .prio_name     = PRIO_ALUA,
1103                 .prio_args     = NULL,
1104         },
1105         /*
1106          * STK arrays
1107          *
1108          * Maintainer : Christophe Varoqui
1109          * Mail : christophe.varoqui@opensvc.com
1110          */
1111         {
1112                 .vendor        = "STK",
1113                 .product       = "OPENstorage D280",
1114                 .getuid        = DEFAULT_GETUID,
1115                 .features      = DEFAULT_FEATURES,
1116                 .hwhandler     = "1 rdac",
1117                 .selector      = DEFAULT_SELECTOR,
1118                 .pgpolicy      = GROUP_BY_PRIO,
1119                 .pgfailback    = -FAILBACK_IMMEDIATE,
1120                 .rr_weight     = RR_WEIGHT_NONE,
1121                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1122                 .minio         = DEFAULT_MINIO,
1123                 .minio_rq      = DEFAULT_MINIO_RQ,
1124                 .checker_name  = TUR,
1125                 .prio_name     = PRIO_RDAC,
1126                 .prio_args     = NULL,
1127         },
1128         /*
1129          * SUN arrays
1130          *
1131          * Maintainer : Christophe Varoqui
1132          * Mail : christophe.varoqui@opensvc.com
1133          */
1134         {
1135                 .vendor        = "SUN",
1136                 .product       = "(StorEdge 3510|T4)",
1137                 .getuid        = DEFAULT_GETUID,
1138                 .features      = DEFAULT_FEATURES,
1139                 .hwhandler     = DEFAULT_HWHANDLER,
1140                 .selector      = DEFAULT_SELECTOR,
1141                 .pgpolicy      = MULTIBUS,
1142                 .pgfailback    = FAILBACK_UNDEF,
1143                 .rr_weight     = RR_WEIGHT_NONE,
1144                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1145                 .minio         = DEFAULT_MINIO,
1146                 .minio_rq      = DEFAULT_MINIO_RQ,
1147                 .checker_name  = DIRECTIO,
1148                 .prio_name     = DEFAULT_PRIO,
1149                 .prio_args     = NULL,
1150         },
1151         {
1152                 .vendor        = "EUROLOGC",
1153                 .product       = "FC2502",
1154                 .getuid        ="/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
1155                 .features      = DEFAULT_FEATURES,
1156                 .hwhandler     = DEFAULT_HWHANDLER,
1157                 .selector      = DEFAULT_SELECTOR,
1158                 .pgpolicy      = GROUP_BY_PRIO,
1159                 .pgfailback    = FAILBACK_UNDEF,
1160                 .rr_weight     = RR_WEIGHT_NONE,
1161                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1162                 .minio         = DEFAULT_MINIO,
1163                 .minio_rq      = DEFAULT_MINIO_RQ,
1164                 .checker_name  = DEFAULT_CHECKER,
1165                 .prio_name     = DEFAULT_PRIO,
1166                 .prio_args     = NULL,
1167         },
1168         /*
1169          * Pivot3 RAIGE
1170          *
1171          * Maintainer : Bart Brooks, Pivot3
1172          * Mail : bartb@pivot3.com
1173          */
1174         {
1175                 .vendor        = "PIVOT3",
1176                 .product       = "RAIGE VOLUME",
1177                 .getuid        = "/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
1178                 .features      = "1 queue_if_no_path",
1179                 .hwhandler     = DEFAULT_HWHANDLER,
1180                 .selector      = DEFAULT_SELECTOR,
1181                 .pgpolicy      = MULTIBUS,
1182                 .pgfailback    = FAILBACK_UNDEF,
1183                 .rr_weight     = RR_WEIGHT_NONE,
1184                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1185                 .minio         = 100,
1186                 .checker_name  = TUR,
1187                 .prio_name     = DEFAULT_PRIO,
1188                 .prio_args     = NULL,
1189         },
1190         {
1191                 .vendor        = "SUN",
1192                 .product       = "CSM200_R",
1193                 .getuid        = DEFAULT_GETUID,
1194                 .features      = DEFAULT_FEATURES,
1195                 .hwhandler     = "1 rdac",
1196                 .selector      = DEFAULT_SELECTOR,
1197                 .pgpolicy      = GROUP_BY_PRIO,
1198                 .pgfailback    = -FAILBACK_IMMEDIATE,
1199                 .rr_weight     = RR_WEIGHT_NONE,
1200                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1201                 .minio         = DEFAULT_MINIO,
1202                 .minio_rq      = DEFAULT_MINIO_RQ,
1203                 .checker_name  = RDAC,
1204                 .prio_name     = PRIO_RDAC,
1205                 .prio_args     = NULL,
1206         },
1207         /* SUN/LSI 2510, 2540, 2530, 2540 */
1208         {
1209                 .vendor        = "SUN",
1210                 .product       = "LCSM100_[IEFS]",
1211                 .getuid        = DEFAULT_GETUID,
1212                 .features      = DEFAULT_FEATURES,
1213                 .hwhandler     = "1 rdac",
1214                 .selector      = DEFAULT_SELECTOR,
1215                 .pgpolicy      = GROUP_BY_PRIO,
1216                 .pgfailback    = -FAILBACK_IMMEDIATE,
1217                 .rr_weight     = RR_WEIGHT_NONE,
1218                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1219                 .minio         = DEFAULT_MINIO,
1220                 .minio_rq      = DEFAULT_MINIO_RQ,
1221                 .checker_name  = RDAC,
1222                 .prio_name     = PRIO_RDAC,
1223                 .prio_args     = NULL,
1224         },
1225         /* LSI/Engenio/NetApp E-Series RDAC storage */
1226         {
1227                 .vendor        = "(LSI|ENGENIO)",
1228                 .product       = "INF-01-00",
1229                 .getuid        = DEFAULT_GETUID,
1230                 .features      = "2 pg_init_retries 50",
1231                 .hwhandler     = "1 rdac",
1232                 .selector      = DEFAULT_SELECTOR,
1233                 .pgpolicy      = GROUP_BY_PRIO,
1234                 .pgfailback    = -FAILBACK_IMMEDIATE,
1235                 .rr_weight     = RR_WEIGHT_NONE,
1236                 .no_path_retry = 15,
1237                 .minio         = DEFAULT_MINIO,
1238                 .minio_rq      = DEFAULT_MINIO_RQ,
1239                 .checker_name  = RDAC,
1240                 .prio_name     = PRIO_RDAC,
1241                 .prio_args     = NULL,
1242         },
1243         {
1244                 .vendor        = "STK",
1245                 .product       = "FLEXLINE 380",
1246                 .bl_product    = "Universal Xport",
1247                 .getuid        = DEFAULT_GETUID,
1248                 .features      = DEFAULT_FEATURES,
1249                 .hwhandler     = "1 rdac",
1250                 .selector      = DEFAULT_SELECTOR,
1251                 .pgpolicy      = GROUP_BY_PRIO,
1252                 .pgfailback    = -FAILBACK_IMMEDIATE,
1253                 .rr_weight     = RR_WEIGHT_NONE,
1254                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1255                 .minio         = DEFAULT_MINIO,
1256                 .minio_rq      = DEFAULT_MINIO_RQ,
1257                 .checker_name  = RDAC,
1258                 .prio_name     = PRIO_RDAC,
1259                 .prio_args     = NULL,
1260         },
1261         /*
1262          * EOL
1263          */
1264         {
1265                 .vendor        = NULL,
1266                 .product       = NULL,
1267                 .getuid        = NULL,
1268                 .features      = NULL,
1269                 .hwhandler     = NULL,
1270                 .selector      = NULL,
1271                 .pgpolicy      = 0,
1272                 .pgfailback    = 0,
1273                 .rr_weight     = 0,
1274                 .no_path_retry = 0,
1275                 .minio         = 0,
1276                 .minio_rq      = 0,
1277                 .checker_name  = NULL,
1278                 .prio_name     = NULL,
1279                 .prio_args     = NULL,
1280         },
1281 };
1282
1283 extern int
1284 setup_default_hwtable (vector hw)
1285 {
1286         int r = 0;
1287         struct hwentry * hwe = default_hw;
1288
1289         while (hwe->vendor) {
1290                 r += store_hwe(hw, hwe);
1291                 hwe++;
1292         }
1293         return r;
1294 }