multipath_tools: Add IBM Virtual SCSI ALUA device type to hwtable
[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                 .vendor        = "EMC",
287                 .product       = "Invista",
288                 .bl_product    = "LUNZ",
289                 .getuid        = DEFAULT_GETUID,
290                 .features      = DEFAULT_FEATURES,
291                 .hwhandler     = DEFAULT_HWHANDLER,
292                 .selector      = DEFAULT_SELECTOR,
293                 .pgpolicy      = MULTIBUS,
294                 .pgfailback    = FAILBACK_UNDEF,
295                 .rr_weight     = RR_WEIGHT_NONE,
296                 .no_path_retry = 5,
297                 .minio         = DEFAULT_MINIO,
298                 .prio_name     = DEFAULT_PRIO,
299         },
300         /*
301          * Fujitsu controller family
302          *
303          * Maintainer : Christophe Varoqui
304          * Mail : christophe.varoqui@opensvc.com
305          */
306         {
307                 .vendor        = "FSC",
308                 .product       = "CentricStor",
309                 .getuid        = DEFAULT_GETUID,
310                 .features      = DEFAULT_FEATURES,
311                 .hwhandler     = DEFAULT_HWHANDLER,
312                 .selector      = DEFAULT_SELECTOR,
313                 .pgpolicy      = GROUP_BY_SERIAL,
314                 .pgfailback    = FAILBACK_UNDEF,
315                 .rr_weight     = RR_WEIGHT_NONE,
316                 .no_path_retry = NO_PATH_RETRY_UNDEF,
317                 .minio         = DEFAULT_MINIO,
318                 .checker_name  = DIRECTIO,
319                 .prio_name     = DEFAULT_PRIO,
320         },
321         {
322                 .vendor        = "EMC",
323                 .product       = "Invista",
324                 .bl_product    = "LUNZ",
325                 .getuid        = DEFAULT_GETUID,
326                 .features      = DEFAULT_FEATURES,
327                 .hwhandler     = DEFAULT_HWHANDLER,
328                 .selector      = DEFAULT_SELECTOR,
329                 .pgpolicy      = FAILOVER,
330                 .pgfailback    = FAILBACK_UNDEF,
331                 .rr_weight     = RR_WEIGHT_NONE,
332                 .no_path_retry = 5,
333                 .minio         = DEFAULT_MINIO,
334                 .checker_name  = TUR,
335                 .prio_name     = DEFAULT_PRIO,
336         },
337         /*
338          * Hitachi controller family
339          *
340          * Maintainer : Matthias Rudolph
341          * Mail : matthias.rudolph@hds.com
342          */
343         {
344                 .vendor        = "(HITACHI|HP)",
345                 .product       = "OPEN-.*",
346                 .getuid        = DEFAULT_GETUID,
347                 .features      = DEFAULT_FEATURES,
348                 .hwhandler     = DEFAULT_HWHANDLER,
349                 .selector      = DEFAULT_SELECTOR,
350                 .pgpolicy      = MULTIBUS,
351                 .pgfailback    = FAILBACK_UNDEF,
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     = DEFAULT_PRIO,
357         },
358         {
359                 .vendor        = "HITACHI",
360                 .product       = "DF.*",
361                 .getuid        = DEFAULT_GETUID,
362                 .features      = "1 queue_if_no_path",
363                 .hwhandler     = DEFAULT_HWHANDLER,
364                 .selector      = DEFAULT_SELECTOR,
365                 .pgpolicy      = GROUP_BY_PRIO,
366                 .pgfailback    = -FAILBACK_IMMEDIATE,
367                 .rr_weight     = RR_WEIGHT_NONE,
368                 .no_path_retry = NO_PATH_RETRY_UNDEF,
369                 .minio         = DEFAULT_MINIO,
370                 .checker_name  = TUR,
371                 .prio_name     = PRIO_HDS,
372         },
373         /*
374          * IBM controller family
375          *
376          * Maintainer : Hannes Reinecke, SuSE
377          * Mail : hare@suse.de
378          */
379         {
380                 .vendor        = "IBM",
381                 .product       = "ProFibre 4000R",
382                 .getuid        = DEFAULT_GETUID,
383                 .features      = DEFAULT_FEATURES,
384                 .hwhandler     = DEFAULT_HWHANDLER,
385                 .selector      = DEFAULT_SELECTOR,
386                 .pgpolicy      = MULTIBUS,
387                 .pgfailback    = FAILBACK_UNDEF,
388                 .rr_weight     = RR_WEIGHT_NONE,
389                 .no_path_retry = NO_PATH_RETRY_UNDEF,
390                 .minio         = DEFAULT_MINIO,
391                 .checker_name  = DIRECTIO,
392                 .prio_name     = DEFAULT_PRIO,
393         },
394         {
395                 /* IBM FAStT 1722-600 */
396                 .vendor        = "IBM",
397                 .product       = "1722-600",
398                 .getuid        = DEFAULT_GETUID,
399                 .features      = "1 queue_if_no_path",
400                 .hwhandler     = "1 rdac",
401                 .selector      = DEFAULT_SELECTOR,
402                 .pgpolicy      = GROUP_BY_PRIO,
403                 .pgfailback    = -FAILBACK_IMMEDIATE,
404                 .rr_weight     = RR_WEIGHT_NONE,
405                 .no_path_retry = 300,
406                 .minio         = DEFAULT_MINIO,
407                 .checker_name  = RDAC,
408                 .prio_name     = PRIO_RDAC,
409         },
410         {
411                 /* IBM DS4100 */
412                 .vendor        = "IBM",
413                 .product       = "1724",
414                 .getuid        = DEFAULT_GETUID,
415                 .features      = "1 queue_if_no_path",
416                 .hwhandler     = "1 rdac",
417                 .selector      = DEFAULT_SELECTOR,
418                 .pgpolicy      = GROUP_BY_PRIO,
419                 .pgfailback    = -FAILBACK_IMMEDIATE,
420                 .rr_weight     = RR_WEIGHT_NONE,
421                 .no_path_retry = 300,
422                 .minio         = DEFAULT_MINIO,
423                 .checker_name  = RDAC,
424                 .prio_name     = PRIO_RDAC,
425         },
426         {
427                 /* IBM DS3200 / DS3300 / DS3400 */
428                 .vendor        = "IBM",
429                 .product       = "1726",
430                 .getuid        = DEFAULT_GETUID,
431                 .features      = "1 queue_if_no_path",
432                 .hwhandler     = "1 rdac",
433                 .selector      = DEFAULT_SELECTOR,
434                 .pgpolicy      = GROUP_BY_PRIO,
435                 .pgfailback    = -FAILBACK_IMMEDIATE,
436                 .rr_weight     = RR_WEIGHT_NONE,
437                 .no_path_retry = 300,
438                 .minio         = DEFAULT_MINIO,
439                 .checker_name  = RDAC,
440                 .prio_name     = PRIO_RDAC,
441         },
442         {
443                 /* IBM DS4400 / DS4500 / FAStT700 */
444                 .vendor        = "IBM",
445                 .product       = "1742",
446                 .getuid        = DEFAULT_GETUID,
447                 .features      = DEFAULT_FEATURES,
448                 .hwhandler     = "1 rdac",
449                 .selector      = DEFAULT_SELECTOR,
450                 .pgpolicy      = GROUP_BY_PRIO,
451                 .pgfailback    = -FAILBACK_IMMEDIATE,
452                 .rr_weight     = RR_WEIGHT_NONE,
453                 .no_path_retry = NO_PATH_RETRY_QUEUE,
454                 .minio         = DEFAULT_MINIO,
455                 .checker_name  = RDAC,
456                 .prio_name     = PRIO_RDAC,
457         },
458         {
459                 .vendor        = "IBM",
460                 .product       = "1745|1746",
461                 .getuid        = DEFAULT_GETUID,
462                 .features      = "2 pg_init_retries 50",
463                 .hwhandler     = "1 rdac",
464                 .selector      = DEFAULT_SELECTOR,
465                 .pgpolicy      = GROUP_BY_PRIO,
466                 .pgfailback    = -FAILBACK_IMMEDIATE,
467                 .rr_weight     = RR_WEIGHT_NONE,
468                 .no_path_retry = 15,
469                 .minio         = DEFAULT_MINIO,
470                 .checker_name  = RDAC,
471                 .prio_name     = PRIO_RDAC,
472         },
473         {
474             /* IBM DS4700 */
475                 .vendor        = "IBM",
476                 .product       = "1814",
477                 .getuid        = DEFAULT_GETUID,
478                 .features      = DEFAULT_FEATURES,
479                 .hwhandler     = "1 rdac",
480                 .selector      = DEFAULT_SELECTOR,
481                 .pgpolicy      = GROUP_BY_PRIO,
482                 .pgfailback    = -FAILBACK_IMMEDIATE,
483                 .rr_weight     = RR_WEIGHT_NONE,
484                 .no_path_retry = NO_PATH_RETRY_QUEUE,
485                 .minio         = DEFAULT_MINIO,
486                 .checker_name  = RDAC,
487                 .prio_name     = PRIO_RDAC,
488         },
489         {
490             /* IBM DS4800 */
491                 .vendor        = "IBM",
492                 .product       = "1815",
493                 .getuid        = DEFAULT_GETUID,
494                 .features      = DEFAULT_FEATURES,
495                 .hwhandler     = "1 rdac",
496                 .selector      = DEFAULT_SELECTOR,
497                 .pgpolicy      = GROUP_BY_PRIO,
498                 .pgfailback    = -FAILBACK_IMMEDIATE,
499                 .rr_weight     = RR_WEIGHT_NONE,
500                 .no_path_retry = NO_PATH_RETRY_QUEUE,
501                 .minio         = DEFAULT_MINIO,
502                 .checker_name  = RDAC,
503                 .prio_name     = PRIO_RDAC,
504         },
505         {
506             /* IBM DS5000 */
507                 .vendor        = "IBM",
508                 .product       = "1818",
509                 .getuid        = DEFAULT_GETUID,
510                 .features      = DEFAULT_FEATURES,
511                 .hwhandler     = "1 rdac",
512                 .selector      = DEFAULT_SELECTOR,
513                 .pgpolicy      = GROUP_BY_PRIO,
514                 .pgfailback    = -FAILBACK_IMMEDIATE,
515                 .rr_weight     = RR_WEIGHT_NONE,
516                 .no_path_retry = NO_PATH_RETRY_QUEUE,
517                 .minio         = DEFAULT_MINIO,
518                 .checker_name  = RDAC,
519                 .prio_name     = PRIO_RDAC,
520         },
521         {
522                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
523                 .vendor        = "IBM",
524                 .product       = "3526",
525                 .getuid        = DEFAULT_GETUID,
526                 .features      = DEFAULT_FEATURES,
527                 .hwhandler     = "1 rdac",
528                 .selector      = DEFAULT_SELECTOR,
529                 .pgpolicy      = GROUP_BY_PRIO,
530                 .pgfailback    = -FAILBACK_IMMEDIATE,
531                 .rr_weight     = RR_WEIGHT_NONE,
532                 .no_path_retry = NO_PATH_RETRY_QUEUE,
533                 .minio         = DEFAULT_MINIO,
534                 .checker_name  = RDAC,
535                 .prio_name     = PRIO_RDAC,
536         },
537         {
538                 /* IBM DS4200 / FAStT200 */
539                 .vendor        = "IBM",
540                 .product       = "3542",
541                 .getuid        = DEFAULT_GETUID,
542                 .features      = DEFAULT_FEATURES,
543                 .hwhandler     = DEFAULT_HWHANDLER,
544                 .selector      = DEFAULT_SELECTOR,
545                 .pgpolicy      = GROUP_BY_SERIAL,
546                 .pgfailback    = FAILBACK_UNDEF,
547                 .rr_weight     = RR_WEIGHT_NONE,
548                 .no_path_retry = NO_PATH_RETRY_UNDEF,
549                 .minio         = DEFAULT_MINIO,
550                 .checker_name  = TUR,
551                 .prio_name     = DEFAULT_PRIO,
552         },
553         {
554                 /* IBM ESS F20 aka Shark */
555                 .vendor        = "IBM",
556                 .product       = "2105800",
557                 .getuid        = DEFAULT_GETUID,
558                 .features      = "1 queue_if_no_path",
559                 .hwhandler     = DEFAULT_HWHANDLER,
560                 .selector      = DEFAULT_SELECTOR,
561                 .pgpolicy      = GROUP_BY_SERIAL,
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  = TUR,
567                 .prio_name     = DEFAULT_PRIO,
568         },
569         {
570                 /* IBM ESS F20 aka Shark */
571                 .vendor        = "IBM",
572                 .product       = "2105F20",
573                 .getuid        = DEFAULT_GETUID,
574                 .features      = "1 queue_if_no_path",
575                 .hwhandler     = DEFAULT_HWHANDLER,
576                 .selector      = DEFAULT_SELECTOR,
577                 .pgpolicy      = GROUP_BY_SERIAL,
578                 .pgfailback    = FAILBACK_UNDEF,
579                 .rr_weight     = RR_WEIGHT_NONE,
580                 .no_path_retry = NO_PATH_RETRY_UNDEF,
581                 .minio         = DEFAULT_MINIO,
582                 .checker_name  = TUR,
583                 .prio_name     = DEFAULT_PRIO,
584         },
585         {
586                 /* IBM DS6000 */
587                 .vendor        = "IBM",
588                 .product       = "1750500",
589                 .getuid        = DEFAULT_GETUID,
590                 .features      = "1 queue_if_no_path",
591                 .hwhandler     = DEFAULT_HWHANDLER,
592                 .selector      = DEFAULT_SELECTOR,
593                 .pgpolicy      = GROUP_BY_PRIO,
594                 .pgfailback    = -FAILBACK_IMMEDIATE,
595                 .rr_weight     = RR_WEIGHT_NONE,
596                 .no_path_retry = NO_PATH_RETRY_UNDEF,
597                 .minio         = DEFAULT_MINIO,
598                 .checker_name  = TUR,
599                 .prio_name     = PRIO_ALUA,
600         },
601         {
602                 /* IBM DS8000 */
603                 .vendor        = "IBM",
604                 .product       = "2107900",
605                 .getuid        = DEFAULT_GETUID,
606                 .features      = "1 queue_if_no_path",
607                 .hwhandler     = DEFAULT_HWHANDLER,
608                 .selector      = DEFAULT_SELECTOR,
609                 .pgpolicy      = MULTIBUS,
610                 .pgfailback    = FAILBACK_UNDEF,
611                 .rr_weight     = RR_WEIGHT_NONE,
612                 .no_path_retry = NO_PATH_RETRY_UNDEF,
613                 .minio         = DEFAULT_MINIO,
614                 .checker_name  = TUR,
615                 .prio_name     = DEFAULT_PRIO,
616         },
617         {
618                 /* IBM SAN Volume Controller */
619                 .vendor        = "IBM",
620                 .product       = "2145",
621                 .getuid        = DEFAULT_GETUID,
622                 .features      = "1 queue_if_no_path",
623                 .hwhandler     = DEFAULT_HWHANDLER,
624                 .selector      = DEFAULT_SELECTOR,
625                 .pgpolicy      = GROUP_BY_PRIO,
626                 .pgfailback    = -FAILBACK_IMMEDIATE,
627                 .rr_weight     = RR_WEIGHT_NONE,
628                 .no_path_retry = NO_PATH_RETRY_UNDEF,
629                 .minio         = DEFAULT_MINIO,
630                 .checker_name  = TUR,
631                 .prio_name     = PRIO_ALUA,
632         },
633         {
634                 /* IBM S/390 ECKD DASD */
635                 .vendor        = "IBM",
636                 .product       = "S/390 DASD ECKD",
637                 .bl_product       = "S/390.*",
638                 .getuid        = "/sbin/dasdinfo -u -b %n",
639                 .features      = "1 queue_if_no_path",
640                 .hwhandler     = DEFAULT_HWHANDLER,
641                 .selector      = DEFAULT_SELECTOR,
642                 .pgpolicy      = MULTIBUS,
643                 .pgfailback    = FAILBACK_UNDEF,
644                 .rr_weight     = RR_WEIGHT_NONE,
645                 .no_path_retry = NO_PATH_RETRY_UNDEF,
646                 .minio         = DEFAULT_MINIO,
647                 .checker_name  = DIRECTIO,
648                 .prio_name     = DEFAULT_PRIO,
649         },
650         {
651                 /* IBM S/390 FBA DASD */
652                 .vendor        = "IBM",
653                 .product       = "S/390 DASD FBA",
654                 .bl_product       = "S/390.*",
655                 .getuid        = "/sbin/dasdinfo -u -b %n",
656                 .features      = "1 queue_if_no_path",
657                 .hwhandler     = DEFAULT_HWHANDLER,
658                 .selector      = DEFAULT_SELECTOR,
659                 .pgpolicy      = MULTIBUS,
660                 .pgfailback    = FAILBACK_UNDEF,
661                 .rr_weight     = RR_WEIGHT_NONE,
662                 .no_path_retry = NO_PATH_RETRY_UNDEF,
663                 .minio         = DEFAULT_MINIO,
664                 .checker_name  = DIRECTIO,
665                 .prio_name     = DEFAULT_PRIO,
666         },
667         {
668                 /* IBM IPR */
669                 .vendor        = "IBM",
670                 .product       = "IPR.*",
671                 .getuid        = DEFAULT_GETUID,
672                 .features      = "1 queue_if_no_path",
673                 .hwhandler     = "1 alua",
674                 .selector      = DEFAULT_SELECTOR,
675                 .pgpolicy      = GROUP_BY_PRIO,
676                 .pgfailback    = -FAILBACK_IMMEDIATE,
677                 .rr_weight     = RR_WEIGHT_NONE,
678                 .no_path_retry = NO_PATH_RETRY_UNDEF,
679                 .minio         = DEFAULT_MINIO,
680                 .checker_name  = TUR,
681                 .prio_name     = PRIO_ALUA,
682         },
683         /*
684          * IBM Power Virtual SCSI Devices
685          *
686          * Maintainer : Brian King, IBM
687          * Mail : brking@linux.vnet.ibm.com
688          */
689         {
690                 /* AIX VDASD */
691                 .vendor        = "AIX",
692                 .product       = "VDASD",
693                 .getuid        = DEFAULT_GETUID,
694                 .features      = DEFAULT_FEATURES,
695                 .hwhandler     = DEFAULT_HWHANDLER,
696                 .selector      = DEFAULT_SELECTOR,
697                 .pgpolicy      = MULTIBUS,
698                 .pgfailback    = -FAILBACK_IMMEDIATE,
699                 .rr_weight     = RR_WEIGHT_NONE,
700                 .no_path_retry = (300 / DEFAULT_CHECKINT),
701                 .minio         = DEFAULT_MINIO,
702                 .checker_name  = DIRECTIO,
703                 .prio_name     = DEFAULT_PRIO,
704         },
705         {
706                 /* AIX NVDISK */
707                 .vendor        = "AIX",
708                 .product       = "NVDISK",
709                 .getuid        = DEFAULT_GETUID,
710                 .features      = DEFAULT_FEATURES,
711                 .hwhandler     = "1 alua",
712                 .selector      = DEFAULT_SELECTOR,
713                 .pgpolicy      = GROUP_BY_PRIO,
714                 .pgfailback    = -FAILBACK_IMMEDIATE,
715                 .rr_weight     = RR_WEIGHT_NONE,
716                 .no_path_retry = (300 / DEFAULT_CHECKINT),
717                 .minio         = DEFAULT_MINIO,
718                 .checker_name  = TUR,
719                 .prio_name     = PRIO_ALUA,
720         },
721
722         {
723                 /* DELL MD3000 */
724                 .vendor        = "DELL",
725                 .product       = "MD3000",
726                 .getuid        = DEFAULT_GETUID,
727                 .features      = "2 pg_init_retries 50",
728                 .hwhandler     = "1 rdac",
729                 .selector      = DEFAULT_SELECTOR,
730                 .pgpolicy      = GROUP_BY_PRIO,
731                 .pgfailback    = -FAILBACK_IMMEDIATE,
732                 .rr_weight     = RR_WEIGHT_NONE,
733                 .no_path_retry = 15,
734                 .minio         = DEFAULT_MINIO,
735                 .checker_name  = RDAC,
736                 .prio_name     = PRIO_RDAC,
737         },
738         {
739                 /* DELL MD3000i */
740                 .vendor        = "DELL",
741                 .product       = "MD3000i",
742                 .getuid        = DEFAULT_GETUID,
743                 .features      = "2 pg_init_retries 50",
744                 .hwhandler     = "1 rdac",
745                 .selector      = DEFAULT_SELECTOR,
746                 .pgpolicy      = GROUP_BY_PRIO,
747                 .pgfailback    = -FAILBACK_IMMEDIATE,
748                 .rr_weight     = RR_WEIGHT_NONE,
749                 .no_path_retry = 15,
750                 .minio         = DEFAULT_MINIO,
751                 .checker_name  = RDAC,
752                 .prio_name     = PRIO_RDAC,
753         },
754         {
755                 /* DELL MD32xx */
756                 .vendor        = "DELL",
757                 .product       = "MD32xx",
758                 .getuid        = DEFAULT_GETUID,
759                 .features      = "2 pg_init_retries 50",
760                 .hwhandler     = "1 rdac",
761                 .selector      = DEFAULT_SELECTOR,
762                 .pgpolicy      = GROUP_BY_PRIO,
763                 .pgfailback    = -FAILBACK_IMMEDIATE,
764                 .rr_weight     = RR_WEIGHT_NONE,
765                 .no_path_retry = 15,
766                 .minio         = DEFAULT_MINIO,
767                 .checker_name  = RDAC,
768                 .prio_name     = PRIO_RDAC,
769         },
770         {
771                 /* DELL MD32xxi */
772                 .vendor        = "DELL",
773                 .product       = "MD32xxi",
774                 .getuid        = DEFAULT_GETUID,
775                 .features      = "2 pg_init_retries 50",
776                 .hwhandler     = "1 rdac",
777                 .selector      = DEFAULT_SELECTOR,
778                 .pgpolicy      = GROUP_BY_PRIO,
779                 .pgfailback    = -FAILBACK_IMMEDIATE,
780                 .rr_weight     = RR_WEIGHT_NONE,
781                 .no_path_retry = 15,
782                 .minio         = DEFAULT_MINIO,
783                 .checker_name  = RDAC,
784                 .prio_name     = PRIO_RDAC,
785         },
786         /*
787          * NETAPP controller family
788          *
789          * Maintainer : Dave Wysochanski
790          * Mail : davidw@netapp.com
791          */
792         {
793                 .vendor        = "NETAPP",
794                 .product       = "LUN.*",
795                 .getuid        = DEFAULT_GETUID,
796                 .features      = "1 queue_if_no_path",
797                 .hwhandler     = DEFAULT_HWHANDLER,
798                 .selector      = DEFAULT_SELECTOR,
799                 .pgpolicy      = GROUP_BY_PRIO,
800                 .pgfailback    = -FAILBACK_IMMEDIATE,
801                 .rr_weight     = RR_WEIGHT_NONE,
802                 .no_path_retry = NO_PATH_RETRY_UNDEF,
803                 .minio         = 128,
804                 .checker_name  = DIRECTIO,
805                 .prio_name     = PRIO_NETAPP,
806         },
807         /*
808          * NEXENTA/COMSTAR controller family
809          *
810          * Maintainer : Yacine Kheddache
811          * Mail : yacine@alyseo.com
812          */
813         {
814                 .vendor        = "NEXENTA",
815                 .product       = "COMSTAR",
816                 .getuid        = DEFAULT_GETUID,
817                 .features      = "1 queue_if_no_path",
818                 .hwhandler     = DEFAULT_HWHANDLER,
819                 .selector      = DEFAULT_SELECTOR,
820                 .pgpolicy      = GROUP_BY_SERIAL,
821                 .pgfailback    = -FAILBACK_IMMEDIATE,
822                 .rr_weight     = RR_WEIGHT_NONE,
823                 .no_path_retry = 30,
824                 .minio         = 128,
825                 .checker_name  = DIRECTIO,
826                 .prio_name     = DEFAULT_PRIO,
827         },
828         /*
829          * IBM NSeries (NETAPP) controller family
830          *
831          * Maintainer : Dave Wysochanski
832          * Mail : davidw@netapp.com
833          */
834         {
835                 .vendor        = "IBM",
836                 .product       = "Nseries.*",
837                 .getuid        = DEFAULT_GETUID,
838                 .features      = "1 queue_if_no_path",
839                 .hwhandler     = DEFAULT_HWHANDLER,
840                 .selector      = DEFAULT_SELECTOR,
841                 .pgpolicy      = GROUP_BY_PRIO,
842                 .pgfailback    = -FAILBACK_IMMEDIATE,
843                 .rr_weight     = RR_WEIGHT_NONE,
844                 .no_path_retry = NO_PATH_RETRY_UNDEF,
845                 .minio         = 128,
846                 .checker_name  = DIRECTIO,
847                 .prio_name     = PRIO_NETAPP,
848         },
849         /*
850          * Pillar Data controller family
851          *
852          * Maintainer : Srinivasan Ramani
853          * Mail : sramani@pillardata.com
854          */
855         {
856                 .vendor        = "Pillar",
857                 .product       = "Axiom.*",
858                 .getuid        = DEFAULT_GETUID,
859                 .features      = DEFAULT_FEATURES,
860                 .hwhandler     = DEFAULT_HWHANDLER,
861                 .selector      = DEFAULT_SELECTOR,
862                 .pgpolicy      = GROUP_BY_PRIO,
863                 .pgfailback    = FAILBACK_UNDEF,
864                 .rr_weight     = RR_WEIGHT_NONE,
865                 .no_path_retry = NO_PATH_RETRY_UNDEF,
866                 .minio         = DEFAULT_MINIO,
867                 .checker_name  = TUR,
868                 .prio_name     = PRIO_ALUA,
869         },
870         /*
871          * SGI arrays
872          *
873          * Maintainer : Christophe Varoqui
874          * Mail : christophe.varoqui@opensvc.com
875          */
876         {
877                 .vendor        = "SGI",
878                 .product       = "TP9[13]00",
879                 .getuid        = DEFAULT_GETUID,
880                 .features      = DEFAULT_FEATURES,
881                 .hwhandler     = DEFAULT_HWHANDLER,
882                 .selector      = DEFAULT_SELECTOR,
883                 .pgpolicy      = MULTIBUS,
884                 .pgfailback    = FAILBACK_UNDEF,
885                 .rr_weight     = RR_WEIGHT_NONE,
886                 .no_path_retry = NO_PATH_RETRY_UNDEF,
887                 .minio         = DEFAULT_MINIO,
888                 .checker_name  = DIRECTIO,
889                 .prio_name     = DEFAULT_PRIO,
890         },
891         {
892                 .vendor        = "SGI",
893                 .product       = "TP9[45]00",
894                 .getuid        = DEFAULT_GETUID,
895                 .features      = DEFAULT_FEATURES,
896                 .hwhandler     = "1 rdac",
897                 .selector      = DEFAULT_SELECTOR,
898                 .pgpolicy      = GROUP_BY_PRIO,
899                 .pgfailback    = -FAILBACK_IMMEDIATE,
900                 .rr_weight     = RR_WEIGHT_NONE,
901                 .no_path_retry = NO_PATH_RETRY_QUEUE,
902                 .minio         = DEFAULT_MINIO,
903                 .checker_name  = RDAC,
904                 .prio_name     = PRIO_RDAC,
905         },
906         {
907                 .vendor        = "SGI",
908                 .product       = "IS.*",
909                 .getuid        = DEFAULT_GETUID,
910                 .features      = DEFAULT_FEATURES,
911                 .hwhandler     = "1 rdac",
912                 .selector      = DEFAULT_SELECTOR,
913                 .pgpolicy      = GROUP_BY_PRIO,
914                 .pgfailback    = -FAILBACK_IMMEDIATE,
915                 .rr_weight     = RR_WEIGHT_NONE,
916                 .no_path_retry = NO_PATH_RETRY_QUEUE,
917                 .minio         = DEFAULT_MINIO,
918                 .checker_name  = RDAC,
919                 .prio_name     = PRIO_RDAC,
920         },
921         /*
922          * STK arrays
923          *
924          * Maintainer : Christophe Varoqui
925          * Mail : christophe.varoqui@opensvc.com
926          */
927         {
928                 .vendor        = "STK",
929                 .product       = "OPENstorage D280",
930                 .getuid        = DEFAULT_GETUID,
931                 .features      = DEFAULT_FEATURES,
932                 .hwhandler     = "1 rdac",
933                 .selector      = DEFAULT_SELECTOR,
934                 .pgpolicy      = GROUP_BY_PRIO,
935                 .pgfailback    = -FAILBACK_IMMEDIATE,
936                 .rr_weight     = RR_WEIGHT_NONE,
937                 .no_path_retry = NO_PATH_RETRY_UNDEF,
938                 .minio         = DEFAULT_MINIO,
939                 .checker_name  = TUR,
940                 .prio_name     = PRIO_RDAC,
941         },
942         /*
943          * SUN arrays
944          *
945          * Maintainer : Christophe Varoqui
946          * Mail : christophe.varoqui@opensvc.com
947          */
948         {
949                 .vendor        = "SUN",
950                 .product       = "(StorEdge 3510|T4)",
951                 .getuid        = DEFAULT_GETUID,
952                 .features      = DEFAULT_FEATURES,
953                 .hwhandler     = DEFAULT_HWHANDLER,
954                 .selector      = DEFAULT_SELECTOR,
955                 .pgpolicy      = MULTIBUS,
956                 .pgfailback    = FAILBACK_UNDEF,
957                 .rr_weight     = RR_WEIGHT_NONE,
958                 .no_path_retry = NO_PATH_RETRY_UNDEF,
959                 .minio         = DEFAULT_MINIO,
960                 .checker_name  = DIRECTIO,
961                 .prio_name     = DEFAULT_PRIO,
962         },
963         /*
964          * Pivot3 RAIGE
965          *
966          * Maintainer : Bart Brooks, Pivot3
967          * Mail : bartb@pivot3.com
968          */
969         {
970                 .vendor        = "PIVOT3",
971                 .product       = "RAIGE VOLUME",
972                 .getuid        = "/lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/%n",
973                 .features      = "1 queue_if_no_path",
974                 .hwhandler     = DEFAULT_HWHANDLER,
975                 .selector      = DEFAULT_SELECTOR,
976                 .pgpolicy      = MULTIBUS,
977                 .pgfailback    = FAILBACK_UNDEF,
978                 .rr_weight     = RR_WEIGHT_NONE,
979                 .no_path_retry = NO_PATH_RETRY_UNDEF,
980                 .minio         = 100,
981                 .checker_name  = TUR,
982                 .prio_name     = DEFAULT_PRIO,
983         },
984         {
985                 .vendor        = "SUN",
986                 .product       = "CSM200_R",
987                 .getuid        = DEFAULT_GETUID,
988                 .features      = DEFAULT_FEATURES,
989                 .hwhandler     = "1 rdac",
990                 .selector      = DEFAULT_SELECTOR,
991                 .pgpolicy      = GROUP_BY_PRIO,
992                 .pgfailback    = -FAILBACK_IMMEDIATE,
993                 .rr_weight     = RR_WEIGHT_NONE,
994                 .no_path_retry = NO_PATH_RETRY_QUEUE,
995                 .minio         = DEFAULT_MINIO,
996                 .checker_name  = RDAC,
997                 .prio_name     = PRIO_RDAC,
998         },
999         /* SUN/LSI 2510, 2540, 2530, 2540 */
1000         {
1001                 .vendor        = "SUN",
1002                 .product       = "LCSM100_[IEFS]",
1003                 .getuid        = DEFAULT_GETUID,
1004                 .features      = DEFAULT_FEATURES,
1005                 .hwhandler     = "1 rdac",
1006                 .selector      = DEFAULT_SELECTOR,
1007                 .pgpolicy      = GROUP_BY_PRIO,
1008                 .pgfailback    = -FAILBACK_IMMEDIATE,
1009                 .rr_weight     = RR_WEIGHT_NONE,
1010                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1011                 .minio         = DEFAULT_MINIO,
1012                 .checker_name  = RDAC,
1013                 .prio_name     = PRIO_RDAC,
1014         },
1015         /* LSI Generic rdac storage */
1016         {
1017                 .vendor        = "(LSI|ENGENIO)",
1018                 .product       = "INF-01-00",
1019                 .getuid        = DEFAULT_GETUID,
1020                 .features      = "2 pg_init_retries 50",
1021                 .hwhandler     = "1 rdac",
1022                 .selector      = DEFAULT_SELECTOR,
1023                 .pgpolicy      = GROUP_BY_PRIO,
1024                 .pgfailback    = -FAILBACK_IMMEDIATE,
1025                 .rr_weight     = RR_WEIGHT_NONE,
1026                 .no_path_retry = 15,
1027                 .minio         = DEFAULT_MINIO,
1028                 .checker_name  = RDAC,
1029                 .prio_name     = PRIO_RDAC,
1030         },
1031         {
1032                 .vendor        = "STK",
1033                 .product       = "FLEXLINE 380",
1034                 .bl_product    = "Universal Xport",
1035                 .getuid        = DEFAULT_GETUID,
1036                 .features      = DEFAULT_FEATURES,
1037                 .hwhandler     = "1 rdac",
1038                 .selector      = DEFAULT_SELECTOR,
1039                 .pgpolicy      = GROUP_BY_PRIO,
1040                 .pgfailback    = -FAILBACK_IMMEDIATE,
1041                 .rr_weight     = RR_WEIGHT_NONE,
1042                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1043                 .minio         = DEFAULT_MINIO,
1044                 .checker_name  = RDAC,
1045                 .prio_name     = PRIO_RDAC,
1046         },
1047         /*
1048          * EOL
1049          */
1050         {
1051                 .vendor        = NULL,
1052                 .product       = NULL,
1053                 .getuid        = NULL,
1054                 .features      = NULL,
1055                 .hwhandler     = NULL,
1056                 .selector      = NULL,
1057                 .pgpolicy      = 0,
1058                 .pgfailback    = 0,
1059                 .rr_weight     = 0,
1060                 .no_path_retry = 0,
1061                 .minio         = 0,
1062                 .checker_name  = NULL,
1063                 .prio_name     = NULL,
1064         },
1065 };
1066
1067 extern int
1068 setup_default_hwtable (vector hw)
1069 {
1070         int r = 0;
1071         struct hwentry * hwe = default_hw;
1072
1073         while (hwe->vendor) {
1074                 r += store_hwe(hw, hwe);
1075                 hwe++;
1076         }
1077         return r;
1078 }