Mail address change
[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@opensvc.com
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         = 100,
126                 .checker_name  = HP_SW,
127                 .prio_name     = PRIO_HP_SW,
128         },
129         {
130                 /* MSA 1000/1500 with new firmware */
131                 .vendor        = "(COMPAQ|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         = 100,
142                 .checker_name  = TUR,
143                 .prio_name     = PRIO_ALUA,
144         },
145         {
146                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
147                 .vendor        = "(COMPAQ|HP)",
148                 .product       = "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0",
149                 .getuid        = DEFAULT_GETUID,
150                 .features      = DEFAULT_FEATURES,
151                 .hwhandler     = DEFAULT_HWHANDLER,
152                 .selector      = DEFAULT_SELECTOR,
153                 .pgpolicy      = GROUP_BY_PRIO,
154                 .pgfailback    = -FAILBACK_IMMEDIATE,
155                 .rr_weight     = RR_WEIGHT_NONE,
156                 .no_path_retry = 12,
157                 .minio         = 100,
158                 .checker_name  = TUR,
159                 .prio_name     = PRIO_ALUA,
160         },
161         {
162                 /* HP MSA2000 product family with old firmware */
163                 .vendor        = "HP",
164                 .product       = "MSA2[02]12fc|MSA2012i",
165                 .getuid        = DEFAULT_GETUID,
166                 .features      = DEFAULT_FEATURES,
167                 .hwhandler     = DEFAULT_HWHANDLER,
168                 .selector      = DEFAULT_SELECTOR,
169                 .pgpolicy      = MULTIBUS,
170                 .pgfailback    = -FAILBACK_IMMEDIATE,
171                 .rr_weight     = RR_WEIGHT_NONE,
172                 .no_path_retry = 18,
173                 .minio         = 100,
174                 .checker_name  = TUR,
175                 .prio_name     = DEFAULT_PRIO,
176         },
177         {
178                 /* HP MSA2000 product family with new firmware */
179                 .vendor        = "HP",
180                 .product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
181                 .getuid        = DEFAULT_GETUID,
182                 .features      = DEFAULT_FEATURES,
183                 .hwhandler     = DEFAULT_HWHANDLER,
184                 .selector      = DEFAULT_SELECTOR,
185                 .pgpolicy      = GROUP_BY_PRIO,
186                 .pgfailback    = -FAILBACK_IMMEDIATE,
187                 .rr_weight     = RR_WEIGHT_NONE,
188                 .no_path_retry = 18,
189                 .minio         = 100,
190                 .checker_name  = TUR,
191                 .prio_name     = PRIO_ALUA,
192         },
193
194         {
195                 /* HP SVSP */
196                 .vendor        = "HP",
197                 .product       = "HSVX700",
198                 .getuid        = DEFAULT_GETUID,
199                 .features      = DEFAULT_FEATURES,
200                 .hwhandler     = "1 alua",
201                 .selector      = DEFAULT_SELECTOR,
202                 .pgpolicy      = GROUP_BY_PRIO,
203                 .pgfailback    = -FAILBACK_IMMEDIATE,
204                 .rr_weight     = RR_WEIGHT_NONE,
205                 .no_path_retry = 12,
206                 .minio         = 100,
207                 .checker_name  = TUR,
208                 .prio_name     = PRIO_ALUA,
209         },
210
211         {
212                 /* HP Smart Array */
213                 .vendor        = "HP",
214                 .product       = "LOGICAL VOLUME.*",
215                 .getuid        = DEFAULT_GETUID,
216                 .features      = DEFAULT_FEATURES,
217                 .hwhandler     = DEFAULT_HWHANDLER,
218                 .selector      = DEFAULT_SELECTOR,
219                 .pgpolicy      = MULTIBUS,
220                 .pgfailback    = FAILBACK_UNDEF,
221                 .rr_weight     = RR_WEIGHT_NONE,
222                 .no_path_retry = 12,
223                 .minio         = DEFAULT_MINIO,
224                 .checker_name  = CCISS_TUR,
225                 .prio_name     = DEFAULT_PRIO,
226         },
227         /*
228          * DDN controller family
229          *
230          * Maintainer : Christophe Varoqui
231          * Mail : christophe.varoqui@opensvc.com
232          */
233         {
234                 .vendor        = "DDN",
235                 .product       = "SAN DataDirector",
236                 .getuid        = DEFAULT_GETUID,
237                 .features      = DEFAULT_FEATURES,
238                 .hwhandler     = DEFAULT_HWHANDLER,
239                 .selector      = DEFAULT_SELECTOR,
240                 .pgpolicy      = MULTIBUS,
241                 .pgfailback    = FAILBACK_UNDEF,
242                 .rr_weight     = RR_WEIGHT_NONE,
243                 .no_path_retry = NO_PATH_RETRY_UNDEF,
244                 .minio         = DEFAULT_MINIO,
245                 .checker_name  = DIRECTIO,
246                 .prio_name     = DEFAULT_PRIO,
247         },
248         /*
249          * EMC / Clariion controller family
250          *
251          * Maintainer : Edward Goggin, EMC
252          * Mail : egoggin@emc.com
253          */
254         {
255                 .vendor        = "EMC",
256                 .product       = "SYMMETRIX",
257                 .getuid        = "/lib/udev/scsi_id --page=pre-spc3-83 --whitelisted --device=/dev/%n",
258                 .features      = DEFAULT_FEATURES,
259                 .hwhandler     = DEFAULT_HWHANDLER,
260                 .selector      = DEFAULT_SELECTOR,
261                 .pgpolicy      = MULTIBUS,
262                 .pgfailback    = FAILBACK_UNDEF,
263                 .rr_weight     = RR_WEIGHT_NONE,
264                 .no_path_retry = NO_PATH_RETRY_UNDEF,
265                 .minio         = DEFAULT_MINIO,
266                 .checker_name  = DIRECTIO,
267                 .prio_name     = DEFAULT_PRIO,
268         },
269         {
270                 .vendor        = "DGC",
271                 .product       = ".*",
272                 .bl_product    = "LUNZ",
273                 .getuid        = DEFAULT_GETUID,
274                 .features      = "1 queue_if_no_path",
275                 .hwhandler     = "1 emc",
276                 .selector      = DEFAULT_SELECTOR,
277                 .pgpolicy      = GROUP_BY_PRIO,
278                 .pgfailback    = -FAILBACK_IMMEDIATE,
279                 .rr_weight     = RR_WEIGHT_NONE,
280                 .no_path_retry = (300 / DEFAULT_CHECKINT),
281                 .minio         = DEFAULT_MINIO,
282                 .checker_name  = EMC_CLARIION,
283                 .prio_name     = PRIO_EMC,
284         },
285         /*
286          * Fujitsu controller family
287          *
288          * Maintainer : Christophe Varoqui
289          * Mail : christophe.varoqui@opensvc.com
290          */
291         {
292                 .vendor        = "FSC",
293                 .product       = "CentricStor",
294                 .getuid        = DEFAULT_GETUID,
295                 .features      = DEFAULT_FEATURES,
296                 .hwhandler     = DEFAULT_HWHANDLER,
297                 .selector      = DEFAULT_SELECTOR,
298                 .pgpolicy      = GROUP_BY_SERIAL,
299                 .pgfailback    = FAILBACK_UNDEF,
300                 .rr_weight     = RR_WEIGHT_NONE,
301                 .no_path_retry = NO_PATH_RETRY_UNDEF,
302                 .minio         = DEFAULT_MINIO,
303                 .checker_name  = DIRECTIO,
304                 .prio_name     = DEFAULT_PRIO,
305         },
306         {
307                 .vendor        = "EMC",
308                 .product       = "Invista",
309                 .bl_product    = "LUNZ",
310                 .getuid        = DEFAULT_GETUID,
311                 .features      = DEFAULT_FEATURES,
312                 .hwhandler     = DEFAULT_HWHANDLER,
313                 .selector      = DEFAULT_SELECTOR,
314                 .pgpolicy      = FAILOVER,
315                 .pgfailback    = FAILBACK_UNDEF,
316                 .rr_weight     = RR_WEIGHT_NONE,
317                 .no_path_retry = 5,
318                 .minio         = DEFAULT_MINIO,
319                 .checker_name  = TUR,
320                 .prio_name     = DEFAULT_PRIO,
321         },
322         /*
323          * Hitachi controller family
324          *
325          * Maintainer : Matthias Rudolph
326          * Mail : matthias.rudolph@hds.com
327          */
328         {
329                 .vendor        = "(HITACHI|HP)",
330                 .product       = "OPEN-.*",
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 = NO_PATH_RETRY_UNDEF,
339                 .minio         = DEFAULT_MINIO,
340                 .checker_name  = TUR,
341                 .prio_name     = DEFAULT_PRIO,
342         },
343         {
344                 .vendor        = "HITACHI",
345                 .product       = "DF.*",
346                 .getuid        = DEFAULT_GETUID,
347                 .features      = "1 queue_if_no_path",
348                 .hwhandler     = DEFAULT_HWHANDLER,
349                 .selector      = DEFAULT_SELECTOR,
350                 .pgpolicy      = GROUP_BY_PRIO,
351                 .pgfailback    = -FAILBACK_IMMEDIATE,
352                 .rr_weight     = RR_WEIGHT_NONE,
353                 .no_path_retry = NO_PATH_RETRY_UNDEF,
354                 .minio         = DEFAULT_MINIO,
355                 .checker_name  = TUR,
356                 .prio_name     = PRIO_HDS,
357         },
358         /*
359          * IBM controller family
360          *
361          * Maintainer : Hannes Reinecke, SuSE
362          * Mail : hare@suse.de
363          */
364         {
365                 .vendor        = "IBM",
366                 .product       = "ProFibre 4000R",
367                 .getuid        = DEFAULT_GETUID,
368                 .features      = DEFAULT_FEATURES,
369                 .hwhandler     = DEFAULT_HWHANDLER,
370                 .selector      = DEFAULT_SELECTOR,
371                 .pgpolicy      = MULTIBUS,
372                 .pgfailback    = FAILBACK_UNDEF,
373                 .rr_weight     = RR_WEIGHT_NONE,
374                 .no_path_retry = NO_PATH_RETRY_UNDEF,
375                 .minio         = DEFAULT_MINIO,
376                 .checker_name  = DIRECTIO,
377                 .prio_name     = DEFAULT_PRIO,
378         },
379         {
380                 /* IBM FAStT 1722-600 */
381                 .vendor        = "IBM",
382                 .product       = "1722-600",
383                 .getuid        = DEFAULT_GETUID,
384                 .features      = "1 queue_if_no_path",
385                 .hwhandler     = "1 rdac",
386                 .selector      = DEFAULT_SELECTOR,
387                 .pgpolicy      = GROUP_BY_PRIO,
388                 .pgfailback    = -FAILBACK_IMMEDIATE,
389                 .rr_weight     = RR_WEIGHT_NONE,
390                 .no_path_retry = 300,
391                 .minio         = DEFAULT_MINIO,
392                 .checker_name  = RDAC,
393                 .prio_name     = PRIO_RDAC,
394         },
395         {
396                 /* IBM DS4100 */
397                 .vendor        = "IBM",
398                 .product       = "1724",
399                 .getuid        = DEFAULT_GETUID,
400                 .features      = "1 queue_if_no_path",
401                 .hwhandler     = "1 rdac",
402                 .selector      = DEFAULT_SELECTOR,
403                 .pgpolicy      = GROUP_BY_PRIO,
404                 .pgfailback    = -FAILBACK_IMMEDIATE,
405                 .rr_weight     = RR_WEIGHT_NONE,
406                 .no_path_retry = 300,
407                 .minio         = DEFAULT_MINIO,
408                 .checker_name  = RDAC,
409                 .prio_name     = PRIO_RDAC,
410         },
411         {
412                 /* IBM DS3200 / DS3300 / DS3400 */
413                 .vendor        = "IBM",
414                 .product       = "1726",
415                 .getuid        = DEFAULT_GETUID,
416                 .features      = "1 queue_if_no_path",
417                 .hwhandler     = "1 rdac",
418                 .selector      = DEFAULT_SELECTOR,
419                 .pgpolicy      = GROUP_BY_PRIO,
420                 .pgfailback    = -FAILBACK_IMMEDIATE,
421                 .rr_weight     = RR_WEIGHT_NONE,
422                 .no_path_retry = 300,
423                 .minio         = DEFAULT_MINIO,
424                 .checker_name  = RDAC,
425                 .prio_name     = PRIO_RDAC,
426         },
427         {
428                 /* IBM DS4400 / DS4500 / FAStT700 */
429                 .vendor        = "IBM",
430                 .product       = "1742",
431                 .getuid        = DEFAULT_GETUID,
432                 .features      = DEFAULT_FEATURES,
433                 .hwhandler     = "1 rdac",
434                 .selector      = DEFAULT_SELECTOR,
435                 .pgpolicy      = GROUP_BY_PRIO,
436                 .pgfailback    = -FAILBACK_IMMEDIATE,
437                 .rr_weight     = RR_WEIGHT_NONE,
438                 .no_path_retry = NO_PATH_RETRY_QUEUE,
439                 .minio         = DEFAULT_MINIO,
440                 .checker_name  = RDAC,
441                 .prio_name     = PRIO_RDAC,
442         },
443         {
444             /* IBM DS4700 */
445                 .vendor        = "IBM",
446                 .product       = "1814",
447                 .getuid        = DEFAULT_GETUID,
448                 .features      = DEFAULT_FEATURES,
449                 .hwhandler     = "1 rdac",
450                 .selector      = DEFAULT_SELECTOR,
451                 .pgpolicy      = GROUP_BY_PRIO,
452                 .pgfailback    = -FAILBACK_IMMEDIATE,
453                 .rr_weight     = RR_WEIGHT_NONE,
454                 .no_path_retry = NO_PATH_RETRY_QUEUE,
455                 .minio         = DEFAULT_MINIO,
456                 .checker_name  = RDAC,
457                 .prio_name     = PRIO_RDAC,
458         },
459         {
460             /* IBM DS4800 */
461                 .vendor        = "IBM",
462                 .product       = "1815",
463                 .getuid        = DEFAULT_GETUID,
464                 .features      = DEFAULT_FEATURES,
465                 .hwhandler     = "1 rdac",
466                 .selector      = DEFAULT_SELECTOR,
467                 .pgpolicy      = GROUP_BY_PRIO,
468                 .pgfailback    = -FAILBACK_IMMEDIATE,
469                 .rr_weight     = RR_WEIGHT_NONE,
470                 .no_path_retry = NO_PATH_RETRY_QUEUE,
471                 .minio         = DEFAULT_MINIO,
472                 .checker_name  = RDAC,
473                 .prio_name     = PRIO_RDAC,
474         },
475         {
476             /* IBM DS5000 */
477                 .vendor        = "IBM",
478                 .product       = "1818",
479                 .getuid        = DEFAULT_GETUID,
480                 .features      = DEFAULT_FEATURES,
481                 .hwhandler     = "1 rdac",
482                 .selector      = DEFAULT_SELECTOR,
483                 .pgpolicy      = GROUP_BY_PRIO,
484                 .pgfailback    = -FAILBACK_IMMEDIATE,
485                 .rr_weight     = RR_WEIGHT_NONE,
486                 .no_path_retry = NO_PATH_RETRY_QUEUE,
487                 .minio         = DEFAULT_MINIO,
488                 .checker_name  = RDAC,
489                 .prio_name     = PRIO_RDAC,
490         },
491         {
492                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
493                 .vendor        = "IBM",
494                 .product       = "3526",
495                 .getuid        = DEFAULT_GETUID,
496                 .features      = DEFAULT_FEATURES,
497                 .hwhandler     = "1 rdac",
498                 .selector      = DEFAULT_SELECTOR,
499                 .pgpolicy      = GROUP_BY_PRIO,
500                 .pgfailback    = -FAILBACK_IMMEDIATE,
501                 .rr_weight     = RR_WEIGHT_NONE,
502                 .no_path_retry = NO_PATH_RETRY_QUEUE,
503                 .minio         = DEFAULT_MINIO,
504                 .checker_name  = RDAC,
505                 .prio_name     = PRIO_RDAC,
506         },
507         {
508                 /* IBM DS4200 / FAStT200 */
509                 .vendor        = "IBM",
510                 .product       = "3542",
511                 .getuid        = DEFAULT_GETUID,
512                 .features      = DEFAULT_FEATURES,
513                 .hwhandler     = DEFAULT_HWHANDLER,
514                 .selector      = DEFAULT_SELECTOR,
515                 .pgpolicy      = GROUP_BY_SERIAL,
516                 .pgfailback    = FAILBACK_UNDEF,
517                 .rr_weight     = RR_WEIGHT_NONE,
518                 .no_path_retry = NO_PATH_RETRY_UNDEF,
519                 .minio         = DEFAULT_MINIO,
520                 .checker_name  = TUR,
521                 .prio_name     = DEFAULT_PRIO,
522         },
523         {
524                 /* IBM ESS F20 aka Shark */
525                 .vendor        = "IBM",
526                 .product       = "2105800",
527                 .getuid        = DEFAULT_GETUID,
528                 .features      = "1 queue_if_no_path",
529                 .hwhandler     = DEFAULT_HWHANDLER,
530                 .selector      = DEFAULT_SELECTOR,
531                 .pgpolicy      = GROUP_BY_SERIAL,
532                 .pgfailback    = FAILBACK_UNDEF,
533                 .rr_weight     = RR_WEIGHT_NONE,
534                 .no_path_retry = NO_PATH_RETRY_UNDEF,
535                 .minio         = DEFAULT_MINIO,
536                 .checker_name  = TUR,
537                 .prio_name     = DEFAULT_PRIO,
538         },
539         {
540                 /* IBM ESS F20 aka Shark */
541                 .vendor        = "IBM",
542                 .product       = "2105F20",
543                 .getuid        = DEFAULT_GETUID,
544                 .features      = "1 queue_if_no_path",
545                 .hwhandler     = DEFAULT_HWHANDLER,
546                 .selector      = DEFAULT_SELECTOR,
547                 .pgpolicy      = GROUP_BY_SERIAL,
548                 .pgfailback    = FAILBACK_UNDEF,
549                 .rr_weight     = RR_WEIGHT_NONE,
550                 .no_path_retry = NO_PATH_RETRY_UNDEF,
551                 .minio         = DEFAULT_MINIO,
552                 .checker_name  = TUR,
553                 .prio_name     = DEFAULT_PRIO,
554         },
555         {
556                 /* IBM DS6000 */
557                 .vendor        = "IBM",
558                 .product       = "1750500",
559                 .getuid        = DEFAULT_GETUID,
560                 .features      = "1 queue_if_no_path",
561                 .hwhandler     = DEFAULT_HWHANDLER,
562                 .selector      = DEFAULT_SELECTOR,
563                 .pgpolicy      = GROUP_BY_PRIO,
564                 .pgfailback    = -FAILBACK_IMMEDIATE,
565                 .rr_weight     = RR_WEIGHT_NONE,
566                 .no_path_retry = NO_PATH_RETRY_UNDEF,
567                 .minio         = DEFAULT_MINIO,
568                 .checker_name  = TUR,
569                 .prio_name     = PRIO_ALUA,
570         },
571         {
572                 /* IBM DS8000 */
573                 .vendor        = "IBM",
574                 .product       = "2107900",
575                 .getuid        = DEFAULT_GETUID,
576                 .features      = "1 queue_if_no_path",
577                 .hwhandler     = DEFAULT_HWHANDLER,
578                 .selector      = DEFAULT_SELECTOR,
579                 .pgpolicy      = MULTIBUS,
580                 .pgfailback    = FAILBACK_UNDEF,
581                 .rr_weight     = RR_WEIGHT_NONE,
582                 .no_path_retry = NO_PATH_RETRY_UNDEF,
583                 .minio         = DEFAULT_MINIO,
584                 .checker_name  = TUR,
585                 .prio_name     = DEFAULT_PRIO,
586         },
587         {
588                 /* IBM SAN Volume Controller */
589                 .vendor        = "IBM",
590                 .product       = "2145",
591                 .getuid        = DEFAULT_GETUID,
592                 .features      = "1 queue_if_no_path",
593                 .hwhandler     = DEFAULT_HWHANDLER,
594                 .selector      = DEFAULT_SELECTOR,
595                 .pgpolicy      = GROUP_BY_PRIO,
596                 .pgfailback    = -FAILBACK_IMMEDIATE,
597                 .rr_weight     = RR_WEIGHT_NONE,
598                 .no_path_retry = NO_PATH_RETRY_UNDEF,
599                 .minio         = DEFAULT_MINIO,
600                 .checker_name  = TUR,
601                 .prio_name     = PRIO_ALUA,
602         },
603         {
604                 /* IBM S/390 ECKD DASD */
605                 .vendor        = "IBM",
606                 .product       = "S/390 DASD ECKD",
607                 .bl_product       = "S/390.*",
608                 .getuid        = "/sbin/dasdinfo -u -b %n",
609                 .features      = "1 queue_if_no_path",
610                 .hwhandler     = DEFAULT_HWHANDLER,
611                 .selector      = DEFAULT_SELECTOR,
612                 .pgpolicy      = MULTIBUS,
613                 .pgfailback    = FAILBACK_UNDEF,
614                 .rr_weight     = RR_WEIGHT_NONE,
615                 .no_path_retry = NO_PATH_RETRY_UNDEF,
616                 .minio         = DEFAULT_MINIO,
617                 .checker_name  = DIRECTIO,
618                 .prio_name     = DEFAULT_PRIO,
619         },
620         {
621                 /* IBM S/390 FBA DASD */
622                 .vendor        = "IBM",
623                 .product       = "S/390 DASD FBA",
624                 .bl_product       = "S/390.*",
625                 .getuid        = "/sbin/dasdinfo -u -b %n",
626                 .features      = "1 queue_if_no_path",
627                 .hwhandler     = DEFAULT_HWHANDLER,
628                 .selector      = DEFAULT_SELECTOR,
629                 .pgpolicy      = MULTIBUS,
630                 .pgfailback    = FAILBACK_UNDEF,
631                 .rr_weight     = RR_WEIGHT_NONE,
632                 .no_path_retry = NO_PATH_RETRY_UNDEF,
633                 .minio         = DEFAULT_MINIO,
634                 .checker_name  = DIRECTIO,
635                 .prio_name     = DEFAULT_PRIO,
636         },
637         {
638                 /* IBM IPR */
639                 .vendor        = "IBM",
640                 .product       = "IPR.*",
641                 .getuid        = DEFAULT_GETUID,
642                 .features      = "1 queue_if_no_path",
643                 .hwhandler     = "1 alua",
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         = DEFAULT_MINIO,
650                 .checker_name  = TUR,
651                 .prio_name     = PRIO_ALUA,
652         },
653         /*
654          * IBM Power Virtual SCSI Devices
655          *
656          * Maintainer : Brian King, IBM
657          * Mail : brking@linux.vnet.ibm.com
658          */
659         {
660                 /* AIX VDASD */
661                 .vendor        = "AIX",
662                 .product       = "VDASD",
663                 .getuid        = DEFAULT_GETUID,
664                 .features      = DEFAULT_FEATURES,
665                 .hwhandler     = DEFAULT_HWHANDLER,
666                 .selector      = DEFAULT_SELECTOR,
667                 .pgpolicy      = MULTIBUS,
668                 .pgfailback    = -FAILBACK_IMMEDIATE,
669                 .rr_weight     = RR_WEIGHT_NONE,
670                 .no_path_retry = (300 / DEFAULT_CHECKINT),
671                 .minio         = DEFAULT_MINIO,
672                 .checker_name  = DIRECTIO,
673                 .prio_name     = DEFAULT_PRIO,
674         },
675         {
676                 /* DELL MD3000 */
677                 .vendor        = "DELL",
678                 .product       = "MD3000",
679                 .getuid        = DEFAULT_GETUID,
680                 .features      = "1 queue_if_no_path",
681                 .hwhandler     = "1 rdac",
682                 .selector      = DEFAULT_SELECTOR,
683                 .pgpolicy      = GROUP_BY_PRIO,
684                 .pgfailback    = -FAILBACK_IMMEDIATE,
685                 .rr_weight     = RR_WEIGHT_NONE,
686                 .minio         = DEFAULT_MINIO,
687                 .checker_name  = RDAC,
688                 .prio_name     = PRIO_RDAC,
689         },
690         {
691                 /* DELL MD3000i */
692                 .vendor        = "DELL",
693                 .product       = "MD3000i",
694                 .getuid        = DEFAULT_GETUID,
695                 .features      = "1 queue_if_no_path",
696                 .hwhandler     = "1 rdac",
697                 .selector      = DEFAULT_SELECTOR,
698                 .pgpolicy      = GROUP_BY_PRIO,
699                 .pgfailback    = -FAILBACK_IMMEDIATE,
700                 .rr_weight     = RR_WEIGHT_NONE,
701                 .minio         = DEFAULT_MINIO,
702                 .checker_name  = RDAC,
703                 .prio_name     = PRIO_RDAC,
704         },
705         {
706                 /* DELL MD32xx */
707                 .vendor        = "DELL",
708                 .product       = "MD32xx",
709                 .getuid        = DEFAULT_GETUID,
710                 .features      = "2 pg_init_retries 50",
711                 .hwhandler     = "1 rdac",
712                 .selector      = DEFAULT_SELECTOR,
713                 .pgpolicy      = GROUP_BY_PRIO,
714                 .pgfailback    = -FAILBACK_IMMEDIATE,
715                 .rr_weight     = RR_WEIGHT_NONE,
716                 .no_path_retry = 15,
717                 .minio         = DEFAULT_MINIO,
718                 .checker_name  = RDAC,
719                 .prio_name     = PRIO_RDAC,
720         },
721         {
722                 /* DELL MD32xxi */
723                 .vendor        = "DELL",
724                 .product       = "MD32xxi",
725                 .getuid        = DEFAULT_GETUID,
726                 .features      = "2 pg_init_retries 50",
727                 .hwhandler     = "1 rdac",
728                 .selector      = DEFAULT_SELECTOR,
729                 .pgpolicy      = GROUP_BY_PRIO,
730                 .pgfailback    = -FAILBACK_IMMEDIATE,
731                 .rr_weight     = RR_WEIGHT_NONE,
732                 .no_path_retry = 15,
733                 .minio         = DEFAULT_MINIO,
734                 .checker_name  = RDAC,
735                 .prio_name     = PRIO_RDAC,
736         },
737         /*
738          * NETAPP controller family
739          *
740          * Maintainer : Dave Wysochanski
741          * Mail : davidw@netapp.com
742          */
743         {
744                 .vendor        = "NETAPP",
745                 .product       = "LUN.*",
746                 .getuid        = DEFAULT_GETUID,
747                 .features      = "1 queue_if_no_path",
748                 .hwhandler     = DEFAULT_HWHANDLER,
749                 .selector      = DEFAULT_SELECTOR,
750                 .pgpolicy      = GROUP_BY_PRIO,
751                 .pgfailback    = -FAILBACK_IMMEDIATE,
752                 .rr_weight     = RR_WEIGHT_NONE,
753                 .no_path_retry = NO_PATH_RETRY_UNDEF,
754                 .minio         = 128,
755                 .checker_name  = DIRECTIO,
756                 .prio_name     = PRIO_NETAPP,
757         },
758         /*
759          * NEXENTA/COMSTAR controller family
760          *
761          * Maintainer : Yacine Kheddache
762          * Mail : yacine@alyseo.com
763          */
764         {
765                 .vendor        = "NEXENTA",
766                 .product       = "COMSTAR",
767                 .getuid        = DEFAULT_GETUID,
768                 .features      = "1 queue_if_no_path",
769                 .hwhandler     = DEFAULT_HWHANDLER,
770                 .selector      = DEFAULT_SELECTOR,
771                 .pgpolicy      = GROUP_BY_SERIAL,
772                 .pgfailback    = -FAILBACK_IMMEDIATE,
773                 .rr_weight     = RR_WEIGHT_NONE,
774                 .no_path_retry = 30,
775                 .minio         = 128,
776                 .checker_name  = DIRECTIO,
777                 .prio_name     = DEFAULT_PRIO,
778         },
779         /*
780          * IBM NSeries (NETAPP) controller family
781          *
782          * Maintainer : Dave Wysochanski
783          * Mail : davidw@netapp.com
784          */
785         {
786                 .vendor        = "IBM",
787                 .product       = "Nseries.*",
788                 .getuid        = DEFAULT_GETUID,
789                 .features      = "1 queue_if_no_path",
790                 .hwhandler     = DEFAULT_HWHANDLER,
791                 .selector      = DEFAULT_SELECTOR,
792                 .pgpolicy      = GROUP_BY_PRIO,
793                 .pgfailback    = -FAILBACK_IMMEDIATE,
794                 .rr_weight     = RR_WEIGHT_NONE,
795                 .no_path_retry = NO_PATH_RETRY_UNDEF,
796                 .minio         = 128,
797                 .checker_name  = DIRECTIO,
798                 .prio_name     = PRIO_NETAPP,
799         },
800         /*
801          * Pillar Data controller family
802          *
803          * Maintainer : Srinivasan Ramani
804          * Mail : sramani@pillardata.com
805          */
806         {
807                 .vendor        = "Pillar",
808                 .product       = "Axiom.*",
809                 .getuid        = DEFAULT_GETUID,
810                 .features      = DEFAULT_FEATURES,
811                 .hwhandler     = DEFAULT_HWHANDLER,
812                 .selector      = DEFAULT_SELECTOR,
813                 .pgpolicy      = GROUP_BY_PRIO,
814                 .pgfailback    = FAILBACK_UNDEF,
815                 .rr_weight     = RR_WEIGHT_NONE,
816                 .no_path_retry = NO_PATH_RETRY_UNDEF,
817                 .minio         = DEFAULT_MINIO,
818                 .checker_name  = TUR,
819                 .prio_name     = PRIO_ALUA,
820         },
821         /*
822          * SGI arrays
823          *
824          * Maintainer : Christophe Varoqui
825          * Mail : christophe.varoqui@opensvc.com
826          */
827         {
828                 .vendor        = "SGI",
829                 .product       = "TP9[13]00",
830                 .getuid        = DEFAULT_GETUID,
831                 .features      = DEFAULT_FEATURES,
832                 .hwhandler     = DEFAULT_HWHANDLER,
833                 .selector      = DEFAULT_SELECTOR,
834                 .pgpolicy      = MULTIBUS,
835                 .pgfailback    = FAILBACK_UNDEF,
836                 .rr_weight     = RR_WEIGHT_NONE,
837                 .no_path_retry = NO_PATH_RETRY_UNDEF,
838                 .minio         = DEFAULT_MINIO,
839                 .checker_name  = DIRECTIO,
840                 .prio_name     = DEFAULT_PRIO,
841         },
842         {
843                 .vendor        = "SGI",
844                 .product       = "TP9[45]00",
845                 .getuid        = DEFAULT_GETUID,
846                 .features      = DEFAULT_FEATURES,
847                 .hwhandler     = "1 rdac",
848                 .selector      = DEFAULT_SELECTOR,
849                 .pgpolicy      = GROUP_BY_PRIO,
850                 .pgfailback    = -FAILBACK_IMMEDIATE,
851                 .rr_weight     = RR_WEIGHT_NONE,
852                 .no_path_retry = NO_PATH_RETRY_QUEUE,
853                 .minio         = DEFAULT_MINIO,
854                 .checker_name  = RDAC,
855                 .prio_name     = PRIO_RDAC,
856         },
857         {
858                 .vendor        = "SGI",
859                 .product       = "IS.*",
860                 .getuid        = DEFAULT_GETUID,
861                 .features      = DEFAULT_FEATURES,
862                 .hwhandler     = "1 rdac",
863                 .selector      = DEFAULT_SELECTOR,
864                 .pgpolicy      = GROUP_BY_PRIO,
865                 .pgfailback    = -FAILBACK_IMMEDIATE,
866                 .rr_weight     = RR_WEIGHT_NONE,
867                 .no_path_retry = NO_PATH_RETRY_QUEUE,
868                 .minio         = DEFAULT_MINIO,
869                 .checker_name  = RDAC,
870                 .prio_name     = PRIO_RDAC,
871         },
872         /*
873          * STK arrays
874          *
875          * Maintainer : Christophe Varoqui
876          * Mail : christophe.varoqui@opensvc.com
877          */
878         {
879                 .vendor        = "STK",
880                 .product       = "OPENstorage D280",
881                 .getuid        = DEFAULT_GETUID,
882                 .features      = DEFAULT_FEATURES,
883                 .hwhandler     = "1 rdac",
884                 .selector      = DEFAULT_SELECTOR,
885                 .pgpolicy      = GROUP_BY_PRIO,
886                 .pgfailback    = -FAILBACK_IMMEDIATE,
887                 .rr_weight     = RR_WEIGHT_NONE,
888                 .no_path_retry = NO_PATH_RETRY_UNDEF,
889                 .minio         = DEFAULT_MINIO,
890                 .checker_name  = TUR,
891                 .prio_name     = PRIO_RDAC,
892         },
893         /*
894          * SUN arrays
895          *
896          * Maintainer : Christophe Varoqui
897          * Mail : christophe.varoqui@opensvc.com
898          */
899         {
900                 .vendor        = "SUN",
901                 .product       = "(StorEdge 3510|T4)",
902                 .getuid        = DEFAULT_GETUID,
903                 .features      = DEFAULT_FEATURES,
904                 .hwhandler     = DEFAULT_HWHANDLER,
905                 .selector      = DEFAULT_SELECTOR,
906                 .pgpolicy      = MULTIBUS,
907                 .pgfailback    = FAILBACK_UNDEF,
908                 .rr_weight     = RR_WEIGHT_NONE,
909                 .no_path_retry = NO_PATH_RETRY_UNDEF,
910                 .minio         = DEFAULT_MINIO,
911                 .checker_name  = DIRECTIO,
912                 .prio_name     = DEFAULT_PRIO,
913         },
914         /*
915          * Pivot3 RAIGE
916          *
917          * Maintainer : Bart Brooks, Pivot3
918          * Mail : bartb@pivot3.com
919          */
920         {
921                 .vendor        = "PIVOT3",
922                 .product       = "RAIGE VOLUME",
923                 .getuid        = "/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
924                 .features      = "1 queue_if_no_path",
925                 .hwhandler     = DEFAULT_HWHANDLER,
926                 .selector      = DEFAULT_SELECTOR,
927                 .pgpolicy      = MULTIBUS,
928                 .pgfailback    = FAILBACK_UNDEF,
929                 .rr_weight     = RR_WEIGHT_NONE,
930                 .no_path_retry = NO_PATH_RETRY_UNDEF,
931                 .minio         = 100,
932                 .checker_name  = TUR,
933                 .prio_name     = DEFAULT_PRIO,
934         },
935         {
936                 .vendor        = "SUN",
937                 .product       = "CSM200_R",
938                 .getuid        = DEFAULT_GETUID,
939                 .features      = DEFAULT_FEATURES,
940                 .hwhandler     = "1 rdac",
941                 .selector      = DEFAULT_SELECTOR,
942                 .pgpolicy      = GROUP_BY_PRIO,
943                 .pgfailback    = -FAILBACK_IMMEDIATE,
944                 .rr_weight     = RR_WEIGHT_NONE,
945                 .no_path_retry = NO_PATH_RETRY_QUEUE,
946                 .minio         = DEFAULT_MINIO,
947                 .checker_name  = RDAC,
948                 .prio_name     = PRIO_RDAC,
949         },
950         /* SUN/LSI 2510, 2540, 2530, 2540 */
951         {
952                 .vendor        = "SUN",
953                 .product       = "LCSM100_[IEFS]",
954                 .getuid        = DEFAULT_GETUID,
955                 .features      = DEFAULT_FEATURES,
956                 .hwhandler     = "1 rdac",
957                 .selector      = DEFAULT_SELECTOR,
958                 .pgpolicy      = GROUP_BY_PRIO,
959                 .pgfailback    = -FAILBACK_IMMEDIATE,
960                 .rr_weight     = RR_WEIGHT_NONE,
961                 .no_path_retry = NO_PATH_RETRY_QUEUE,
962                 .minio         = DEFAULT_MINIO,
963                 .checker_name  = RDAC,
964                 .prio_name     = PRIO_RDAC,
965         },
966         /* LSI Generic rdac storage */
967         {
968                 .vendor        = "(LSI|ENGENIO)",
969                 .product       = "INF-01-00",
970                 .getuid        = DEFAULT_GETUID,
971                 .features      = "2 pg_init_retries 50",
972                 .hwhandler     = "1 rdac",
973                 .selector      = DEFAULT_SELECTOR,
974                 .pgpolicy      = GROUP_BY_PRIO,
975                 .pgfailback    = -FAILBACK_IMMEDIATE,
976                 .rr_weight     = RR_WEIGHT_NONE,
977                 .no_path_retry = 15,
978                 .minio         = DEFAULT_MINIO,
979                 .checker_name  = RDAC,
980                 .prio_name     = PRIO_RDAC,
981         },
982         /*
983          * EOL
984          */
985         {
986                 .vendor        = NULL,
987                 .product       = NULL,
988                 .getuid        = NULL,
989                 .features      = NULL,
990                 .hwhandler     = NULL,
991                 .selector      = NULL,
992                 .pgpolicy      = 0,
993                 .pgfailback    = 0,
994                 .rr_weight     = 0,
995                 .no_path_retry = 0,
996                 .minio         = 0,
997                 .checker_name  = NULL,
998                 .prio_name     = NULL,
999         },
1000 };
1001
1002 extern int
1003 setup_default_hwtable (vector hw)
1004 {
1005         int r = 0;
1006         struct hwentry * hwe = default_hw;
1007
1008         while (hwe->vendor) {
1009                 r += store_hwe(hw, hwe);
1010                 hwe++;
1011         }
1012         return r;
1013 }