multipath-tools: update scsi_id arguments
[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                 .checker_name  = TUR,
39                 .prio_name     = DEFAULT_PRIO,
40         },
41         /*
42          * Apple controller family
43          *
44          * Maintainer : Shyam Sundar
45          * Mail : g.shyamsundar@yahoo.co.in
46          */
47         {
48                 .vendor        = "APPLE*",
49                 .product       = "Xserve RAID ",
50                 .getuid        = DEFAULT_GETUID,
51                 .features      = DEFAULT_FEATURES,
52                 .hwhandler     = DEFAULT_HWHANDLER,
53                 .selector      = DEFAULT_SELECTOR,
54                 .pgpolicy      = MULTIBUS,
55                 .pgfailback    = FAILBACK_UNDEF,
56                 .rr_weight     = RR_WEIGHT_NONE,
57                 .no_path_retry = NO_PATH_RETRY_UNDEF,
58                 .minio         = DEFAULT_MINIO,
59                 .checker_name  = DEFAULT_CHECKER,
60                 .prio_name     = DEFAULT_PRIO,
61         },
62         /*
63          * StorageWorks controller family
64          *
65          * Maintainer : Christophe Varoqui
66          * Mail : christophe.varoqui@free.fr
67          */
68         {
69                 .vendor        = "3PARdata",
70                 .product       = "VV",
71                 .getuid        = DEFAULT_GETUID,
72                 .features      = DEFAULT_FEATURES,
73                 .hwhandler     = DEFAULT_HWHANDLER,
74                 .selector      = DEFAULT_SELECTOR,
75                 .pgpolicy      = MULTIBUS,
76                 .pgfailback    = FAILBACK_UNDEF,
77                 .rr_weight     = RR_WEIGHT_NONE,
78                 .no_path_retry = NO_PATH_RETRY_UNDEF,
79                 .minio         = DEFAULT_MINIO,
80                 .checker_name  = DEFAULT_CHECKER,
81                 .prio_name     = DEFAULT_PRIO,
82         },
83         {
84                 .vendor        = "DEC",
85                 .product       = "HSG80",
86                 .getuid        = DEFAULT_GETUID,
87                 .features      = "1 queue_if_no_path",
88                 .hwhandler     = "1 hp-sw",
89                 .selector      = DEFAULT_SELECTOR,
90                 .pgpolicy      = GROUP_BY_PRIO,
91                 .pgfailback    = FAILBACK_UNDEF,
92                 .rr_weight     = RR_WEIGHT_NONE,
93                 .no_path_retry = NO_PATH_RETRY_UNDEF,
94                 .minio         = DEFAULT_MINIO,
95                 .checker_name  = HP_SW,
96                 .prio_name     = PRIO_HP_SW,
97         },
98         {
99                 .vendor        = "HP",
100                 .product       = "A6189A",
101                 .getuid        = DEFAULT_GETUID,
102                 .features      = DEFAULT_FEATURES,
103                 .hwhandler     = DEFAULT_HWHANDLER,
104                 .selector      = DEFAULT_SELECTOR,
105                 .pgpolicy      = MULTIBUS,
106                 .pgfailback    = FAILBACK_UNDEF,
107                 .rr_weight     = RR_WEIGHT_NONE,
108                 .no_path_retry = 12,
109                 .minio         = DEFAULT_MINIO,
110                 .checker_name  = DIRECTIO,
111                 .prio_name     = DEFAULT_PRIO,
112         },
113         {
114                 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
115                 .vendor        = "(COMPAQ|HP)",
116                 .product       = "(MSA|HSV)1.0.*",
117                 .getuid        = DEFAULT_GETUID,
118                 .features      = "1 queue_if_no_path",
119                 .hwhandler     = "1 hp-sw",
120                 .selector      = DEFAULT_SELECTOR,
121                 .pgpolicy      = GROUP_BY_PRIO,
122                 .pgfailback    = FAILBACK_UNDEF,
123                 .rr_weight     = RR_WEIGHT_NONE,
124                 .no_path_retry = 12,
125                 .minio         = DEFAULT_MINIO,
126                 .checker_name  = HP_SW,
127                 .prio_name     = PRIO_HP_SW,
128         },
129         {
130                 /* MSA 1000/1500 with new firmware */
131                 .vendor        = "HP",
132                 .product       = "MSA VOLUME",
133                 .getuid        = DEFAULT_GETUID,
134                 .features      = DEFAULT_FEATURES,
135                 .hwhandler     = DEFAULT_HWHANDLER,
136                 .selector      = DEFAULT_SELECTOR,
137                 .pgpolicy      = GROUP_BY_PRIO,
138                 .pgfailback    = -FAILBACK_IMMEDIATE,
139                 .rr_weight     = RR_WEIGHT_NONE,
140                 .no_path_retry = 12,
141                 .minio         = DEFAULT_MINIO,
142                 .checker_name  = TUR,
143                 .prio_name     = PRIO_ALUA,
144         },
145         {
146                 .vendor        = "HP",
147                 .product       = "MSA2000s*",
148                 .getuid        = "/sbin/cciss_id %n",
149                 .features      = DEFAULT_FEATURES,
150                 .hwhandler     = DEFAULT_HWHANDLER,
151                 .selector      = DEFAULT_SELECTOR,
152                 .pgpolicy      = GROUP_BY_PRIO,
153                 .pgfailback    = -FAILBACK_IMMEDIATE,
154                 .rr_weight     = RR_WEIGHT_NONE,
155                 .no_path_retry = 12,
156                 .minio         = DEFAULT_MINIO,
157                 .checker_name  = TUR,
158                 .prio_name     = DEFAULT_PRIO,
159         },
160         {
161                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
162                 .vendor        = "(COMPAQ|HP)",
163                 .product       = "HSV1[01]1|HSV2[01]0|HSV300",
164                 .getuid        = DEFAULT_GETUID,
165                 .features      = DEFAULT_FEATURES,
166                 .hwhandler     = DEFAULT_HWHANDLER,
167                 .selector      = DEFAULT_SELECTOR,
168                 .pgpolicy      = GROUP_BY_PRIO,
169                 .pgfailback    = -FAILBACK_IMMEDIATE,
170                 .rr_weight     = RR_WEIGHT_NONE,
171                 .no_path_retry = 12,
172                 .minio         = DEFAULT_MINIO,
173                 .checker_name  = TUR,
174                 .prio_name     = PRIO_ALUA,
175         },
176         {
177                 /* HP MSA2000 product family */
178                 .vendor        = "HP",
179                 .product       = "MSA2[02]12*",
180                 .getuid        = DEFAULT_GETUID,
181                 .features      = DEFAULT_FEATURES,
182                 .hwhandler     = DEFAULT_HWHANDLER,
183                 .selector      = DEFAULT_SELECTOR,
184                 .pgpolicy      = MULTIBUS,
185                 .pgfailback    = -FAILBACK_IMMEDIATE,
186                 .rr_weight     = RR_WEIGHT_NONE,
187                 .no_path_retry = 12,
188                 .minio         = DEFAULT_MINIO,
189                 .checker_name  = TUR,
190                 .prio_name     = DEFAULT_PRIO,
191         },
192         {
193                 /* HP Smart Array */
194                 .vendor        = "HP",
195                 .product       = "LOGICAL VOLUME.*",
196                 .getuid        = DEFAULT_GETUID,
197                 .features      = DEFAULT_FEATURES,
198                 .hwhandler     = DEFAULT_HWHANDLER,
199                 .selector      = DEFAULT_SELECTOR,
200                 .pgpolicy      = MULTIBUS,
201                 .pgfailback    = FAILBACK_UNDEF,
202                 .rr_weight     = RR_WEIGHT_NONE,
203                 .no_path_retry = 12,
204                 .minio         = DEFAULT_MINIO,
205                 .checker_name  = CCISS_TUR,
206                 .prio_name     = DEFAULT_PRIO,
207         },
208         /*
209          * DDN controller family
210          *
211          * Maintainer : Christophe Varoqui
212          * Mail : christophe.varoqui@free.fr
213          */
214         {
215                 .vendor        = "DDN",
216                 .product       = "SAN DataDirector",
217                 .getuid        = DEFAULT_GETUID,
218                 .features      = DEFAULT_FEATURES,
219                 .hwhandler     = DEFAULT_HWHANDLER,
220                 .selector      = DEFAULT_SELECTOR,
221                 .pgpolicy      = MULTIBUS,
222                 .pgfailback    = FAILBACK_UNDEF,
223                 .rr_weight     = RR_WEIGHT_NONE,
224                 .no_path_retry = NO_PATH_RETRY_UNDEF,
225                 .minio         = DEFAULT_MINIO,
226                 .checker_name  = DIRECTIO,
227                 .prio_name     = DEFAULT_PRIO,
228         },
229         /*
230          * EMC / Clariion controller family
231          *
232          * Maintainer : Edward Goggin, EMC
233          * Mail : egoggin@emc.com
234          */
235         {
236                 .vendor        = "EMC",
237                 .product       = "SYMMETRIX",
238                 .getuid        = "/lib/udev/scsi_id --page=pre-spc3-83 --whitelisted --device=/dev/%n",
239                 .features      = DEFAULT_FEATURES,
240                 .hwhandler     = DEFAULT_HWHANDLER,
241                 .selector      = DEFAULT_SELECTOR,
242                 .pgpolicy      = MULTIBUS,
243                 .pgfailback    = FAILBACK_UNDEF,
244                 .rr_weight     = RR_WEIGHT_NONE,
245                 .no_path_retry = NO_PATH_RETRY_UNDEF,
246                 .minio         = DEFAULT_MINIO,
247                 .checker_name  = DIRECTIO,
248                 .prio_name     = DEFAULT_PRIO,
249         },
250         {
251                 .vendor        = "DGC",
252                 .product       = ".*",
253                 .bl_product    = "LUNZ",
254                 .getuid        = DEFAULT_GETUID,
255                 .features      = "1 queue_if_no_path",
256                 .hwhandler     = "1 emc",
257                 .selector      = DEFAULT_SELECTOR,
258                 .pgpolicy      = GROUP_BY_PRIO,
259                 .pgfailback    = -FAILBACK_IMMEDIATE,
260                 .rr_weight     = RR_WEIGHT_NONE,
261                 .no_path_retry = (300 / DEFAULT_CHECKINT),
262                 .minio         = DEFAULT_MINIO,
263                 .checker_name  = EMC_CLARIION,
264                 .prio_name     = PRIO_EMC,
265         },
266         /*
267          * Fujitsu controller family
268          *
269          * Maintainer : Christophe Varoqui
270          * Mail : christophe.varoqui@free.fr
271          */
272         {
273                 .vendor        = "FSC",
274                 .product       = "CentricStor",
275                 .getuid        = DEFAULT_GETUID,
276                 .features      = DEFAULT_FEATURES,
277                 .hwhandler     = DEFAULT_HWHANDLER,
278                 .selector      = DEFAULT_SELECTOR,
279                 .pgpolicy      = GROUP_BY_SERIAL,
280                 .pgfailback    = FAILBACK_UNDEF,
281                 .rr_weight     = RR_WEIGHT_NONE,
282                 .no_path_retry = NO_PATH_RETRY_UNDEF,
283                 .minio         = DEFAULT_MINIO,
284                 .checker_name  = DIRECTIO,
285                 .prio_name     = DEFAULT_PRIO,
286         },
287         /*
288          * Hitachi controller family
289          *
290          * Maintainer : Matthias Rudolph
291          * Mail : matthias.rudolph@hds.com
292          */
293         {
294                 .vendor        = "(HITACHI|HP)",
295                 .product       = "OPEN-.*",
296                 .getuid        = DEFAULT_GETUID,
297                 .features      = "1 queue_if_no_path",
298                 .hwhandler     = DEFAULT_HWHANDLER,
299                 .selector      = DEFAULT_SELECTOR,
300                 .pgpolicy      = MULTIBUS,
301                 .pgfailback    = FAILBACK_UNDEF,
302                 .rr_weight     = RR_WEIGHT_NONE,
303                 .no_path_retry = NO_PATH_RETRY_UNDEF,
304                 .minio         = DEFAULT_MINIO,
305                 .checker_name  = TUR,
306                 .prio_name     = DEFAULT_PRIO,
307         },
308         {
309                 .vendor        = "HITACHI",
310                 .product       = "DF.*",
311                 .getuid        = DEFAULT_GETUID,
312                 .features      = "1 queue_if_no_path",
313                 .hwhandler     = DEFAULT_HWHANDLER,
314                 .selector      = DEFAULT_SELECTOR,
315                 .pgpolicy      = GROUP_BY_PRIO,
316                 .pgfailback    = -FAILBACK_IMMEDIATE,
317                 .rr_weight     = RR_WEIGHT_NONE,
318                 .no_path_retry = NO_PATH_RETRY_UNDEF,
319                 .minio         = DEFAULT_MINIO,
320                 .checker_name  = TUR,
321                 .prio_name     = PRIO_HDS,
322         },
323         /*
324          * IBM controller family
325          *
326          * Maintainer : Hannes Reinecke, SuSE
327          * Mail : hare@suse.de
328          */
329         {
330                 .vendor        = "IBM",
331                 .product       = "ProFibre 4000R",
332                 .getuid        = DEFAULT_GETUID,
333                 .features      = DEFAULT_FEATURES,
334                 .hwhandler     = DEFAULT_HWHANDLER,
335                 .selector      = DEFAULT_SELECTOR,
336                 .pgpolicy      = MULTIBUS,
337                 .pgfailback    = FAILBACK_UNDEF,
338                 .rr_weight     = RR_WEIGHT_NONE,
339                 .no_path_retry = NO_PATH_RETRY_UNDEF,
340                 .minio         = DEFAULT_MINIO,
341                 .checker_name  = DIRECTIO,
342                 .prio_name     = DEFAULT_PRIO,
343         },
344         {
345                 /* IBM FAStT 1722-600 */
346                 .vendor        = "IBM",
347                 .product       = "1722-600",
348                 .getuid        = DEFAULT_GETUID,
349                 .features      = "1 queue_if_no_path",
350                 .hwhandler     = "1 rdac",
351                 .selector      = DEFAULT_SELECTOR,
352                 .pgpolicy      = GROUP_BY_PRIO,
353                 .pgfailback    = -FAILBACK_IMMEDIATE,
354                 .rr_weight     = RR_WEIGHT_NONE,
355                 .no_path_retry = 300,
356                 .minio         = DEFAULT_MINIO,
357                 .checker_name  = RDAC,
358                 .prio_name     = PRIO_RDAC,
359         },
360         {
361                 /* IBM DS4100 */
362                 .vendor        = "IBM",
363                 .product       = "1724",
364                 .getuid        = DEFAULT_GETUID,
365                 .features      = "1 queue_if_no_path",
366                 .hwhandler     = "1 rdac",
367                 .selector      = DEFAULT_SELECTOR,
368                 .pgpolicy      = GROUP_BY_PRIO,
369                 .pgfailback    = -FAILBACK_IMMEDIATE,
370                 .rr_weight     = RR_WEIGHT_NONE,
371                 .no_path_retry = 300,
372                 .minio         = DEFAULT_MINIO,
373                 .checker_name  = RDAC,
374                 .prio_name     = PRIO_RDAC,
375         },
376         {
377                 /* IBM DS3200 / DS3300 / DS3400 */
378                 .vendor        = "IBM",
379                 .product       = "1726",
380                 .getuid        = DEFAULT_GETUID,
381                 .features      = "1 queue_if_no_path",
382                 .hwhandler     = "1 rdac",
383                 .selector      = DEFAULT_SELECTOR,
384                 .pgpolicy      = GROUP_BY_PRIO,
385                 .pgfailback    = -FAILBACK_IMMEDIATE,
386                 .rr_weight     = RR_WEIGHT_NONE,
387                 .no_path_retry = 300,
388                 .minio         = DEFAULT_MINIO,
389                 .checker_name  = RDAC,
390                 .prio_name     = PRIO_RDAC,
391         },
392         {
393                 /* IBM DS4400 / DS4500 / FAStT700 */
394                 .vendor        = "IBM",
395                 .product       = "1742",
396                 .getuid        = DEFAULT_GETUID,
397                 .features      = DEFAULT_FEATURES,
398                 .hwhandler     = "1 rdac",
399                 .selector      = DEFAULT_SELECTOR,
400                 .pgpolicy      = GROUP_BY_PRIO,
401                 .pgfailback    = -FAILBACK_IMMEDIATE,
402                 .rr_weight     = RR_WEIGHT_NONE,
403                 .no_path_retry = NO_PATH_RETRY_QUEUE,
404                 .minio         = DEFAULT_MINIO,
405                 .checker_name  = RDAC,
406                 .prio_name     = PRIO_RDAC,
407         },
408         {
409             /* IBM DS4700 */
410                 .vendor        = "IBM",
411                 .product       = "1814",
412                 .getuid        = DEFAULT_GETUID,
413                 .features      = DEFAULT_FEATURES,
414                 .hwhandler     = "1 rdac",
415                 .selector      = DEFAULT_SELECTOR,
416                 .pgpolicy      = GROUP_BY_PRIO,
417                 .pgfailback    = -FAILBACK_IMMEDIATE,
418                 .rr_weight     = RR_WEIGHT_NONE,
419                 .no_path_retry = NO_PATH_RETRY_QUEUE,
420                 .minio         = DEFAULT_MINIO,
421                 .checker_name  = RDAC,
422                 .prio_name     = PRIO_RDAC,
423         },
424         {
425             /* IBM DS4800 */
426                 .vendor        = "IBM",
427                 .product       = "1815",
428                 .getuid        = DEFAULT_GETUID,
429                 .features      = DEFAULT_FEATURES,
430                 .hwhandler     = "1 rdac",
431                 .selector      = DEFAULT_SELECTOR,
432                 .pgpolicy      = GROUP_BY_PRIO,
433                 .pgfailback    = -FAILBACK_IMMEDIATE,
434                 .rr_weight     = RR_WEIGHT_NONE,
435                 .no_path_retry = NO_PATH_RETRY_QUEUE,
436                 .minio         = DEFAULT_MINIO,
437                 .checker_name  = RDAC,
438                 .prio_name     = PRIO_RDAC,
439         },
440         {
441             /* IBM DS5000 */
442                 .vendor        = "IBM",
443                 .product       = "1818",
444                 .getuid        = DEFAULT_GETUID,
445                 .features      = DEFAULT_FEATURES,
446                 .hwhandler     = "1 rdac",
447                 .selector      = DEFAULT_SELECTOR,
448                 .pgpolicy      = GROUP_BY_PRIO,
449                 .pgfailback    = -FAILBACK_IMMEDIATE,
450                 .rr_weight     = RR_WEIGHT_NONE,
451                 .no_path_retry = NO_PATH_RETRY_QUEUE,
452                 .minio         = DEFAULT_MINIO,
453                 .checker_name  = RDAC,
454                 .prio_name     = PRIO_RDAC,
455         },
456         {
457                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
458                 .vendor        = "IBM",
459                 .product       = "3526",
460                 .getuid        = DEFAULT_GETUID,
461                 .features      = DEFAULT_FEATURES,
462                 .hwhandler     = "1 rdac",
463                 .selector      = DEFAULT_SELECTOR,
464                 .pgpolicy      = GROUP_BY_PRIO,
465                 .pgfailback    = -FAILBACK_IMMEDIATE,
466                 .rr_weight     = RR_WEIGHT_NONE,
467                 .no_path_retry = NO_PATH_RETRY_QUEUE,
468                 .minio         = DEFAULT_MINIO,
469                 .checker_name  = RDAC,
470                 .prio_name     = PRIO_RDAC,
471         },
472         {
473                 /* IBM DS4200 / FAStT200 */
474                 .vendor        = "IBM",
475                 .product       = "3542",
476                 .getuid        = DEFAULT_GETUID,
477                 .features      = DEFAULT_FEATURES,
478                 .hwhandler     = DEFAULT_HWHANDLER,
479                 .selector      = DEFAULT_SELECTOR,
480                 .pgpolicy      = GROUP_BY_SERIAL,
481                 .pgfailback    = FAILBACK_UNDEF,
482                 .rr_weight     = RR_WEIGHT_NONE,
483                 .no_path_retry = NO_PATH_RETRY_UNDEF,
484                 .minio         = DEFAULT_MINIO,
485                 .checker_name  = TUR,
486                 .prio_name     = DEFAULT_PRIO,
487         },
488         {
489                 /* IBM ESS F20 aka Shark */
490                 .vendor        = "IBM",
491                 .product       = "2105(800|F20)",
492                 .getuid        = DEFAULT_GETUID,
493                 .features      = "1 queue_if_no_path",
494                 .hwhandler     = DEFAULT_HWHANDLER,
495                 .selector      = DEFAULT_SELECTOR,
496                 .pgpolicy      = GROUP_BY_SERIAL,
497                 .pgfailback    = FAILBACK_UNDEF,
498                 .rr_weight     = RR_WEIGHT_NONE,
499                 .no_path_retry = NO_PATH_RETRY_UNDEF,
500                 .minio         = DEFAULT_MINIO,
501                 .checker_name  = TUR,
502                 .prio_name     = DEFAULT_PRIO,
503         },
504         {
505                 /* IBM DS6000 */
506                 .vendor        = "IBM",
507                 .product       = "1750500",
508                 .getuid        = DEFAULT_GETUID,
509                 .features      = "1 queue_if_no_path",
510                 .hwhandler     = DEFAULT_HWHANDLER,
511                 .selector      = DEFAULT_SELECTOR,
512                 .pgpolicy      = GROUP_BY_PRIO,
513                 .pgfailback    = -FAILBACK_IMMEDIATE,
514                 .rr_weight     = RR_WEIGHT_NONE,
515                 .no_path_retry = NO_PATH_RETRY_UNDEF,
516                 .minio         = DEFAULT_MINIO,
517                 .checker_name  = TUR,
518                 .prio_name     = PRIO_ALUA,
519         },
520         {
521                 /* IBM DS8000 */
522                 .vendor        = "IBM",
523                 .product       = "2107900",
524                 .getuid        = DEFAULT_GETUID,
525                 .features      = "1 queue_if_no_path",
526                 .hwhandler     = DEFAULT_HWHANDLER,
527                 .selector      = DEFAULT_SELECTOR,
528                 .pgpolicy      = MULTIBUS,
529                 .pgfailback    = FAILBACK_UNDEF,
530                 .rr_weight     = RR_WEIGHT_NONE,
531                 .no_path_retry = NO_PATH_RETRY_UNDEF,
532                 .minio         = DEFAULT_MINIO,
533                 .checker_name  = TUR,
534                 .prio_name     = DEFAULT_PRIO,
535         },
536         {
537                 /* IBM SAN Volume Controller */
538                 .vendor        = "IBM",
539                 .product       = "2145",
540                 .getuid        = DEFAULT_GETUID,
541                 .features      = "1 queue_if_no_path",
542                 .hwhandler     = DEFAULT_HWHANDLER,
543                 .selector      = DEFAULT_SELECTOR,
544                 .pgpolicy      = GROUP_BY_PRIO,
545                 .pgfailback    = -FAILBACK_IMMEDIATE,
546                 .rr_weight     = RR_WEIGHT_NONE,
547                 .no_path_retry = NO_PATH_RETRY_UNDEF,
548                 .minio         = DEFAULT_MINIO,
549                 .checker_name  = TUR,
550                 .prio_name     = PRIO_ALUA,
551         },
552         {
553                 /* IBM S/390 ECKD DASD */
554                 .vendor        = "IBM",
555                 .product       = "S/390 DASD ECKD",
556                 .bl_product       = "S/390.*",
557                 .getuid        = "/sbin/dasdinfo -u -b %n",
558                 .features      = "1 queue_if_no_path",
559                 .hwhandler     = DEFAULT_HWHANDLER,
560                 .selector      = DEFAULT_SELECTOR,
561                 .pgpolicy      = MULTIBUS,
562                 .pgfailback    = FAILBACK_UNDEF,
563                 .rr_weight     = RR_WEIGHT_NONE,
564                 .no_path_retry = NO_PATH_RETRY_UNDEF,
565                 .minio         = DEFAULT_MINIO,
566                 .checker_name  = DIRECTIO,
567                 .prio_name     = DEFAULT_PRIO,
568         },
569         {
570                 /* IBM S/390 FBA DASD */
571                 .vendor        = "IBM",
572                 .product       = "S/390 DASD FBA",
573                 .bl_product       = "S/390.*",
574                 .getuid        = "/sbin/dasdinfo -u -b %n",
575                 .features      = "1 queue_if_no_path",
576                 .hwhandler     = DEFAULT_HWHANDLER,
577                 .selector      = DEFAULT_SELECTOR,
578                 .pgpolicy      = MULTIBUS,
579                 .pgfailback    = FAILBACK_UNDEF,
580                 .rr_weight     = RR_WEIGHT_NONE,
581                 .no_path_retry = NO_PATH_RETRY_UNDEF,
582                 .minio         = DEFAULT_MINIO,
583                 .checker_name  = DIRECTIO,
584                 .prio_name     = DEFAULT_PRIO,
585         },
586         {
587                 /* IBM IPR */
588                 .vendor        = "IBM",
589                 .product       = "IPR.*",
590                 .getuid        = DEFAULT_GETUID,
591                 .features      = "1 queue_if_no_path",
592                 .hwhandler     = "1 alua",
593                 .selector      = DEFAULT_SELECTOR,
594                 .pgpolicy      = GROUP_BY_PRIO,
595                 .pgfailback    = -FAILBACK_IMMEDIATE,
596                 .rr_weight     = RR_WEIGHT_NONE,
597                 .no_path_retry = NO_PATH_RETRY_UNDEF,
598                 .minio         = DEFAULT_MINIO,
599                 .checker_name  = TUR,
600                 .prio_name     = PRIO_ALUA,
601         },
602         {
603                 /* DELL MD3000 */
604                 .vendor        = "DELL",
605                 .product       = "MD3000",
606                 .getuid        = DEFAULT_GETUID,
607                 .features      = "1 queue_if_no_path",
608                 .hwhandler     = "1 rdac",
609                 .selector      = DEFAULT_SELECTOR,
610                 .pgpolicy      = GROUP_BY_PRIO,
611                 .pgfailback    = -FAILBACK_IMMEDIATE,
612                 .rr_weight     = RR_WEIGHT_NONE,
613                 .minio         = DEFAULT_MINIO,
614                 .checker_name  = RDAC,
615                 .prio_name     = PRIO_RDAC,
616         },
617         {
618                 /* DELL MD3000i */
619                 .vendor        = "DELL",
620                 .product       = "MD3000i",
621                 .getuid        = DEFAULT_GETUID,
622                 .features      = "1 queue_if_no_path",
623                 .hwhandler     = "1 rdac",
624                 .selector      = DEFAULT_SELECTOR,
625                 .pgpolicy      = GROUP_BY_PRIO,
626                 .pgfailback    = -FAILBACK_IMMEDIATE,
627                 .rr_weight     = RR_WEIGHT_NONE,
628                 .minio         = DEFAULT_MINIO,
629                 .checker_name  = RDAC,
630                 .prio_name     = PRIO_RDAC,
631         },
632         /*
633          * NETAPP controller family
634          *
635          * Maintainer : Dave Wysochanski
636          * Mail : davidw@netapp.com
637          */
638         {
639                 .vendor        = "NETAPP",
640                 .product       = "LUN.*",
641                 .getuid        = DEFAULT_GETUID,
642                 .features      = "1 queue_if_no_path",
643                 .hwhandler     = DEFAULT_HWHANDLER,
644                 .selector      = DEFAULT_SELECTOR,
645                 .pgpolicy      = GROUP_BY_PRIO,
646                 .pgfailback    = -FAILBACK_IMMEDIATE,
647                 .rr_weight     = RR_WEIGHT_NONE,
648                 .no_path_retry = NO_PATH_RETRY_UNDEF,
649                 .minio         = 128,
650                 .checker_name  = DIRECTIO,
651                 .prio_name     = PRIO_NETAPP,
652         },
653         /*
654          * IBM NSeries (NETAPP) controller family
655          *
656          * Maintainer : Dave Wysochanski
657          * Mail : davidw@netapp.com
658          */
659         {
660                 .vendor        = "IBM",
661                 .product       = "Nseries.*",
662                 .getuid        = DEFAULT_GETUID,
663                 .features      = "1 queue_if_no_path",
664                 .hwhandler     = DEFAULT_HWHANDLER,
665                 .selector      = DEFAULT_SELECTOR,
666                 .pgpolicy      = GROUP_BY_PRIO,
667                 .pgfailback    = -FAILBACK_IMMEDIATE,
668                 .rr_weight     = RR_WEIGHT_NONE,
669                 .no_path_retry = NO_PATH_RETRY_UNDEF,
670                 .minio         = 128,
671                 .checker_name  = DIRECTIO,
672                 .prio_name     = PRIO_NETAPP,
673         },
674         /*
675          * Pillar Data controller family
676          *
677          * Maintainer : Srinivasan Ramani
678          * Mail : sramani@pillardata.com
679          */
680         {
681                 .vendor        = "Pillar",
682                 .product       = "Axiom.*",
683                 .getuid        = DEFAULT_GETUID,
684                 .features      = DEFAULT_FEATURES,
685                 .hwhandler     = DEFAULT_HWHANDLER,
686                 .selector      = DEFAULT_SELECTOR,
687                 .pgpolicy      = GROUP_BY_PRIO,
688                 .pgfailback    = FAILBACK_UNDEF,
689                 .rr_weight     = RR_WEIGHT_NONE,
690                 .no_path_retry = NO_PATH_RETRY_UNDEF,
691                 .minio         = DEFAULT_MINIO,
692                 .checker_name  = TUR,
693                 .prio_name     = PRIO_ALUA,
694         },
695         /*
696          * SGI arrays
697          *
698          * Maintainer : Christophe Varoqui
699          * Mail : christophe.varoqui@free.fr
700          */
701         {
702                 .vendor        = "SGI",
703                 .product       = "TP9[13]00",
704                 .getuid        = DEFAULT_GETUID,
705                 .features      = DEFAULT_FEATURES,
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                 .checker_name  = DIRECTIO,
714                 .prio_name     = DEFAULT_PRIO,
715         },
716         {
717                 .vendor        = "SGI",
718                 .product       = "TP9[45]00",
719                 .getuid        = DEFAULT_GETUID,
720                 .features      = DEFAULT_FEATURES,
721                 .hwhandler     = "1 rdac",
722                 .selector      = DEFAULT_SELECTOR,
723                 .pgpolicy      = GROUP_BY_PRIO,
724                 .pgfailback    = -FAILBACK_IMMEDIATE,
725                 .rr_weight     = RR_WEIGHT_NONE,
726                 .no_path_retry = NO_PATH_RETRY_QUEUE,
727                 .minio         = DEFAULT_MINIO,
728                 .checker_name  = RDAC,
729                 .prio_name     = PRIO_RDAC,
730         },
731         {
732                 .vendor        = "SGI",
733                 .product       = "IS.*",
734                 .getuid        = DEFAULT_GETUID,
735                 .features      = DEFAULT_FEATURES,
736                 .hwhandler     = "1 rdac",
737                 .selector      = DEFAULT_SELECTOR,
738                 .pgpolicy      = GROUP_BY_PRIO,
739                 .pgfailback    = -FAILBACK_IMMEDIATE,
740                 .rr_weight     = RR_WEIGHT_NONE,
741                 .no_path_retry = NO_PATH_RETRY_QUEUE,
742                 .minio         = DEFAULT_MINIO,
743                 .checker_name  = RDAC,
744                 .prio_name     = PRIO_RDAC,
745         },
746         /*
747          * STK arrays
748          *
749          * Maintainer : Christophe Varoqui
750          * Mail : christophe.varoqui@free.fr
751          */
752         {
753                 .vendor        = "STK",
754                 .product       = "OPENstorage D280",
755                 .getuid        = DEFAULT_GETUID,
756                 .features      = DEFAULT_FEATURES,
757                 .hwhandler     = "1 rdac",
758                 .selector      = DEFAULT_SELECTOR,
759                 .pgpolicy      = GROUP_BY_PRIO,
760                 .pgfailback    = -FAILBACK_IMMEDIATE,
761                 .rr_weight     = RR_WEIGHT_NONE,
762                 .no_path_retry = NO_PATH_RETRY_UNDEF,
763                 .minio         = DEFAULT_MINIO,
764                 .checker_name  = TUR,
765                 .prio_name     = PRIO_RDAC,
766         },
767         /*
768          * SUN arrays
769          *
770          * Maintainer : Christophe Varoqui
771          * Mail : christophe.varoqui@free.fr
772          */
773         {
774                 .vendor        = "SUN",
775                 .product       = "(StorEdge 3510|T4)",
776                 .getuid        = DEFAULT_GETUID,
777                 .features      = DEFAULT_FEATURES,
778                 .hwhandler     = DEFAULT_HWHANDLER,
779                 .selector      = DEFAULT_SELECTOR,
780                 .pgpolicy      = MULTIBUS,
781                 .pgfailback    = FAILBACK_UNDEF,
782                 .rr_weight     = RR_WEIGHT_NONE,
783                 .no_path_retry = NO_PATH_RETRY_UNDEF,
784                 .minio         = DEFAULT_MINIO,
785                 .checker_name  = DIRECTIO,
786                 .prio_name     = DEFAULT_PRIO,
787         },
788         /*
789          * Pivot3 RAIGE
790          *
791          * Maintainer : Bart Brooks, Pivot3
792          * Mail : bartb@pivot3.com
793          */
794         {
795                 .vendor        = "PIVOT3",
796                 .product       = "RAIGE VOLUME",
797                 .getuid        = "/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
798                 .features      = "1 queue_if_no_path",
799                 .hwhandler     = DEFAULT_HWHANDLER,
800                 .selector      = DEFAULT_SELECTOR,
801                 .pgpolicy      = MULTIBUS,
802                 .pgfailback    = FAILBACK_UNDEF,
803                 .rr_weight     = RR_WEIGHT_NONE,
804                 .no_path_retry = NO_PATH_RETRY_UNDEF,
805                 .minio         = 100,
806                 .checker_name  = TUR,
807                 .prio_name     = DEFAULT_PRIO,
808         },
809         {
810                 .vendor        = "SUN",
811                 .product       = "CSM200_R",
812                 .getuid        = DEFAULT_GETUID,
813                 .features      = DEFAULT_FEATURES,
814                 .hwhandler     = "1 rdac",
815                 .selector      = DEFAULT_SELECTOR,
816                 .pgpolicy      = GROUP_BY_PRIO,
817                 .pgfailback    = -FAILBACK_IMMEDIATE,
818                 .rr_weight     = RR_WEIGHT_NONE,
819                 .no_path_retry = NO_PATH_RETRY_QUEUE,
820                 .minio         = DEFAULT_MINIO,
821                 .checker_name  = RDAC,
822                 .prio_name     = PRIO_RDAC,
823         },
824         /* SUN/LSI 2540 */
825         {
826                 .vendor        = "SUN",
827                 .product       = "LCSM100_F",
828                 .getuid        = DEFAULT_GETUID,
829                 .features      = DEFAULT_FEATURES,
830                 .hwhandler     = "1 rdac",
831                 .selector      = DEFAULT_SELECTOR,
832                 .pgpolicy      = GROUP_BY_PRIO,
833                 .pgfailback    = -FAILBACK_IMMEDIATE,
834                 .rr_weight     = RR_WEIGHT_NONE,
835                 .no_path_retry = NO_PATH_RETRY_QUEUE,
836                 .minio         = DEFAULT_MINIO,
837                 .checker_name  = RDAC,
838                 .prio_name     = PRIO_RDAC,
839         },
840         /* LSI Generic rdac storage */
841         {
842                 .vendor        = "(LSI|ENGENIO)",
843                 .product       = "INF-01-00",
844                 .getuid        = DEFAULT_GETUID,
845                 .features      = "2 pg_init_retries 50",
846                 .hwhandler     = "1 rdac",
847                 .selector      = DEFAULT_SELECTOR,
848                 .pgpolicy      = GROUP_BY_PRIO,
849                 .pgfailback    = -FAILBACK_IMMEDIATE,
850                 .rr_weight     = RR_WEIGHT_NONE,
851                 .no_path_retry = 15,
852                 .minio         = DEFAULT_MINIO,
853                 .checker_name  = RDAC,
854                 .prio_name     = PRIO_RDAC,
855         },
856         /*
857          * EOL
858          */
859         {
860                 .vendor        = NULL,
861                 .product       = NULL,
862                 .getuid        = NULL,
863                 .features      = NULL,
864                 .hwhandler     = NULL,
865                 .selector      = NULL,
866                 .pgpolicy      = 0,
867                 .pgfailback    = 0,
868                 .rr_weight     = 0,
869                 .no_path_retry = 0,
870                 .minio         = 0,
871                 .checker_name  = NULL,
872                 .prio_name     = NULL,
873         },
874 };
875
876 extern int
877 setup_default_hwtable (vector hw)
878 {
879         int r = 0;
880         struct hwentry * hwe = default_hw;
881
882         while (hwe->vendor) {
883                 r += store_hwe(hw, hwe);
884                 hwe++;
885         }
886         return r;
887 }