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