multipath: changes to NetApp's prioritizer
[platform/upstream/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          * DDN controller family
247          *
248          * Maintainer : Christophe Varoqui
249          * Mail : christophe.varoqui@opensvc.com
250          */
251         {
252                 .vendor        = "DDN",
253                 .product       = "SAN DataDirector",
254                 .getuid        = DEFAULT_GETUID,
255                 .features      = DEFAULT_FEATURES,
256                 .hwhandler     = DEFAULT_HWHANDLER,
257                 .selector      = DEFAULT_SELECTOR,
258                 .pgpolicy      = MULTIBUS,
259                 .pgfailback    = FAILBACK_UNDEF,
260                 .rr_weight     = RR_WEIGHT_NONE,
261                 .no_path_retry = NO_PATH_RETRY_UNDEF,
262                 .minio         = DEFAULT_MINIO,
263                 .minio_rq      = DEFAULT_MINIO_RQ,
264                 .checker_name  = DIRECTIO,
265                 .prio_name     = DEFAULT_PRIO,
266                 .prio_args     = NULL,
267         },
268         /*
269          * EMC / Clariion controller family
270          *
271          * Maintainer : Edward Goggin, EMC
272          * Mail : egoggin@emc.com
273          */
274         {
275                 .vendor        = "EMC",
276                 .product       = "SYMMETRIX",
277                 .getuid        = "/lib/udev/scsi_id --page=pre-spc3-83 --whitelisted --device=/dev/%n",
278                 .features      = DEFAULT_FEATURES,
279                 .hwhandler     = DEFAULT_HWHANDLER,
280                 .selector      = DEFAULT_SELECTOR,
281                 .pgpolicy      = MULTIBUS,
282                 .pgfailback    = FAILBACK_UNDEF,
283                 .rr_weight     = RR_WEIGHT_NONE,
284                 .no_path_retry = NO_PATH_RETRY_UNDEF,
285                 .minio         = DEFAULT_MINIO,
286                 .minio_rq      = DEFAULT_MINIO_RQ,
287                 .checker_name  = DIRECTIO,
288                 .prio_name     = DEFAULT_PRIO,
289                 .prio_args     = NULL,
290         },
291         {
292                 .vendor        = "DGC",
293                 .product       = ".*",
294                 .bl_product    = "LUNZ",
295                 .getuid        = DEFAULT_GETUID,
296                 .features      = "1 queue_if_no_path",
297                 .hwhandler     = "1 emc",
298                 .selector      = DEFAULT_SELECTOR,
299                 .pgpolicy      = GROUP_BY_PRIO,
300                 .pgfailback    = -FAILBACK_IMMEDIATE,
301                 .rr_weight     = RR_WEIGHT_NONE,
302                 .no_path_retry = (300 / DEFAULT_CHECKINT),
303                 .minio         = DEFAULT_MINIO,
304                 .minio_rq      = DEFAULT_MINIO_RQ,
305                 .checker_name  = EMC_CLARIION,
306                 .prio_name     = PRIO_EMC,
307                 .prio_args     = NULL,
308         },
309         {
310                 .vendor        = "EMC",
311                 .product       = "Invista",
312                 .bl_product    = "LUNZ",
313                 .getuid        = DEFAULT_GETUID,
314                 .features      = DEFAULT_FEATURES,
315                 .hwhandler     = DEFAULT_HWHANDLER,
316                 .selector      = DEFAULT_SELECTOR,
317                 .pgpolicy      = MULTIBUS,
318                 .pgfailback    = FAILBACK_UNDEF,
319                 .rr_weight     = RR_WEIGHT_NONE,
320                 .no_path_retry = 5,
321                 .minio         = DEFAULT_MINIO,
322                 .minio_rq      = DEFAULT_MINIO_RQ,
323                 .prio_name     = DEFAULT_PRIO,
324                 .prio_args     = NULL,
325         },
326         /*
327          * Fujitsu controller family
328          *
329          * Maintainer : Christophe Varoqui
330          * Mail : christophe.varoqui@opensvc.com
331          */
332         {
333                 .vendor        = "FSC",
334                 .product       = "CentricStor",
335                 .getuid        = DEFAULT_GETUID,
336                 .features      = DEFAULT_FEATURES,
337                 .hwhandler     = DEFAULT_HWHANDLER,
338                 .selector      = DEFAULT_SELECTOR,
339                 .pgpolicy      = GROUP_BY_SERIAL,
340                 .pgfailback    = FAILBACK_UNDEF,
341                 .rr_weight     = RR_WEIGHT_NONE,
342                 .no_path_retry = NO_PATH_RETRY_UNDEF,
343                 .minio         = DEFAULT_MINIO,
344                 .minio_rq      = DEFAULT_MINIO_RQ,
345                 .checker_name  = DIRECTIO,
346                 .prio_name     = DEFAULT_PRIO,
347                 .prio_args     = NULL,
348         },
349         {
350                 .vendor        = "EMC",
351                 .product       = "Invista",
352                 .bl_product    = "LUNZ",
353                 .getuid        = DEFAULT_GETUID,
354                 .features      = DEFAULT_FEATURES,
355                 .hwhandler     = DEFAULT_HWHANDLER,
356                 .selector      = DEFAULT_SELECTOR,
357                 .pgpolicy      = FAILOVER,
358                 .pgfailback    = FAILBACK_UNDEF,
359                 .rr_weight     = RR_WEIGHT_NONE,
360                 .no_path_retry = 5,
361                 .minio         = DEFAULT_MINIO,
362                 .minio_rq      = DEFAULT_MINIO_RQ,
363                 .checker_name  = TUR,
364                 .prio_name     = DEFAULT_PRIO,
365                 .prio_args     = NULL,
366         },
367         /*
368          * Hitachi controller family
369          *
370          * Maintainer : Matthias Rudolph
371          * Mail : matthias.rudolph@hds.com
372          */
373         {
374                 .vendor        = "(HITACHI|HP)",
375                 .product       = "OPEN-.*",
376                 .getuid        = DEFAULT_GETUID,
377                 .features      = DEFAULT_FEATURES,
378                 .hwhandler     = DEFAULT_HWHANDLER,
379                 .selector      = DEFAULT_SELECTOR,
380                 .pgpolicy      = MULTIBUS,
381                 .pgfailback    = FAILBACK_UNDEF,
382                 .rr_weight     = RR_WEIGHT_NONE,
383                 .no_path_retry = NO_PATH_RETRY_UNDEF,
384                 .minio         = DEFAULT_MINIO,
385                 .minio_rq      = DEFAULT_MINIO_RQ,
386                 .checker_name  = TUR,
387                 .prio_name     = DEFAULT_PRIO,
388                 .prio_args     = NULL,
389         },
390         {
391                 .vendor        = "HITACHI",
392                 .product       = "DF.*",
393                 .getuid        = DEFAULT_GETUID,
394                 .features      = "1 queue_if_no_path",
395                 .hwhandler     = DEFAULT_HWHANDLER,
396                 .selector      = DEFAULT_SELECTOR,
397                 .pgpolicy      = GROUP_BY_PRIO,
398                 .pgfailback    = -FAILBACK_IMMEDIATE,
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     = PRIO_HDS,
405                 .prio_args     = NULL,
406         },
407         /*
408          * IBM controller family
409          *
410          * Maintainer : Hannes Reinecke, SuSE
411          * Mail : hare@suse.de
412          */
413         {
414                 .vendor        = "IBM",
415                 .product       = "ProFibre 4000R",
416                 .getuid        = DEFAULT_GETUID,
417                 .features      = DEFAULT_FEATURES,
418                 .hwhandler     = DEFAULT_HWHANDLER,
419                 .selector      = DEFAULT_SELECTOR,
420                 .pgpolicy      = MULTIBUS,
421                 .pgfailback    = FAILBACK_UNDEF,
422                 .rr_weight     = RR_WEIGHT_NONE,
423                 .no_path_retry = NO_PATH_RETRY_UNDEF,
424                 .minio         = DEFAULT_MINIO,
425                 .minio_rq      = DEFAULT_MINIO_RQ,
426                 .checker_name  = DIRECTIO,
427                 .prio_name     = DEFAULT_PRIO,
428                 .prio_args     = NULL,
429         },
430         {
431                 /* IBM FAStT 1722-600 */
432                 .vendor        = "IBM",
433                 .product       = "1722-600",
434                 .getuid        = DEFAULT_GETUID,
435                 .features      = "1 queue_if_no_path",
436                 .hwhandler     = "1 rdac",
437                 .selector      = DEFAULT_SELECTOR,
438                 .pgpolicy      = GROUP_BY_PRIO,
439                 .pgfailback    = -FAILBACK_IMMEDIATE,
440                 .rr_weight     = RR_WEIGHT_NONE,
441                 .no_path_retry = 300,
442                 .minio         = DEFAULT_MINIO,
443                 .minio_rq      = DEFAULT_MINIO_RQ,
444                 .checker_name  = RDAC,
445                 .prio_name     = PRIO_RDAC,
446                 .prio_args     = NULL,
447         },
448         {
449                 /* IBM DS4100 */
450                 .vendor        = "IBM",
451                 .product       = "1724",
452                 .getuid        = DEFAULT_GETUID,
453                 .features      = "1 queue_if_no_path",
454                 .hwhandler     = "1 rdac",
455                 .selector      = DEFAULT_SELECTOR,
456                 .pgpolicy      = GROUP_BY_PRIO,
457                 .pgfailback    = -FAILBACK_IMMEDIATE,
458                 .rr_weight     = RR_WEIGHT_NONE,
459                 .no_path_retry = 300,
460                 .minio         = DEFAULT_MINIO,
461                 .minio_rq      = DEFAULT_MINIO_RQ,
462                 .checker_name  = RDAC,
463                 .prio_name     = PRIO_RDAC,
464                 .prio_args     = NULL,
465         },
466         {
467                 /* IBM DS3200 / DS3300 / DS3400 */
468                 .vendor        = "IBM",
469                 .product       = "1726",
470                 .getuid        = DEFAULT_GETUID,
471                 .features      = "1 queue_if_no_path",
472                 .hwhandler     = "1 rdac",
473                 .selector      = DEFAULT_SELECTOR,
474                 .pgpolicy      = GROUP_BY_PRIO,
475                 .pgfailback    = -FAILBACK_IMMEDIATE,
476                 .rr_weight     = RR_WEIGHT_NONE,
477                 .no_path_retry = 300,
478                 .minio         = DEFAULT_MINIO,
479                 .minio_rq      = DEFAULT_MINIO_RQ,
480                 .checker_name  = RDAC,
481                 .prio_name     = PRIO_RDAC,
482                 .prio_args     = NULL,
483         },
484         {
485                 /* IBM DS4400 / DS4500 / FAStT700 */
486                 .vendor        = "IBM",
487                 .product       = "1742",
488                 .getuid        = DEFAULT_GETUID,
489                 .features      = DEFAULT_FEATURES,
490                 .hwhandler     = "1 rdac",
491                 .selector      = DEFAULT_SELECTOR,
492                 .pgpolicy      = GROUP_BY_PRIO,
493                 .pgfailback    = -FAILBACK_IMMEDIATE,
494                 .rr_weight     = RR_WEIGHT_NONE,
495                 .no_path_retry = NO_PATH_RETRY_QUEUE,
496                 .minio         = DEFAULT_MINIO,
497                 .minio_rq      = DEFAULT_MINIO_RQ,
498                 .checker_name  = RDAC,
499                 .prio_name     = PRIO_RDAC,
500                 .prio_args     = NULL,
501         },
502         {
503                 .vendor        = "IBM",
504                 .product       = "1745|1746",
505                 .getuid        = DEFAULT_GETUID,
506                 .features      = "2 pg_init_retries 50",
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 = 15,
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             /* IBM DS4700 */
521                 .vendor        = "IBM",
522                 .product       = "1814",
523                 .getuid        = DEFAULT_GETUID,
524                 .features      = DEFAULT_FEATURES,
525                 .hwhandler     = "1 rdac",
526                 .selector      = DEFAULT_SELECTOR,
527                 .pgpolicy      = GROUP_BY_PRIO,
528                 .pgfailback    = -FAILBACK_IMMEDIATE,
529                 .rr_weight     = RR_WEIGHT_NONE,
530                 .no_path_retry = NO_PATH_RETRY_QUEUE,
531                 .minio         = DEFAULT_MINIO,
532                 .minio_rq      = DEFAULT_MINIO_RQ,
533                 .checker_name  = RDAC,
534                 .prio_name     = PRIO_RDAC,
535                 .prio_args     = NULL,
536         },
537         {
538             /* IBM DS4800 */
539                 .vendor        = "IBM",
540                 .product       = "1815",
541                 .getuid        = DEFAULT_GETUID,
542                 .features      = DEFAULT_FEATURES,
543                 .hwhandler     = "1 rdac",
544                 .selector      = DEFAULT_SELECTOR,
545                 .pgpolicy      = GROUP_BY_PRIO,
546                 .pgfailback    = -FAILBACK_IMMEDIATE,
547                 .rr_weight     = RR_WEIGHT_NONE,
548                 .no_path_retry = NO_PATH_RETRY_QUEUE,
549                 .minio         = DEFAULT_MINIO,
550                 .minio_rq      = DEFAULT_MINIO_RQ,
551                 .checker_name  = RDAC,
552                 .prio_name     = PRIO_RDAC,
553                 .prio_args     = NULL,
554         },
555         {
556             /* IBM DS5000 */
557                 .vendor        = "IBM",
558                 .product       = "1818",
559                 .getuid        = DEFAULT_GETUID,
560                 .features      = DEFAULT_FEATURES,
561                 .hwhandler     = "1 rdac",
562                 .selector      = DEFAULT_SELECTOR,
563                 .pgpolicy      = GROUP_BY_PRIO,
564                 .pgfailback    = -FAILBACK_IMMEDIATE,
565                 .rr_weight     = RR_WEIGHT_NONE,
566                 .no_path_retry = NO_PATH_RETRY_QUEUE,
567                 .minio         = DEFAULT_MINIO,
568                 .minio_rq      = DEFAULT_MINIO_RQ,
569                 .checker_name  = RDAC,
570                 .prio_name     = PRIO_RDAC,
571                 .prio_args     = NULL,
572         },
573         {
574                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
575                 .vendor        = "IBM",
576                 .product       = "3526",
577                 .getuid        = DEFAULT_GETUID,
578                 .features      = DEFAULT_FEATURES,
579                 .hwhandler     = "1 rdac",
580                 .selector      = DEFAULT_SELECTOR,
581                 .pgpolicy      = GROUP_BY_PRIO,
582                 .pgfailback    = -FAILBACK_IMMEDIATE,
583                 .rr_weight     = RR_WEIGHT_NONE,
584                 .no_path_retry = NO_PATH_RETRY_QUEUE,
585                 .minio         = DEFAULT_MINIO,
586                 .minio_rq      = DEFAULT_MINIO_RQ,
587                 .checker_name  = RDAC,
588                 .prio_name     = PRIO_RDAC,
589                 .prio_args     = NULL,
590         },
591         {
592                 /* IBM DS4200 / FAStT200 */
593                 .vendor        = "IBM",
594                 .product       = "3542",
595                 .getuid        = DEFAULT_GETUID,
596                 .features      = DEFAULT_FEATURES,
597                 .hwhandler     = DEFAULT_HWHANDLER,
598                 .selector      = DEFAULT_SELECTOR,
599                 .pgpolicy      = GROUP_BY_SERIAL,
600                 .pgfailback    = FAILBACK_UNDEF,
601                 .rr_weight     = RR_WEIGHT_NONE,
602                 .no_path_retry = NO_PATH_RETRY_UNDEF,
603                 .minio         = DEFAULT_MINIO,
604                 .minio_rq      = DEFAULT_MINIO_RQ,
605                 .checker_name  = TUR,
606                 .prio_name     = DEFAULT_PRIO,
607                 .prio_args     = NULL,
608         },
609         {
610                 /* IBM ESS F20 aka Shark */
611                 .vendor        = "IBM",
612                 .product       = "2105800",
613                 .getuid        = DEFAULT_GETUID,
614                 .features      = "1 queue_if_no_path",
615                 .hwhandler     = DEFAULT_HWHANDLER,
616                 .selector      = DEFAULT_SELECTOR,
617                 .pgpolicy      = GROUP_BY_SERIAL,
618                 .pgfailback    = FAILBACK_UNDEF,
619                 .rr_weight     = RR_WEIGHT_NONE,
620                 .no_path_retry = NO_PATH_RETRY_UNDEF,
621                 .minio         = DEFAULT_MINIO,
622                 .minio_rq      = DEFAULT_MINIO_RQ,
623                 .checker_name  = TUR,
624                 .prio_name     = DEFAULT_PRIO,
625                 .prio_args     = NULL,
626         },
627         {
628                 /* IBM ESS F20 aka Shark */
629                 .vendor        = "IBM",
630                 .product       = "2105F20",
631                 .getuid        = DEFAULT_GETUID,
632                 .features      = "1 queue_if_no_path",
633                 .hwhandler     = DEFAULT_HWHANDLER,
634                 .selector      = DEFAULT_SELECTOR,
635                 .pgpolicy      = GROUP_BY_SERIAL,
636                 .pgfailback    = FAILBACK_UNDEF,
637                 .rr_weight     = RR_WEIGHT_NONE,
638                 .no_path_retry = NO_PATH_RETRY_UNDEF,
639                 .minio         = DEFAULT_MINIO,
640                 .minio_rq      = DEFAULT_MINIO_RQ,
641                 .checker_name  = TUR,
642                 .prio_name     = DEFAULT_PRIO,
643                 .prio_args     = NULL,
644         },
645         {
646                 /* IBM DS6000 */
647                 .vendor        = "IBM",
648                 .product       = "1750500",
649                 .getuid        = DEFAULT_GETUID,
650                 .features      = "1 queue_if_no_path",
651                 .hwhandler     = DEFAULT_HWHANDLER,
652                 .selector      = DEFAULT_SELECTOR,
653                 .pgpolicy      = GROUP_BY_PRIO,
654                 .pgfailback    = -FAILBACK_IMMEDIATE,
655                 .rr_weight     = RR_WEIGHT_NONE,
656                 .no_path_retry = NO_PATH_RETRY_UNDEF,
657                 .minio         = DEFAULT_MINIO,
658                 .minio_rq      = DEFAULT_MINIO_RQ,
659                 .checker_name  = TUR,
660                 .prio_name     = PRIO_ALUA,
661                 .prio_args     = NULL,
662         },
663         {
664                 /* IBM DS8000 */
665                 .vendor        = "IBM",
666                 .product       = "2107900",
667                 .getuid        = DEFAULT_GETUID,
668                 .features      = "1 queue_if_no_path",
669                 .hwhandler     = DEFAULT_HWHANDLER,
670                 .selector      = DEFAULT_SELECTOR,
671                 .pgpolicy      = MULTIBUS,
672                 .pgfailback    = FAILBACK_UNDEF,
673                 .rr_weight     = RR_WEIGHT_NONE,
674                 .no_path_retry = NO_PATH_RETRY_UNDEF,
675                 .minio         = DEFAULT_MINIO,
676                 .minio_rq      = DEFAULT_MINIO_RQ,
677                 .checker_name  = TUR,
678                 .prio_name     = DEFAULT_PRIO,
679                 .prio_args     = NULL,
680         },
681         {
682                 /* IBM SAN Volume Controller */
683                 .vendor        = "IBM",
684                 .product       = "2145",
685                 .getuid        = DEFAULT_GETUID,
686                 .features      = "1 queue_if_no_path",
687                 .hwhandler     = DEFAULT_HWHANDLER,
688                 .selector      = DEFAULT_SELECTOR,
689                 .pgpolicy      = GROUP_BY_PRIO,
690                 .pgfailback    = -FAILBACK_IMMEDIATE,
691                 .rr_weight     = RR_WEIGHT_NONE,
692                 .no_path_retry = NO_PATH_RETRY_UNDEF,
693                 .minio         = DEFAULT_MINIO,
694                 .minio_rq      = DEFAULT_MINIO_RQ,
695                 .checker_name  = TUR,
696                 .prio_name     = PRIO_ALUA,
697                 .prio_args     = NULL,
698         },
699         {
700                 /* IBM S/390 ECKD DASD */
701                 .vendor        = "IBM",
702                 .product       = "S/390 DASD ECKD",
703                 .bl_product       = "S/390.*",
704                 .getuid        = "/sbin/dasdinfo -u -b %n",
705                 .features      = "1 queue_if_no_path",
706                 .hwhandler     = DEFAULT_HWHANDLER,
707                 .selector      = DEFAULT_SELECTOR,
708                 .pgpolicy      = MULTIBUS,
709                 .pgfailback    = FAILBACK_UNDEF,
710                 .rr_weight     = RR_WEIGHT_NONE,
711                 .no_path_retry = NO_PATH_RETRY_UNDEF,
712                 .minio         = DEFAULT_MINIO,
713                 .minio_rq      = DEFAULT_MINIO_RQ,
714                 .checker_name  = DIRECTIO,
715                 .prio_name     = DEFAULT_PRIO,
716                 .prio_args     = NULL,
717         },
718         {
719                 /* IBM S/390 FBA DASD */
720                 .vendor        = "IBM",
721                 .product       = "S/390 DASD FBA",
722                 .bl_product       = "S/390.*",
723                 .getuid        = "/sbin/dasdinfo -u -b %n",
724                 .features      = "1 queue_if_no_path",
725                 .hwhandler     = DEFAULT_HWHANDLER,
726                 .selector      = DEFAULT_SELECTOR,
727                 .pgpolicy      = MULTIBUS,
728                 .pgfailback    = FAILBACK_UNDEF,
729                 .rr_weight     = RR_WEIGHT_NONE,
730                 .no_path_retry = NO_PATH_RETRY_UNDEF,
731                 .minio         = DEFAULT_MINIO,
732                 .minio_rq      = DEFAULT_MINIO_RQ,
733                 .checker_name  = DIRECTIO,
734                 .prio_name     = DEFAULT_PRIO,
735                 .prio_args     = NULL,
736         },
737         {
738                 /* IBM IPR */
739                 .vendor        = "IBM",
740                 .product       = "IPR.*",
741                 .getuid        = DEFAULT_GETUID,
742                 .features      = "1 queue_if_no_path",
743                 .hwhandler     = "1 alua",
744                 .selector      = DEFAULT_SELECTOR,
745                 .pgpolicy      = GROUP_BY_PRIO,
746                 .pgfailback    = -FAILBACK_IMMEDIATE,
747                 .rr_weight     = RR_WEIGHT_NONE,
748                 .no_path_retry = NO_PATH_RETRY_UNDEF,
749                 .minio         = DEFAULT_MINIO,
750                 .minio_rq      = DEFAULT_MINIO_RQ,
751                 .checker_name  = TUR,
752                 .prio_name     = PRIO_ALUA,
753                 .prio_args     = NULL,
754         },
755         /*
756          * IBM Power Virtual SCSI Devices
757          *
758          * Maintainer : Brian King, IBM
759          * Mail : brking@linux.vnet.ibm.com
760          */
761         {
762                 /* AIX VDASD */
763                 .vendor        = "AIX",
764                 .product       = "VDASD",
765                 .getuid        = DEFAULT_GETUID,
766                 .features      = DEFAULT_FEATURES,
767                 .hwhandler     = DEFAULT_HWHANDLER,
768                 .selector      = DEFAULT_SELECTOR,
769                 .pgpolicy      = MULTIBUS,
770                 .pgfailback    = -FAILBACK_IMMEDIATE,
771                 .rr_weight     = RR_WEIGHT_NONE,
772                 .no_path_retry = (300 / DEFAULT_CHECKINT),
773                 .minio         = DEFAULT_MINIO,
774                 .minio_rq      = DEFAULT_MINIO_RQ,
775                 .checker_name  = DIRECTIO,
776                 .prio_name     = DEFAULT_PRIO,
777                 .prio_args     = NULL,
778         },
779         {
780                 /* IBM 3303      NVDISK */
781                 .vendor        = "IBM",
782                 .product       = "3303      NVDISK",
783                 .getuid        = DEFAULT_GETUID,
784                 .features      = DEFAULT_FEATURES,
785                 .hwhandler     = DEFAULT_HWHANDLER,
786                 .selector      = DEFAULT_SELECTOR,
787                 .pgpolicy      = FAILOVER,
788                 .pgfailback    = -FAILBACK_IMMEDIATE,
789                 .rr_weight     = RR_WEIGHT_NONE,
790                 .no_path_retry = (300 / DEFAULT_CHECKINT),
791                 .minio         = DEFAULT_MINIO,
792                 .minio_rq      = DEFAULT_MINIO_RQ,
793                 .checker_name  = TUR,
794                 .prio_name     = DEFAULT_PRIO,
795                 .prio_args     = NULL,
796         },
797         {
798                 /* AIX NVDISK */
799                 .vendor        = "AIX",
800                 .product       = "NVDISK",
801                 .getuid        = DEFAULT_GETUID,
802                 .features      = DEFAULT_FEATURES,
803                 .hwhandler     = "1 alua",
804                 .selector      = DEFAULT_SELECTOR,
805                 .pgpolicy      = GROUP_BY_PRIO,
806                 .pgfailback    = -FAILBACK_IMMEDIATE,
807                 .rr_weight     = RR_WEIGHT_NONE,
808                 .no_path_retry = (300 / DEFAULT_CHECKINT),
809                 .minio         = DEFAULT_MINIO,
810                 .minio_rq      = DEFAULT_MINIO_RQ,
811                 .checker_name  = TUR,
812                 .prio_name     = PRIO_ALUA,
813                 .prio_args     = NULL,
814         },
815         {
816                 /* DELL MD3000 */
817                 .vendor        = "DELL",
818                 .product       = "MD3000",
819                 .getuid        = DEFAULT_GETUID,
820                 .features      = "2 pg_init_retries 50",
821                 .hwhandler     = "1 rdac",
822                 .selector      = DEFAULT_SELECTOR,
823                 .pgpolicy      = GROUP_BY_PRIO,
824                 .pgfailback    = -FAILBACK_IMMEDIATE,
825                 .rr_weight     = RR_WEIGHT_NONE,
826                 .no_path_retry = 15,
827                 .minio         = DEFAULT_MINIO,
828                 .minio_rq      = DEFAULT_MINIO_RQ,
829                 .checker_name  = RDAC,
830                 .prio_name     = PRIO_RDAC,
831                 .prio_args     = NULL,
832         },
833         {
834                 /* DELL MD3000i */
835                 .vendor        = "DELL",
836                 .product       = "MD3000i",
837                 .getuid        = DEFAULT_GETUID,
838                 .features      = "2 pg_init_retries 50",
839                 .hwhandler     = "1 rdac",
840                 .selector      = DEFAULT_SELECTOR,
841                 .pgpolicy      = GROUP_BY_PRIO,
842                 .pgfailback    = -FAILBACK_IMMEDIATE,
843                 .rr_weight     = RR_WEIGHT_NONE,
844                 .no_path_retry = 15,
845                 .minio         = DEFAULT_MINIO,
846                 .minio_rq      = DEFAULT_MINIO_RQ,
847                 .checker_name  = RDAC,
848                 .prio_name     = PRIO_RDAC,
849                 .prio_args     = NULL,
850         },
851         {
852                 /* DELL MD32xx */
853                 .vendor        = "DELL",
854                 .product       = "MD32xx",
855                 .getuid        = DEFAULT_GETUID,
856                 .features      = "2 pg_init_retries 50",
857                 .hwhandler     = "1 rdac",
858                 .selector      = DEFAULT_SELECTOR,
859                 .pgpolicy      = GROUP_BY_PRIO,
860                 .pgfailback    = -FAILBACK_IMMEDIATE,
861                 .rr_weight     = RR_WEIGHT_NONE,
862                 .no_path_retry = 15,
863                 .minio         = DEFAULT_MINIO,
864                 .minio_rq      = DEFAULT_MINIO_RQ,
865                 .checker_name  = RDAC,
866                 .prio_name     = PRIO_RDAC,
867                 .prio_args     = NULL,
868         },
869         {
870                 /* DELL MD32xxi */
871                 .vendor        = "DELL",
872                 .product       = "MD32xxi",
873                 .getuid        = DEFAULT_GETUID,
874                 .features      = "2 pg_init_retries 50",
875                 .hwhandler     = "1 rdac",
876                 .selector      = DEFAULT_SELECTOR,
877                 .pgpolicy      = GROUP_BY_PRIO,
878                 .pgfailback    = -FAILBACK_IMMEDIATE,
879                 .rr_weight     = RR_WEIGHT_NONE,
880                 .no_path_retry = 15,
881                 .minio         = DEFAULT_MINIO,
882                 .minio_rq      = DEFAULT_MINIO_RQ,
883                 .checker_name  = RDAC,
884                 .prio_name     = PRIO_RDAC,
885                 .prio_args     = NULL,
886         },
887         /*
888          * NETAPP controller family
889          *
890          * Maintainer : Dave Wysochanski
891          * Mail : davidw@netapp.com
892          */
893         {
894                 .vendor        = "NETAPP",
895                 .product       = "LUN.*",
896                 .getuid        = DEFAULT_GETUID,
897                 .features      = "1 queue_if_no_path",
898                 .hwhandler     = DEFAULT_HWHANDLER,
899                 .selector      = DEFAULT_SELECTOR,
900                 .pgpolicy      = GROUP_BY_PRIO,
901                 .pgfailback    = -FAILBACK_IMMEDIATE,
902                 .rr_weight     = RR_WEIGHT_NONE,
903                 .no_path_retry = NO_PATH_RETRY_UNDEF,
904                 .minio         = 128,
905                 .checker_name  = DIRECTIO,
906                 .prio_name     = PRIO_ONTAP,
907                 .prio_args     = NULL,
908         },
909         /*
910          * NEXENTA/COMSTAR controller family
911          *
912          * Maintainer : Yacine Kheddache
913          * Mail : yacine@alyseo.com
914          */
915         {
916                 .vendor        = "NEXENTA",
917                 .product       = "COMSTAR",
918                 .getuid        = DEFAULT_GETUID,
919                 .features      = "1 queue_if_no_path",
920                 .hwhandler     = DEFAULT_HWHANDLER,
921                 .selector      = DEFAULT_SELECTOR,
922                 .pgpolicy      = GROUP_BY_SERIAL,
923                 .pgfailback    = -FAILBACK_IMMEDIATE,
924                 .rr_weight     = RR_WEIGHT_NONE,
925                 .no_path_retry = 30,
926                 .minio         = 128,
927                 .checker_name  = DIRECTIO,
928                 .prio_name     = DEFAULT_PRIO,
929                 .prio_args     = NULL,
930         },
931         /*
932          * IBM NSeries (NETAPP) controller family
933          *
934          * Maintainer : Dave Wysochanski
935          * Mail : davidw@netapp.com
936          */
937         {
938                 .vendor        = "IBM",
939                 .product       = "Nseries.*",
940                 .getuid        = DEFAULT_GETUID,
941                 .features      = "1 queue_if_no_path",
942                 .hwhandler     = DEFAULT_HWHANDLER,
943                 .selector      = DEFAULT_SELECTOR,
944                 .pgpolicy      = GROUP_BY_PRIO,
945                 .pgfailback    = -FAILBACK_IMMEDIATE,
946                 .rr_weight     = RR_WEIGHT_NONE,
947                 .no_path_retry = NO_PATH_RETRY_UNDEF,
948                 .minio         = 128,
949                 .checker_name  = DIRECTIO,
950                 .prio_name     = PRIO_ONTAP,
951                 .prio_args     = NULL,
952         },
953         /*
954          * Pillar Data controller family
955          *
956          * Maintainer : Srinivasan Ramani
957          * Mail : sramani@pillardata.com
958          */
959         {
960                 .vendor        = "Pillar",
961                 .product       = "Axiom.*",
962                 .getuid        = DEFAULT_GETUID,
963                 .features      = DEFAULT_FEATURES,
964                 .hwhandler     = DEFAULT_HWHANDLER,
965                 .selector      = DEFAULT_SELECTOR,
966                 .pgpolicy      = GROUP_BY_PRIO,
967                 .pgfailback    = FAILBACK_UNDEF,
968                 .rr_weight     = RR_WEIGHT_NONE,
969                 .no_path_retry = NO_PATH_RETRY_UNDEF,
970                 .minio         = DEFAULT_MINIO,
971                 .minio_rq      = DEFAULT_MINIO_RQ,
972                 .checker_name  = TUR,
973                 .prio_name     = PRIO_ALUA,
974                 .prio_args     = NULL,
975         },
976
977         /*
978          * SGI arrays
979          *
980          * Maintainer : Christophe Varoqui
981          * Mail : christophe.varoqui@opensvc.com
982          */
983         {
984                 .vendor        = "SGI",
985                 .product       = "TP9[13]00",
986                 .getuid        = DEFAULT_GETUID,
987                 .features      = DEFAULT_FEATURES,
988                 .hwhandler     = DEFAULT_HWHANDLER,
989                 .selector      = DEFAULT_SELECTOR,
990                 .pgpolicy      = MULTIBUS,
991                 .pgfailback    = FAILBACK_UNDEF,
992                 .rr_weight     = RR_WEIGHT_NONE,
993                 .no_path_retry = NO_PATH_RETRY_UNDEF,
994                 .minio         = DEFAULT_MINIO,
995                 .minio_rq      = DEFAULT_MINIO_RQ,
996                 .checker_name  = DIRECTIO,
997                 .prio_name     = DEFAULT_PRIO,
998                 .prio_args     = NULL,
999         },
1000         {
1001                 .vendor        = "SGI",
1002                 .product       = "TP9[45]00",
1003                 .getuid        = DEFAULT_GETUID,
1004                 .features      = DEFAULT_FEATURES,
1005                 .hwhandler     = "1 rdac",
1006                 .selector      = DEFAULT_SELECTOR,
1007                 .pgpolicy      = GROUP_BY_PRIO,
1008                 .pgfailback    = -FAILBACK_IMMEDIATE,
1009                 .rr_weight     = RR_WEIGHT_NONE,
1010                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1011                 .minio         = DEFAULT_MINIO,
1012                 .minio_rq      = DEFAULT_MINIO_RQ,
1013                 .checker_name  = RDAC,
1014                 .prio_name     = PRIO_RDAC,
1015                 .prio_args     = NULL,
1016         },
1017         {
1018                 .vendor        = "SGI",
1019                 .product       = "IS.*",
1020                 .getuid        = DEFAULT_GETUID,
1021                 .features      = "2 pg_init_retries 50",
1022                 .hwhandler     = "1 rdac",
1023                 .selector      = DEFAULT_SELECTOR,
1024                 .pgpolicy      = GROUP_BY_PRIO,
1025                 .pgfailback    = -FAILBACK_IMMEDIATE,
1026                 .rr_weight     = RR_WEIGHT_NONE,
1027                 .no_path_retry = 15,
1028                 .minio         = DEFAULT_MINIO,
1029                 .minio_rq      = DEFAULT_MINIO_RQ,
1030                 .checker_name  = RDAC,
1031                 .prio_name     = PRIO_RDAC,
1032                 .prio_args     = NULL,
1033         },
1034         /* NEC Storage M Series */
1035         {
1036                 .vendor        = "NEC",
1037                 .product       = "DISK ARRAY",
1038                 .getuid        = DEFAULT_GETUID,
1039                 .features      = DEFAULT_FEATURES,
1040                 .hwhandler     = "1 alua",
1041                 .selector      = DEFAULT_SELECTOR,
1042                 .pgpolicy      = GROUP_BY_PRIO,
1043                 .pgfailback    = -FAILBACK_IMMEDIATE,
1044                 .rr_weight     = RR_WEIGHT_NONE,
1045                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1046                 .minio         = DEFAULT_MINIO,
1047                 .minio_rq      = DEFAULT_MINIO_RQ,
1048                 .checker_name  = TUR,
1049                 .prio_name     = PRIO_ALUA,
1050                 .prio_args     = NULL,
1051         },
1052         /*
1053          * STK arrays
1054          *
1055          * Maintainer : Christophe Varoqui
1056          * Mail : christophe.varoqui@opensvc.com
1057          */
1058         {
1059                 .vendor        = "STK",
1060                 .product       = "OPENstorage D280",
1061                 .getuid        = DEFAULT_GETUID,
1062                 .features      = DEFAULT_FEATURES,
1063                 .hwhandler     = "1 rdac",
1064                 .selector      = DEFAULT_SELECTOR,
1065                 .pgpolicy      = GROUP_BY_PRIO,
1066                 .pgfailback    = -FAILBACK_IMMEDIATE,
1067                 .rr_weight     = RR_WEIGHT_NONE,
1068                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1069                 .minio         = DEFAULT_MINIO,
1070                 .minio_rq      = DEFAULT_MINIO_RQ,
1071                 .checker_name  = TUR,
1072                 .prio_name     = PRIO_RDAC,
1073                 .prio_args     = NULL,
1074         },
1075         /*
1076          * SUN arrays
1077          *
1078          * Maintainer : Christophe Varoqui
1079          * Mail : christophe.varoqui@opensvc.com
1080          */
1081         {
1082                 .vendor        = "SUN",
1083                 .product       = "(StorEdge 3510|T4)",
1084                 .getuid        = DEFAULT_GETUID,
1085                 .features      = DEFAULT_FEATURES,
1086                 .hwhandler     = DEFAULT_HWHANDLER,
1087                 .selector      = DEFAULT_SELECTOR,
1088                 .pgpolicy      = MULTIBUS,
1089                 .pgfailback    = FAILBACK_UNDEF,
1090                 .rr_weight     = RR_WEIGHT_NONE,
1091                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1092                 .minio         = DEFAULT_MINIO,
1093                 .minio_rq      = DEFAULT_MINIO_RQ,
1094                 .checker_name  = DIRECTIO,
1095                 .prio_name     = DEFAULT_PRIO,
1096                 .prio_args     = NULL,
1097         },
1098         {
1099                 .vendor        = "EUROLOGC",
1100                 .product       = "FC2502",
1101                 .getuid        ="/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
1102                 .features      = DEFAULT_FEATURES,
1103                 .hwhandler     = DEFAULT_HWHANDLER,
1104                 .selector      = DEFAULT_SELECTOR,
1105                 .pgpolicy      = GROUP_BY_PRIO,
1106                 .pgfailback    = FAILBACK_UNDEF,
1107                 .rr_weight     = RR_WEIGHT_NONE,
1108                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1109                 .minio         = DEFAULT_MINIO,
1110                 .minio_rq      = DEFAULT_MINIO_RQ,
1111                 .checker_name  = DEFAULT_CHECKER,
1112                 .prio_name     = DEFAULT_PRIO,
1113         },
1114         /*
1115          * Pivot3 RAIGE
1116          *
1117          * Maintainer : Bart Brooks, Pivot3
1118          * Mail : bartb@pivot3.com
1119          */
1120         {
1121                 .vendor        = "PIVOT3",
1122                 .product       = "RAIGE VOLUME",
1123                 .getuid        = "/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
1124                 .features      = "1 queue_if_no_path",
1125                 .hwhandler     = DEFAULT_HWHANDLER,
1126                 .selector      = DEFAULT_SELECTOR,
1127                 .pgpolicy      = MULTIBUS,
1128                 .pgfailback    = FAILBACK_UNDEF,
1129                 .rr_weight     = RR_WEIGHT_NONE,
1130                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1131                 .minio         = 100,
1132                 .checker_name  = TUR,
1133                 .prio_name     = DEFAULT_PRIO,
1134                 .prio_args     = NULL,
1135         },
1136         {
1137                 .vendor        = "SUN",
1138                 .product       = "CSM200_R",
1139                 .getuid        = DEFAULT_GETUID,
1140                 .features      = DEFAULT_FEATURES,
1141                 .hwhandler     = "1 rdac",
1142                 .selector      = DEFAULT_SELECTOR,
1143                 .pgpolicy      = GROUP_BY_PRIO,
1144                 .pgfailback    = -FAILBACK_IMMEDIATE,
1145                 .rr_weight     = RR_WEIGHT_NONE,
1146                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1147                 .minio         = DEFAULT_MINIO,
1148                 .minio_rq      = DEFAULT_MINIO_RQ,
1149                 .checker_name  = RDAC,
1150                 .prio_name     = PRIO_RDAC,
1151                 .prio_args     = NULL,
1152         },
1153         /* SUN/LSI 2510, 2540, 2530, 2540 */
1154         {
1155                 .vendor        = "SUN",
1156                 .product       = "LCSM100_[IEFS]",
1157                 .getuid        = DEFAULT_GETUID,
1158                 .features      = DEFAULT_FEATURES,
1159                 .hwhandler     = "1 rdac",
1160                 .selector      = DEFAULT_SELECTOR,
1161                 .pgpolicy      = GROUP_BY_PRIO,
1162                 .pgfailback    = -FAILBACK_IMMEDIATE,
1163                 .rr_weight     = RR_WEIGHT_NONE,
1164                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1165                 .minio         = DEFAULT_MINIO,
1166                 .minio_rq      = DEFAULT_MINIO_RQ,
1167                 .checker_name  = RDAC,
1168                 .prio_name     = PRIO_RDAC,
1169                 .prio_args     = NULL,
1170         },
1171         /* LSI Generic rdac storage */
1172         {
1173                 .vendor        = "(LSI|ENGENIO)",
1174                 .product       = "INF-01-00",
1175                 .getuid        = DEFAULT_GETUID,
1176                 .features      = "2 pg_init_retries 50",
1177                 .hwhandler     = "1 rdac",
1178                 .selector      = DEFAULT_SELECTOR,
1179                 .pgpolicy      = GROUP_BY_PRIO,
1180                 .pgfailback    = -FAILBACK_IMMEDIATE,
1181                 .rr_weight     = RR_WEIGHT_NONE,
1182                 .no_path_retry = 15,
1183                 .minio         = DEFAULT_MINIO,
1184                 .minio_rq      = DEFAULT_MINIO_RQ,
1185                 .checker_name  = RDAC,
1186                 .prio_name     = PRIO_RDAC,
1187                 .prio_args     = NULL,
1188         },
1189         {
1190                 .vendor        = "STK",
1191                 .product       = "FLEXLINE 380",
1192                 .bl_product    = "Universal Xport",
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         /*
1208          * EOL
1209          */
1210         {
1211                 .vendor        = NULL,
1212                 .product       = NULL,
1213                 .getuid        = NULL,
1214                 .features      = NULL,
1215                 .hwhandler     = NULL,
1216                 .selector      = NULL,
1217                 .pgpolicy      = 0,
1218                 .pgfailback    = 0,
1219                 .rr_weight     = 0,
1220                 .no_path_retry = 0,
1221                 .minio         = 0,
1222                 .minio_rq      = 0,
1223                 .checker_name  = NULL,
1224                 .prio_name     = NULL,
1225                 .prio_args     = NULL,
1226         },
1227 };
1228
1229 extern int
1230 setup_default_hwtable (vector hw)
1231 {
1232         int r = 0;
1233         struct hwentry * hwe = default_hw;
1234
1235         while (hwe->vendor) {
1236                 r += store_hwe(hw, hwe);
1237                 hwe++;
1238         }
1239         return r;
1240 }