Move to a shared lib model for
[platform/upstream/multipath-tools.git] / libmultipath / hwtable.c
1 #include <stdio.h>
2
3 #include <checkers.h>
4 #include <libprio.h>
5
6 #include "vector.h"
7 #include "defaults.h"
8 #include "structs.h"
9 #include "config.h"
10 #include "pgpolicies.h"
11
12 /*
13  * Tuning suggestions on these parameters should go to
14  * dm-devel@redhat.com
15  * 
16  * You are welcome to claim maintainership over a controller
17  * family. Please mail the currently enlisted maintainer and
18  * the upstream package maintainer.
19  */
20 static struct hwentry default_hw[] = {
21         /*
22          * Apple controller family
23          *
24          * Maintainer : Shyam Sundar
25          * Mail : g.shyamsundar@yahoo.co.in
26          */
27         {
28                 .vendor        = "APPLE*",
29                 .product       = "Xserve RAID ",
30                 .getuid        = DEFAULT_GETUID,
31                 .features      = DEFAULT_FEATURES,
32                 .hwhandler     = DEFAULT_HWHANDLER,
33                 .selector      = DEFAULT_SELECTOR,
34                 .pgpolicy      = MULTIBUS,
35                 .pgfailback    = FAILBACK_UNDEF,
36                 .rr_weight     = RR_WEIGHT_NONE,
37                 .no_path_retry = NO_PATH_RETRY_UNDEF,
38                 .minio         = DEFAULT_MINIO,
39                 .checker_name  = DEFAULT_CHECKER,
40                 .prio_name     = DEFAULT_PRIO,
41         },
42         /*
43          * StorageWorks controller family
44          *
45          * Maintainer : Christophe Varoqui
46          * Mail : christophe.varoqui@free.fr
47          */
48         {
49                 .vendor        = "3PARdata",
50                 .product       = "VV",
51                 .getuid        = DEFAULT_GETUID,
52                 .features      = DEFAULT_FEATURES,
53                 .hwhandler     = DEFAULT_HWHANDLER,
54                 .selector      = DEFAULT_SELECTOR,
55                 .pgpolicy      = MULTIBUS,
56                 .pgfailback    = FAILBACK_UNDEF,
57                 .rr_weight     = RR_WEIGHT_NONE,
58                 .no_path_retry = NO_PATH_RETRY_UNDEF,
59                 .minio         = DEFAULT_MINIO,
60                 .checker_name  = DEFAULT_CHECKER,
61                 .prio_name     = DEFAULT_PRIO,
62         },
63         {
64                 .vendor        = "DEC",
65                 .product       = "HSG80",
66                 .getuid        = DEFAULT_GETUID,
67                 .features      = "1 queue_if_no_path",
68                 .hwhandler     = "1 hp-sw",
69                 .selector      = DEFAULT_SELECTOR,
70                 .pgpolicy      = GROUP_BY_PRIO,
71                 .pgfailback    = FAILBACK_UNDEF,
72                 .rr_weight     = RR_WEIGHT_NONE,
73                 .no_path_retry = NO_PATH_RETRY_UNDEF,
74                 .minio         = DEFAULT_MINIO,
75                 .checker_name  = HP_SW,
76                 .prio_name     = PRIO_HP_SW,
77         },
78         {
79                 .vendor        = "HP",
80                 .product       = "A6189A",
81                 .getuid        = DEFAULT_GETUID,
82                 .features      = DEFAULT_FEATURES,
83                 .hwhandler     = DEFAULT_HWHANDLER,
84                 .selector      = DEFAULT_SELECTOR,
85                 .pgpolicy      = MULTIBUS,
86                 .pgfailback    = FAILBACK_UNDEF,
87                 .rr_weight     = RR_WEIGHT_NONE,
88                 .no_path_retry = NO_PATH_RETRY_UNDEF,
89                 .minio         = DEFAULT_MINIO,
90                 .checker_name  = DIRECTIO,
91                 .prio_name     = DEFAULT_PRIO,
92         },
93         {
94                 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
95                 .vendor        = "(COMPAQ|HP)",
96                 .product       = "(MSA|HSV)1.0.*",
97                 .getuid        = DEFAULT_GETUID,
98                 .features      = "1 queue_if_no_path",
99                 .hwhandler     = "1 hp-sw",
100                 .selector      = DEFAULT_SELECTOR,
101                 .pgpolicy      = GROUP_BY_PRIO,
102                 .pgfailback    = FAILBACK_UNDEF,
103                 .rr_weight     = RR_WEIGHT_NONE,
104                 .no_path_retry = NO_PATH_RETRY_UNDEF,
105                 .minio         = DEFAULT_MINIO,
106                 .checker_name  = HP_SW,
107                 .prio_name     = PRIO_HP_SW,
108         },
109         {
110                 /* MSA 1000/1500 with new firmware */
111                 .vendor        = "HP",
112                 .product       = "MSA VOLUME",
113                 .getuid        = DEFAULT_GETUID,
114                 .features      = DEFAULT_FEATURES,
115                 .hwhandler     = DEFAULT_HWHANDLER,
116                 .selector      = DEFAULT_SELECTOR,
117                 .pgpolicy      = GROUP_BY_PRIO,
118                 .pgfailback    = -FAILBACK_IMMEDIATE,
119                 .rr_weight     = RR_WEIGHT_NONE,
120                 .no_path_retry = NO_PATH_RETRY_UNDEF,
121                 .minio         = DEFAULT_MINIO,
122                 .checker_name  = TUR,
123                 .prio_name     = PRIO_ALUA,
124         },
125         {
126                 .vendor        = "HP",
127                 .product       = "MSA2000s*",
128                 .getuid        = "/sbin/cciss_id %n",
129                 .features      = DEFAULT_FEATURES,
130                 .hwhandler     = DEFAULT_HWHANDLER,
131                 .selector      = DEFAULT_SELECTOR,
132                 .pgpolicy      = MULTIBUS,
133                 .pgfailback    = FAILBACK_UNDEF,
134                 .rr_weight     = RR_WEIGHT_NONE,
135                 .no_path_retry = 12,
136                 .minio         = DEFAULT_MINIO,
137                 .checker_name  = TUR,
138                 .prio_name     = DEFAULT_PRIO,
139         },
140         {
141                 /* EVA 3000/5000 with new firmware */
142                 .vendor        = "(COMPAQ|HP)",
143                 .product       = "(MSA|HSV)1.1.*",
144                 .getuid        = DEFAULT_GETUID,
145                 .features      = DEFAULT_FEATURES,
146                 .hwhandler     = DEFAULT_HWHANDLER,
147                 .selector      = DEFAULT_SELECTOR,
148                 .pgpolicy      = GROUP_BY_PRIO,
149                 .pgfailback    = -FAILBACK_IMMEDIATE,
150                 .rr_weight     = RR_WEIGHT_NONE,
151                 .no_path_retry = NO_PATH_RETRY_UNDEF,
152                 .minio         = DEFAULT_MINIO,
153                 .checker_name  = TUR,
154                 .prio_name     = PRIO_ALUA,
155         },
156         {
157                 /* EVA 4000/6000/8000 */
158                 .vendor        = "HP",
159                 .product       = "HSV2.*",
160                 .getuid        = DEFAULT_GETUID,
161                 .features      = DEFAULT_FEATURES,
162                 .hwhandler     = DEFAULT_HWHANDLER,
163                 .selector      = DEFAULT_SELECTOR,
164                 .pgpolicy      = GROUP_BY_PRIO,
165                 .pgfailback    = -FAILBACK_IMMEDIATE,
166                 .rr_weight     = RR_WEIGHT_NONE,
167                 .no_path_retry = NO_PATH_RETRY_UNDEF,
168                 .minio         = DEFAULT_MINIO,
169                 .checker_name  = TUR,
170                 .prio_name     = PRIO_ALUA,
171         },
172         {
173                 /* HP Smart Array */
174                 .vendor        = "HP",
175                 .product       = "LOGICAL VOLUME.*",
176                 .getuid        = "/lib/udev/scsi_id -n -g -u -s /block/%n",
177                 .features      = DEFAULT_FEATURES,
178                 .hwhandler     = DEFAULT_HWHANDLER,
179                 .selector      = DEFAULT_SELECTOR,
180                 .pgpolicy      = MULTIBUS,
181                 .pgfailback    = FAILBACK_UNDEF,
182                 .rr_weight     = RR_WEIGHT_NONE,
183                 .no_path_retry = NO_PATH_RETRY_UNDEF,
184                 .minio         = DEFAULT_MINIO,
185                 .checker_name  = TUR,
186                 .prio_name     = DEFAULT_PRIO,
187         },
188         /*
189          * DDN controller family
190          *
191          * Maintainer : Christophe Varoqui
192          * Mail : christophe.varoqui@free.fr
193          */
194         {
195                 .vendor        = "DDN",
196                 .product       = "SAN DataDirector",
197                 .getuid        = DEFAULT_GETUID,
198                 .features      = DEFAULT_FEATURES,
199                 .hwhandler     = DEFAULT_HWHANDLER,
200                 .selector      = DEFAULT_SELECTOR,
201                 .pgpolicy      = MULTIBUS,
202                 .pgfailback    = FAILBACK_UNDEF,
203                 .rr_weight     = RR_WEIGHT_NONE,
204                 .no_path_retry = NO_PATH_RETRY_UNDEF,
205                 .minio         = DEFAULT_MINIO,
206                 .checker_name  = DIRECTIO,
207                 .prio_name     = DEFAULT_PRIO,
208         },
209         /*
210          * EMC / Clariion controller family
211          *
212          * Maintainer : Edward Goggin, EMC
213          * Mail : egoggin@emc.com
214          */
215         {
216                 .vendor        = "EMC",
217                 .product       = "SYMMETRIX",
218                 .getuid        = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n",
219                 .features      = DEFAULT_FEATURES,
220                 .hwhandler     = DEFAULT_HWHANDLER,
221                 .selector      = DEFAULT_SELECTOR,
222                 .pgpolicy      = MULTIBUS,
223                 .pgfailback    = FAILBACK_UNDEF,
224                 .rr_weight     = RR_WEIGHT_NONE,
225                 .no_path_retry = NO_PATH_RETRY_UNDEF,
226                 .minio         = DEFAULT_MINIO,
227                 .checker_name  = DIRECTIO,
228                 .prio_name     = DEFAULT_PRIO,
229         },
230         {
231                 .vendor        = "DGC",
232                 .product       = ".*",
233                 .bl_product    = "LUNZ",
234                 .getuid        = DEFAULT_GETUID,
235                 .features      = "1 queue_if_no_path",
236                 .hwhandler     = "1 emc",
237                 .selector      = DEFAULT_SELECTOR,
238                 .pgpolicy      = GROUP_BY_PRIO,
239                 .pgfailback    = -FAILBACK_IMMEDIATE,
240                 .rr_weight     = RR_WEIGHT_NONE,
241                 .no_path_retry = (300 / DEFAULT_CHECKINT),
242                 .minio         = DEFAULT_MINIO,
243                 .checker_name  = EMC_CLARIION,
244                 .prio_name     = PRIO_EMC,
245         },
246         /*
247          * Fujitsu controller family
248          *
249          * Maintainer : Christophe Varoqui
250          * Mail : christophe.varoqui@free.fr
251          */
252         {
253                 .vendor        = "FSC",
254                 .product       = "CentricStor",
255                 .getuid        = DEFAULT_GETUID,
256                 .features      = DEFAULT_FEATURES,
257                 .hwhandler     = DEFAULT_HWHANDLER,
258                 .selector      = DEFAULT_SELECTOR,
259                 .pgpolicy      = GROUP_BY_SERIAL,
260                 .pgfailback    = FAILBACK_UNDEF,
261                 .rr_weight     = RR_WEIGHT_NONE,
262                 .no_path_retry = NO_PATH_RETRY_UNDEF,
263                 .minio         = DEFAULT_MINIO,
264                 .checker_name  = DIRECTIO,
265                 .prio_name     = DEFAULT_PRIO,
266         },
267         /*
268          * Hitachi controller family
269          *
270          * Maintainer : Matthias Rudolph
271          * Mail : matthias.rudolph@hds.com
272          */
273         {
274                 .vendor        = "(HITACHI|HP)",
275                 .product       = "OPEN-.*",
276                 .getuid        = DEFAULT_GETUID,
277                 .features      = "1 queue_if_no_path",
278                 .hwhandler     = DEFAULT_HWHANDLER,
279                 .selector      = DEFAULT_SELECTOR,
280                 .pgpolicy      = MULTIBUS,
281                 .pgfailback    = FAILBACK_UNDEF,
282                 .rr_weight     = RR_WEIGHT_NONE,
283                 .no_path_retry = NO_PATH_RETRY_UNDEF,
284                 .minio         = DEFAULT_MINIO,
285                 .checker_name  = TUR,
286                 .prio_name     = DEFAULT_PRIO,
287         },
288         {
289                 .vendor        = "HITACHI",
290                 .product       = "DF.*",
291                 .getuid        = DEFAULT_GETUID,
292                 .features      = "1 queue_if_no_path",
293                 .hwhandler     = DEFAULT_HWHANDLER,
294                 .selector      = DEFAULT_SELECTOR,
295                 .pgpolicy      = GROUP_BY_PRIO,
296                 .pgfailback    = -FAILBACK_IMMEDIATE,
297                 .rr_weight     = RR_WEIGHT_NONE,
298                 .no_path_retry = NO_PATH_RETRY_UNDEF,
299                 .minio         = DEFAULT_MINIO,
300                 .checker_name  = TUR,
301                 .prio_name     = PRIO_HDS,
302         },
303         /*
304          * IBM controller family
305          *
306          * Maintainer : Hannes Reinecke, SuSE
307          * Mail : hare@suse.de
308          */
309         {
310                 .vendor        = "IBM",
311                 .product       = "ProFibre 4000R",
312                 .getuid        = DEFAULT_GETUID,
313                 .features      = DEFAULT_FEATURES,
314                 .hwhandler     = DEFAULT_HWHANDLER,
315                 .selector      = DEFAULT_SELECTOR,
316                 .pgpolicy      = MULTIBUS,
317                 .pgfailback    = FAILBACK_UNDEF,
318                 .rr_weight     = RR_WEIGHT_NONE,
319                 .no_path_retry = NO_PATH_RETRY_UNDEF,
320                 .minio         = DEFAULT_MINIO,
321                 .checker_name  = DIRECTIO,
322                 .prio_name     = DEFAULT_PRIO,
323         },
324         {
325                 /* IBM DS4100 / FAStT100 */
326                 .vendor        = "IBM",
327                 .product       = "1742",
328                 .getuid        = DEFAULT_GETUID,
329                 .features      = DEFAULT_FEATURES,
330                 .hwhandler     = DEFAULT_HWHANDLER,
331                 .selector      = DEFAULT_SELECTOR,
332                 .pgpolicy      = GROUP_BY_PRIO,
333                 .pgfailback    = -FAILBACK_IMMEDIATE,
334                 .rr_weight     = RR_WEIGHT_NONE,
335                 .no_path_retry = NO_PATH_RETRY_UNDEF,
336                 .minio         = DEFAULT_MINIO,
337                 .checker_name  = TUR,
338                 .prio_name     = PRIO_RDAC,
339         },
340         {
341                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
342                 .vendor        = "IBM",
343                 .product       = "3526",
344                 .getuid        = DEFAULT_GETUID,
345                 .features      = DEFAULT_FEATURES,
346                 .hwhandler     = DEFAULT_HWHANDLER,
347                 .selector      = DEFAULT_SELECTOR,
348                 .pgpolicy      = GROUP_BY_PRIO,
349                 .pgfailback    = -FAILBACK_IMMEDIATE,
350                 .rr_weight     = RR_WEIGHT_NONE,
351                 .no_path_retry = NO_PATH_RETRY_UNDEF,
352                 .minio         = DEFAULT_MINIO,
353                 .checker_name  = TUR,
354                 .prio_name     = PRIO_RDAC,
355         },
356         {
357                 /* IBM DS4200 / FAStT200 */
358                 .vendor        = "IBM",
359                 .product       = "3542",
360                 .getuid        = DEFAULT_GETUID,
361                 .features      = DEFAULT_FEATURES,
362                 .hwhandler     = DEFAULT_HWHANDLER,
363                 .selector      = DEFAULT_SELECTOR,
364                 .pgpolicy      = GROUP_BY_SERIAL,
365                 .pgfailback    = FAILBACK_UNDEF,
366                 .rr_weight     = RR_WEIGHT_NONE,
367                 .no_path_retry = NO_PATH_RETRY_UNDEF,
368                 .minio         = DEFAULT_MINIO,
369                 .checker_name  = TUR,
370                 .prio_name     = DEFAULT_PRIO,
371         },
372         {
373                 /* IBM ESS F20 aka Shark */
374                 .vendor        = "IBM",
375                 .product       = "2105(800|F20)",
376                 .getuid        = DEFAULT_GETUID,
377                 .features      = "1 queue_if_no_path",
378                 .hwhandler     = DEFAULT_HWHANDLER,
379                 .selector      = DEFAULT_SELECTOR,
380                 .pgpolicy      = GROUP_BY_SERIAL,
381                 .pgfailback    = FAILBACK_UNDEF,
382                 .rr_weight     = RR_WEIGHT_NONE,
383                 .no_path_retry = NO_PATH_RETRY_UNDEF,
384                 .minio         = DEFAULT_MINIO,
385                 .checker_name  = TUR,
386                 .prio_name     = DEFAULT_PRIO,
387         },
388         {
389                 /* IBM DS6000 */
390                 .vendor        = "IBM",
391                 .product       = "1750500",
392                 .getuid        = DEFAULT_GETUID,
393                 .features      = "1 queue_if_no_path",
394                 .hwhandler     = DEFAULT_HWHANDLER,
395                 .selector      = DEFAULT_SELECTOR,
396                 .pgpolicy      = GROUP_BY_PRIO,
397                 .pgfailback    = -FAILBACK_IMMEDIATE,
398                 .rr_weight     = RR_WEIGHT_NONE,
399                 .no_path_retry = NO_PATH_RETRY_UNDEF,
400                 .minio         = DEFAULT_MINIO,
401                 .checker_name  = TUR,
402                 .prio_name     = PRIO_ALUA,
403         },
404         {
405                 /* IBM DS8000 */
406                 .vendor        = "IBM",
407                 .product       = "2107900",
408                 .getuid        = DEFAULT_GETUID,
409                 .features      = "1 queue_if_no_path",
410                 .hwhandler     = DEFAULT_HWHANDLER,
411                 .selector      = DEFAULT_SELECTOR,
412                 .pgpolicy      = MULTIBUS,
413                 .pgfailback    = FAILBACK_UNDEF,
414                 .rr_weight     = RR_WEIGHT_NONE,
415                 .no_path_retry = NO_PATH_RETRY_UNDEF,
416                 .minio         = DEFAULT_MINIO,
417                 .checker_name  = TUR,
418                 .prio_name     = DEFAULT_PRIO,
419         },
420         {
421                 /* IBM SAN Volume Controller */
422                 .vendor        = "IBM",
423                 .product       = "2145",
424                 .getuid        = DEFAULT_GETUID,
425                 .features      = "1 queue_if_no_path",
426                 .hwhandler     = DEFAULT_HWHANDLER,
427                 .selector      = DEFAULT_SELECTOR,
428                 .pgpolicy      = GROUP_BY_PRIO,
429                 .pgfailback    = -FAILBACK_IMMEDIATE,
430                 .rr_weight     = RR_WEIGHT_NONE,
431                 .no_path_retry = NO_PATH_RETRY_UNDEF,
432                 .minio         = DEFAULT_MINIO,
433                 .checker_name  = TUR,
434                 .prio_name     = PRIO_ALUA,
435         },
436         {
437                 /* IBM S/390 ECKD DASD */
438                 .vendor        = "IBM",
439                 .product       = "S/390 DASD ECKD",
440                 .bl_product       = "S/390.*",
441                 .getuid        = "/sbin/dasdinfo -u -b %n",
442                 .features      = "1 queue_if_no_path",
443                 .hwhandler     = DEFAULT_HWHANDLER,
444                 .selector      = DEFAULT_SELECTOR,
445                 .pgpolicy      = MULTIBUS,
446                 .pgfailback    = FAILBACK_UNDEF,
447                 .rr_weight     = RR_WEIGHT_NONE,
448                 .no_path_retry = NO_PATH_RETRY_UNDEF,
449                 .minio         = DEFAULT_MINIO,
450                 .checker_name  = DIRECTIO,
451                 .prio_name     = DEFAULT_PRIO,
452         },
453         /*
454          * NETAPP controller family
455          *
456          * Maintainer : Dave Wysochanski
457          * Mail : davidw@netapp.com
458          */
459         {
460                 .vendor        = "NETAPP",
461                 .product       = "LUN.*",
462                 .getuid        = DEFAULT_GETUID,
463                 .features      = "1 queue_if_no_path",
464                 .hwhandler     = DEFAULT_HWHANDLER,
465                 .selector      = DEFAULT_SELECTOR,
466                 .pgpolicy      = GROUP_BY_PRIO,
467                 .pgfailback    = -FAILBACK_IMMEDIATE,
468                 .rr_weight     = RR_WEIGHT_NONE,
469                 .no_path_retry = NO_PATH_RETRY_UNDEF,
470                 .minio         = 128,
471                 .checker_name  = DIRECTIO,
472                 .prio_name     = PRIO_NETAPP,
473         },
474         /*
475          * IBM NSeries (NETAPP) controller family
476          *
477          * Maintainer : Dave Wysochanski
478          * Mail : davidw@netapp.com
479          */
480         {
481                 .vendor        = "IBM",
482                 .product       = "Nseries.*",
483                 .getuid        = DEFAULT_GETUID,
484                 .features      = "1 queue_if_no_path",
485                 .hwhandler     = DEFAULT_HWHANDLER,
486                 .selector      = DEFAULT_SELECTOR,
487                 .pgpolicy      = GROUP_BY_PRIO,
488                 .pgfailback    = -FAILBACK_IMMEDIATE,
489                 .rr_weight     = RR_WEIGHT_NONE,
490                 .no_path_retry = NO_PATH_RETRY_UNDEF,
491                 .minio         = 128,
492                 .checker_name  = DIRECTIO,
493                 .prio_name     = PRIO_NETAPP,
494         },
495         /*
496          * Pillar Data controller family
497          *
498          * Maintainer : Srinivasan Ramani
499          * Mail : sramani@pillardata.com
500          */
501         {
502                 .vendor        = "Pillar",
503                 .product       = "Axiom.*",
504                 .getuid        = DEFAULT_GETUID,
505                 .features      = DEFAULT_FEATURES,
506                 .hwhandler     = DEFAULT_HWHANDLER,
507                 .selector      = DEFAULT_SELECTOR,
508                 .pgpolicy      = GROUP_BY_PRIO,
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  = TUR,
514                 .prio_name     = PRIO_ALUA,
515         },
516         /*
517          * SGI arrays
518          *
519          * Maintainer : Christophe Varoqui
520          * Mail : christophe.varoqui@free.fr
521          */
522         {
523                 .vendor        = "SGI",
524                 .product       = "TP9[13]00",
525                 .getuid        = DEFAULT_GETUID,
526                 .features      = DEFAULT_FEATURES,
527                 .hwhandler     = DEFAULT_HWHANDLER,
528                 .selector      = DEFAULT_SELECTOR,
529                 .pgpolicy      = MULTIBUS,
530                 .pgfailback    = FAILBACK_UNDEF,
531                 .rr_weight     = RR_WEIGHT_NONE,
532                 .no_path_retry = NO_PATH_RETRY_UNDEF,
533                 .minio         = DEFAULT_MINIO,
534                 .checker_name  = DIRECTIO,
535                 .prio_name     = DEFAULT_PRIO,
536         },
537         {
538                 .vendor        = "SGI",
539                 .product       = "TP9[45]00",
540                 .getuid        = DEFAULT_GETUID,
541                 .features      = DEFAULT_FEATURES,
542                 .hwhandler     = DEFAULT_HWHANDLER,
543                 .selector      = DEFAULT_SELECTOR,
544                 .pgpolicy      = GROUP_BY_PRIO,
545                 .pgfailback    = -FAILBACK_IMMEDIATE,
546                 .rr_weight     = RR_WEIGHT_NONE,
547                 .no_path_retry = NO_PATH_RETRY_QUEUE,
548                 .minio         = DEFAULT_MINIO,
549                 .checker_name  = RDAC,
550                 .prio_name     = PRIO_RDAC,
551         },
552         {
553                 .vendor        = "SGI",
554                 .product       = "IS.*",
555                 .getuid        = DEFAULT_GETUID,
556                 .features      = DEFAULT_FEATURES,
557                 .hwhandler     = DEFAULT_HWHANDLER,
558                 .selector      = DEFAULT_SELECTOR,
559                 .pgpolicy      = GROUP_BY_PRIO,
560                 .pgfailback    = -FAILBACK_IMMEDIATE,
561                 .rr_weight     = RR_WEIGHT_NONE,
562                 .no_path_retry = NO_PATH_RETRY_QUEUE,
563                 .minio         = DEFAULT_MINIO,
564                 .checker_name  = RDAC,
565                 .prio_name     = PRIO_RDAC,
566         },
567         /*
568          * STK arrays
569          *
570          * Maintainer : Christophe Varoqui
571          * Mail : christophe.varoqui@free.fr
572          */
573         {
574                 .vendor        = "STK",
575                 .product       = "OPENstorage D280",
576                 .getuid        = DEFAULT_GETUID,
577                 .features      = DEFAULT_FEATURES,
578                 .hwhandler     = DEFAULT_HWHANDLER,
579                 .selector      = DEFAULT_SELECTOR,
580                 .pgpolicy      = GROUP_BY_PRIO,
581                 .pgfailback    = -FAILBACK_IMMEDIATE,
582                 .rr_weight     = RR_WEIGHT_NONE,
583                 .no_path_retry = NO_PATH_RETRY_UNDEF,
584                 .minio         = DEFAULT_MINIO,
585                 .checker_name  = TUR,
586                 .prio_name     = PRIO_RDAC,
587         },
588         /*
589          * SUN arrays
590          *
591          * Maintainer : Christophe Varoqui
592          * Mail : christophe.varoqui@free.fr
593          */
594         {
595                 .vendor        = "SUN",
596                 .product       = "(StorEdge 3510|T4)",
597                 .getuid        = DEFAULT_GETUID,
598                 .features      = DEFAULT_FEATURES,
599                 .hwhandler     = DEFAULT_HWHANDLER,
600                 .selector      = DEFAULT_SELECTOR,
601                 .pgpolicy      = MULTIBUS,
602                 .pgfailback    = FAILBACK_UNDEF,
603                 .rr_weight     = RR_WEIGHT_NONE,
604                 .no_path_retry = NO_PATH_RETRY_UNDEF,
605                 .minio         = DEFAULT_MINIO,
606                 .checker_name  = DIRECTIO,
607                 .prio_name     = DEFAULT_PRIO,
608         },
609         /*
610          * Pivot3 RAIGE
611          *
612          * Maintainer : Bart Brooks, Pivot3
613          * Mail : bartb@pivot3.com
614          */
615         {
616                 .vendor        = "PIVOT3",
617                 .product       = "RAIGE VOLUME",
618                 .getuid        = "/sbin/scsi_id -p 0x80 -g -u -s /block/%n",
619                 .features      = "1 queue_if_no_path",
620                 .hwhandler     = DEFAULT_HWHANDLER,
621                 .selector      = DEFAULT_SELECTOR,
622                 .pgpolicy      = MULTIBUS,
623                 .pgfailback    = FAILBACK_UNDEF,
624                 .rr_weight     = RR_WEIGHT_NONE,
625                 .no_path_retry = NO_PATH_RETRY_UNDEF,
626                 .minio         = 100,
627                 .checker_name  = TUR,
628                 .prio_name     = DEFAULT_PRIO,
629         },
630         /*
631          * EOL
632          */
633         {
634                 .vendor        = NULL,
635                 .product       = NULL,
636                 .getuid        = NULL,
637                 .features      = NULL,
638                 .hwhandler     = NULL,
639                 .selector      = NULL,
640                 .pgpolicy      = 0,
641                 .pgfailback    = 0,
642                 .rr_weight     = 0,
643                 .no_path_retry = 0,
644                 .minio         = 0,
645                 .checker_name  = NULL,
646                 .prio_name     = NULL,
647         },
648 };
649
650 extern int
651 setup_default_hwtable (vector hw)
652 {
653         int r = 0;
654         struct hwentry * hwe = default_hw;
655
656         while (hwe->vendor) {
657                 hwe->checker = checker_lookup(hwe->checker_name);
658                 hwe->prio = prio_lookup(hwe->prio_name);
659                 r += store_hwe(hw, hwe);
660                 hwe++;
661         }
662         return r;
663 }