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