Merge branch 'master' of git://git.kernel.org/pub/scm/linux/storage/multipath-tools/
[platform/upstream/multipath-tools.git] / libmultipath / hwtable.c
1 #include <stdio.h>
2
3 #include <checkers.h>
4
5 #include "vector.h"
6 #include "defaults.h"
7 #include "structs.h"
8 #include "config.h"
9 #include "pgpolicies.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                 .getprio       = NULL,
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         },
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                 .getprio       = NULL,
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         },
62         {
63                 .vendor        = "DEC",
64                 .product       = "HSG80",
65                 .getuid        = DEFAULT_GETUID,
66                 .getprio       = "/sbin/mpath_prio_hp_sw /dev/%n",
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         },
77         {
78                 .vendor        = "HP",
79                 .product       = "A6189A",
80                 .getuid        = DEFAULT_GETUID,
81                 .getprio       = NULL,
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  = READSECTOR0,
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                 .getprio       = "/sbin/mpath_prio_hp_sw /dev/%n",
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         },
108         {
109                 /* MSA 1000/1500 with new firmware */
110                 .vendor        = "HP",
111                 .product       = "MSA VOLUME",
112                 .getuid        = DEFAULT_GETUID,
113                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
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         },
124         {
125                 /* EVA 3000/5000 with new firmware */
126                 .vendor        = "(COMPAQ|HP)",
127                 .product       = "(MSA|HSV)1.1.*",
128                 .getuid        = DEFAULT_GETUID,
129                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
130                 .features      = DEFAULT_FEATURES,
131                 .hwhandler     = DEFAULT_HWHANDLER,
132                 .selector      = DEFAULT_SELECTOR,
133                 .pgpolicy      = GROUP_BY_PRIO,
134                 .pgfailback    = -FAILBACK_IMMEDIATE,
135                 .rr_weight     = RR_WEIGHT_NONE,
136                 .no_path_retry = NO_PATH_RETRY_UNDEF,
137                 .minio         = DEFAULT_MINIO,
138                 .checker_name  = TUR,
139         },
140         {
141                 /* EVA 4000/6000/8000 */
142                 .vendor        = "HP",
143                 .product       = "HSV2.*",
144                 .getuid        = DEFAULT_GETUID,
145                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
146                 .features      = DEFAULT_FEATURES,
147                 .hwhandler     = DEFAULT_HWHANDLER,
148                 .selector      = DEFAULT_SELECTOR,
149                 .pgpolicy      = GROUP_BY_PRIO,
150                 .pgfailback    = -FAILBACK_IMMEDIATE,
151                 .rr_weight     = RR_WEIGHT_NONE,
152                 .no_path_retry = NO_PATH_RETRY_UNDEF,
153                 .minio         = DEFAULT_MINIO,
154                 .checker_name  = TUR,
155         },
156         {
157                 /* HP Smart Array */
158                 .vendor        = "HP",
159                 .product       = "LOGICAL VOLUME.*",
160                 .getuid        = "/lib/udev/scsi_id -n -g -u -s /block/%n",
161                 .getprio       = NULL,
162                 .features      = DEFAULT_FEATURES,
163                 .hwhandler     = DEFAULT_HWHANDLER,
164                 .selector      = DEFAULT_SELECTOR,
165                 .pgpolicy      = MULTIBUS,
166                 .pgfailback    = FAILBACK_UNDEF,
167                 .rr_weight     = RR_WEIGHT_NONE,
168                 .no_path_retry = NO_PATH_RETRY_UNDEF,
169                 .minio         = DEFAULT_MINIO,
170                 .checker_name  = TUR,
171         },
172         /*
173          * DDN controller family
174          *
175          * Maintainer : Christophe Varoqui
176          * Mail : christophe.varoqui@free.fr
177          */
178         {
179                 .vendor        = "DDN",
180                 .product       = "SAN DataDirector",
181                 .getuid        = DEFAULT_GETUID,
182                 .getprio       = NULL,
183                 .features      = DEFAULT_FEATURES,
184                 .hwhandler     = DEFAULT_HWHANDLER,
185                 .selector      = DEFAULT_SELECTOR,
186                 .pgpolicy      = MULTIBUS,
187                 .pgfailback    = FAILBACK_UNDEF,
188                 .rr_weight     = RR_WEIGHT_NONE,
189                 .no_path_retry = NO_PATH_RETRY_UNDEF,
190                 .minio         = DEFAULT_MINIO,
191                 .checker_name  = DIRECTIO,
192         },
193         /*
194          * EMC / Clariion controller family
195          *
196          * Maintainer : Edward Goggin, EMC
197          * Mail : egoggin@emc.com
198          */
199         {
200                 .vendor        = "EMC",
201                 .product       = "SYMMETRIX",
202                 .getuid        = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n",
203                 .getprio       = NULL,
204                 .features      = DEFAULT_FEATURES,
205                 .hwhandler     = DEFAULT_HWHANDLER,
206                 .selector      = DEFAULT_SELECTOR,
207                 .pgpolicy      = MULTIBUS,
208                 .pgfailback    = FAILBACK_UNDEF,
209                 .rr_weight     = RR_WEIGHT_NONE,
210                 .no_path_retry = NO_PATH_RETRY_UNDEF,
211                 .minio         = DEFAULT_MINIO,
212                 .checker_name  = READSECTOR0,
213         },
214         {
215                 .vendor        = "DGC",
216                 .product       = ".*",
217                 .bl_product    = "LUNZ",
218                 .getuid        = DEFAULT_GETUID,
219                 .getprio       = "/sbin/mpath_prio_emc /dev/%n",
220                 .features      = "1 queue_if_no_path",
221                 .hwhandler     = "1 emc",
222                 .selector      = DEFAULT_SELECTOR,
223                 .pgpolicy      = GROUP_BY_PRIO,
224                 .pgfailback    = -FAILBACK_IMMEDIATE,
225                 .rr_weight     = RR_WEIGHT_NONE,
226                 .no_path_retry = (300 / DEFAULT_CHECKINT),
227                 .minio         = DEFAULT_MINIO,
228                 .checker_name  = EMC_CLARIION,
229         },
230         /*
231          * Fujitsu controller family
232          *
233          * Maintainer : Christophe Varoqui
234          * Mail : christophe.varoqui@free.fr
235          */
236         {
237                 .vendor        = "FSC",
238                 .product       = "CentricStor",
239                 .getuid        = DEFAULT_GETUID,
240                 .getprio       = NULL,
241                 .features      = DEFAULT_FEATURES,
242                 .hwhandler     = DEFAULT_HWHANDLER,
243                 .selector      = DEFAULT_SELECTOR,
244                 .pgpolicy      = GROUP_BY_SERIAL,
245                 .pgfailback    = FAILBACK_UNDEF,
246                 .rr_weight     = RR_WEIGHT_NONE,
247                 .no_path_retry = NO_PATH_RETRY_UNDEF,
248                 .minio         = DEFAULT_MINIO,
249                 .checker_name  = READSECTOR0,
250         },
251         /*
252          * Hitachi controller family
253          *
254          * Maintainer : Matthias Rudolph
255          * Mail : matthias.rudolph@hds.com
256          */
257         {
258                 .vendor        = "(HITACHI|HP)",
259                 .product       = "OPEN-.*",
260                 .getuid        = DEFAULT_GETUID,
261                 .getprio       = NULL,
262                 .features      = "1 queue_if_no_path",
263                 .hwhandler     = DEFAULT_HWHANDLER,
264                 .selector      = DEFAULT_SELECTOR,
265                 .pgpolicy      = MULTIBUS,
266                 .pgfailback    = FAILBACK_UNDEF,
267                 .rr_weight     = RR_WEIGHT_NONE,
268                 .no_path_retry = NO_PATH_RETRY_UNDEF,
269                 .minio         = DEFAULT_MINIO,
270                 .checker_name  = TUR,
271         },
272         {
273                 .vendor        = "HITACHI",
274                 .product       = "DF.*",
275                 .getuid        = DEFAULT_GETUID,
276                 .getprio       = "/sbin/mpath_prio_hds_modular /dev/%n",
277                 .features      = "1 queue_if_no_path",
278                 .hwhandler     = DEFAULT_HWHANDLER,
279                 .selector      = DEFAULT_SELECTOR,
280                 .pgpolicy      = GROUP_BY_PRIO,
281                 .pgfailback    = -FAILBACK_IMMEDIATE,
282                 .rr_weight     = RR_WEIGHT_NONE,
283                 .no_path_retry = NO_PATH_RETRY_UNDEF,
284                 .minio         = DEFAULT_MINIO,
285                 .checker_name  = TUR,
286         },
287         /*
288          * IBM controller family
289          *
290          * Maintainer : Hannes Reinecke, SuSE
291          * Mail : hare@suse.de
292          */
293         {
294                 .vendor        = "IBM",
295                 .product       = "ProFibre 4000R",
296                 .getuid        = DEFAULT_GETUID,
297                 .getprio       = NULL,
298                 .features      = DEFAULT_FEATURES,
299                 .hwhandler     = DEFAULT_HWHANDLER,
300                 .selector      = DEFAULT_SELECTOR,
301                 .pgpolicy      = MULTIBUS,
302                 .pgfailback    = FAILBACK_UNDEF,
303                 .rr_weight     = RR_WEIGHT_NONE,
304                 .no_path_retry = NO_PATH_RETRY_UNDEF,
305                 .minio         = DEFAULT_MINIO,
306                 .checker_name  = READSECTOR0,
307         },
308         {
309                 /* IBM DS4100 / FAStT100 */
310                 .vendor        = "IBM",
311                 .product       = "1742",
312                 .getuid        = DEFAULT_GETUID,
313                 .getprio       = "/sbin/mpath_prio_rdac /dev/%n",
314                 .features      = DEFAULT_FEATURES,
315                 .hwhandler     = DEFAULT_HWHANDLER,
316                 .selector      = DEFAULT_SELECTOR,
317                 .pgpolicy      = GROUP_BY_PRIO,
318                 .pgfailback    = -FAILBACK_IMMEDIATE,
319                 .rr_weight     = RR_WEIGHT_NONE,
320                 .no_path_retry = NO_PATH_RETRY_UNDEF,
321                 .minio         = DEFAULT_MINIO,
322                 .checker_name  = TUR,
323         },
324         {
325                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
326                 .vendor        = "IBM",
327                 .product       = "3526",
328                 .getuid        = DEFAULT_GETUID,
329                 .getprio       = "/sbin/mpath_prio_rdac /dev/%n",
330                 .features      = DEFAULT_FEATURES,
331                 .hwhandler     = DEFAULT_HWHANDLER,
332                 .selector      = DEFAULT_SELECTOR,
333                 .pgpolicy      = GROUP_BY_PRIO,
334                 .pgfailback    = -FAILBACK_IMMEDIATE,
335                 .rr_weight     = RR_WEIGHT_NONE,
336                 .no_path_retry = NO_PATH_RETRY_UNDEF,
337                 .minio         = DEFAULT_MINIO,
338                 .checker_name  = TUR,
339         },
340         {
341                 /* IBM DS4200 / FAStT200 */
342                 .vendor        = "IBM",
343                 .product       = "3542",
344                 .getuid        = DEFAULT_GETUID,
345                 .getprio       = NULL,
346                 .features      = DEFAULT_FEATURES,
347                 .hwhandler     = DEFAULT_HWHANDLER,
348                 .selector      = DEFAULT_SELECTOR,
349                 .pgpolicy      = GROUP_BY_SERIAL,
350                 .pgfailback    = FAILBACK_UNDEF,
351                 .rr_weight     = RR_WEIGHT_NONE,
352                 .no_path_retry = NO_PATH_RETRY_UNDEF,
353                 .minio         = DEFAULT_MINIO,
354                 .checker_name  = TUR,
355         },
356         {
357                 /* IBM ESS F20 aka Shark */
358                 .vendor        = "IBM",
359                 .product       = "2105(800|F20)",
360                 .getuid        = DEFAULT_GETUID,
361                 .getprio       = NULL,
362                 .features      = "1 queue_if_no_path",
363                 .hwhandler     = DEFAULT_HWHANDLER,
364                 .selector      = DEFAULT_SELECTOR,
365                 .pgpolicy      = GROUP_BY_SERIAL,
366                 .pgfailback    = FAILBACK_UNDEF,
367                 .rr_weight     = RR_WEIGHT_NONE,
368                 .no_path_retry = NO_PATH_RETRY_UNDEF,
369                 .minio         = DEFAULT_MINIO,
370                 .checker_name  = TUR,
371         },
372         {
373                 /* IBM DS6000 */
374                 .vendor        = "IBM",
375                 .product       = "1750500",
376                 .getuid        = DEFAULT_GETUID,
377                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
378                 .features      = "1 queue_if_no_path",
379                 .hwhandler     = DEFAULT_HWHANDLER,
380                 .selector      = DEFAULT_SELECTOR,
381                 .pgpolicy      = GROUP_BY_PRIO,
382                 .pgfailback    = -FAILBACK_IMMEDIATE,
383                 .rr_weight     = RR_WEIGHT_NONE,
384                 .no_path_retry = NO_PATH_RETRY_UNDEF,
385                 .minio         = DEFAULT_MINIO,
386                 .checker_name  = TUR,
387         },
388         {
389                 /* IBM DS8000 */
390                 .vendor        = "IBM",
391                 .product       = "2107900",
392                 .getuid        = DEFAULT_GETUID,
393                 .getprio       = NULL,
394                 .features      = "1 queue_if_no_path",
395                 .hwhandler     = DEFAULT_HWHANDLER,
396                 .selector      = DEFAULT_SELECTOR,
397                 .pgpolicy      = MULTIBUS,
398                 .pgfailback    = FAILBACK_UNDEF,
399                 .rr_weight     = RR_WEIGHT_NONE,
400                 .no_path_retry = NO_PATH_RETRY_UNDEF,
401                 .minio         = DEFAULT_MINIO,
402                 .checker_name  = TUR,
403         },
404         {
405                 /* IBM SAN Volume Controller */
406                 .vendor        = "IBM",
407                 .product       = "2145",
408                 .getuid        = DEFAULT_GETUID,
409                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
410                 .features      = "1 queue_if_no_path",
411                 .hwhandler     = DEFAULT_HWHANDLER,
412                 .selector      = DEFAULT_SELECTOR,
413                 .pgpolicy      = GROUP_BY_PRIO,
414                 .pgfailback    = -FAILBACK_IMMEDIATE,
415                 .rr_weight     = RR_WEIGHT_NONE,
416                 .no_path_retry = NO_PATH_RETRY_UNDEF,
417                 .minio         = DEFAULT_MINIO,
418                 .checker_name  = TUR,
419         },
420         {
421                 /* IBM S/390 ECKD DASD */
422                 .vendor        = "IBM",
423                 .product       = "S/390 DASD ECKD",
424                 .bl_product       = "S/390.*",
425                 .getuid        = "/sbin/dasdinfo -u -b %n",
426                 .getprio       = NULL,
427                 .features      = "1 queue_if_no_path",
428                 .hwhandler     = DEFAULT_HWHANDLER,
429                 .selector      = DEFAULT_SELECTOR,
430                 .pgpolicy      = MULTIBUS,
431                 .pgfailback    = FAILBACK_UNDEF,
432                 .rr_weight     = RR_WEIGHT_NONE,
433                 .no_path_retry = NO_PATH_RETRY_UNDEF,
434                 .minio         = DEFAULT_MINIO,
435                 .checker_name  = DIRECTIO,
436         },
437         /*
438          * NETAPP controller family
439          *
440          * Maintainer : Dave Wysochanski
441          * Mail : davidw@netapp.com
442          */
443         {
444                 .vendor        = "NETAPP",
445                 .product       = "LUN.*",
446                 .getuid        = DEFAULT_GETUID,
447                 .getprio       = "/sbin/mpath_prio_netapp /dev/%n",
448                 .features      = "1 queue_if_no_path",
449                 .hwhandler     = DEFAULT_HWHANDLER,
450                 .selector      = DEFAULT_SELECTOR,
451                 .pgpolicy      = GROUP_BY_PRIO,
452                 .pgfailback    = -FAILBACK_IMMEDIATE,
453                 .rr_weight     = RR_WEIGHT_NONE,
454                 .no_path_retry = NO_PATH_RETRY_UNDEF,
455                 .minio         = 128,
456                 .checker_name  = READSECTOR0,
457         },
458         /*
459          * IBM NSeries (NETAPP) controller family
460          *
461          * Maintainer : Dave Wysochanski
462          * Mail : davidw@netapp.com
463          */
464         {
465                 .vendor        = "IBM",
466                 .product       = "Nseries.*",
467                 .getuid        = DEFAULT_GETUID,
468                 .getprio       = "/sbin/mpath_prio_netapp /dev/%n",
469                 .features      = "1 queue_if_no_path",
470                 .hwhandler     = DEFAULT_HWHANDLER,
471                 .selector      = DEFAULT_SELECTOR,
472                 .pgpolicy      = GROUP_BY_PRIO,
473                 .pgfailback    = -FAILBACK_IMMEDIATE,
474                 .rr_weight     = RR_WEIGHT_NONE,
475                 .no_path_retry = NO_PATH_RETRY_UNDEF,
476                 .minio         = 128,
477                 .checker_name  = READSECTOR0,
478         },
479         /*
480          * Pillar Data controller family
481          *
482          * Maintainer : Srinivasan Ramani
483          * Mail : sramani@pillardata.com
484          */
485         {
486                 .vendor        = "Pillar",
487                 .product       = "Axiom.*",
488                 .getuid        = DEFAULT_GETUID,
489                 .getprio       = "/sbin/mpath_prio_alua %n",
490                 .features      = DEFAULT_FEATURES,
491                 .hwhandler     = DEFAULT_HWHANDLER,
492                 .selector      = DEFAULT_SELECTOR,
493                 .pgpolicy      = GROUP_BY_PRIO,
494                 .pgfailback    = FAILBACK_UNDEF,
495                 .rr_weight     = RR_WEIGHT_NONE,
496                 .no_path_retry = NO_PATH_RETRY_UNDEF,
497                 .minio         = DEFAULT_MINIO,
498                 .checker_name  = TUR,
499         },
500         /*
501          * SGI arrays
502          *
503          * Maintainer : Christophe Varoqui
504          * Mail : christophe.varoqui@free.fr
505          */
506         {
507                 .vendor        = "SGI",
508                 .product       = "TP9[13]00",
509                 .getuid        = DEFAULT_GETUID,
510                 .getprio       = NULL,
511                 .features      = DEFAULT_FEATURES,
512                 .hwhandler     = DEFAULT_HWHANDLER,
513                 .selector      = DEFAULT_SELECTOR,
514                 .pgpolicy      = MULTIBUS,
515                 .pgfailback    = FAILBACK_UNDEF,
516                 .rr_weight     = RR_WEIGHT_NONE,
517                 .no_path_retry = NO_PATH_RETRY_UNDEF,
518                 .minio         = DEFAULT_MINIO,
519                 .checker_name  = READSECTOR0,
520         },
521         {
522                 .vendor        = "SGI",
523                 .product       = "TP9[45]00",
524                 .getuid        = DEFAULT_GETUID,
525                 .getprio       = "/sbin/mpath_prio_rdac /dev/%n",
526                 .features      = DEFAULT_FEATURES,
527                 .hwhandler     = DEFAULT_HWHANDLER,
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         },
536         {
537                 .vendor        = "SGI",
538                 .product       = "IS.*",
539                 .getuid        = DEFAULT_GETUID,
540                 .getprio       = "/sbin/mpath_prio_rdac /dev/%n",
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         },
551         /*
552          * STK arrays
553          *
554          * Maintainer : Christophe Varoqui
555          * Mail : christophe.varoqui@free.fr
556          */
557         {
558                 .vendor        = "STK",
559                 .product       = "OPENstorage D280",
560                 .getuid        = DEFAULT_GETUID,
561                 .getprio       = "/sbin/mpath_prio_rdac /dev/%n",
562                 .features      = DEFAULT_FEATURES,
563                 .hwhandler     = DEFAULT_HWHANDLER,
564                 .selector      = DEFAULT_SELECTOR,
565                 .pgpolicy      = GROUP_BY_PRIO,
566                 .pgfailback    = -FAILBACK_IMMEDIATE,
567                 .rr_weight     = RR_WEIGHT_NONE,
568                 .no_path_retry = NO_PATH_RETRY_UNDEF,
569                 .minio         = DEFAULT_MINIO,
570                 .checker_name  = TUR,
571         },
572         /*
573          * SUN arrays
574          *
575          * Maintainer : Christophe Varoqui
576          * Mail : christophe.varoqui@free.fr
577          */
578         {
579                 .vendor        = "SUN",
580                 .product       = "(StorEdge 3510|T4)",
581                 .getuid        = DEFAULT_GETUID,
582                 .getprio       = NULL,
583                 .features      = DEFAULT_FEATURES,
584                 .hwhandler     = DEFAULT_HWHANDLER,
585                 .selector      = DEFAULT_SELECTOR,
586                 .pgpolicy      = MULTIBUS,
587                 .pgfailback    = FAILBACK_UNDEF,
588                 .rr_weight     = RR_WEIGHT_NONE,
589                 .no_path_retry = NO_PATH_RETRY_UNDEF,
590                 .minio         = DEFAULT_MINIO,
591                 .checker_name  = READSECTOR0,
592         },
593         /*
594          * EOL
595          */
596         {
597                 .vendor        = NULL,
598                 .product       = NULL,
599                 .getuid        = NULL,
600                 .getprio       = NULL,
601                 .features      = NULL,
602                 .hwhandler     = NULL,
603                 .selector      = NULL,
604                 .pgpolicy      = 0,
605                 .pgfailback    = 0,
606                 .rr_weight     = 0,
607                 .no_path_retry = 0,
608                 .minio         = 0,
609                 .checker_name  = NULL,
610         },
611 };
612
613 extern int
614 setup_default_hwtable (vector hw)
615 {
616         int r = 0;
617         struct hwentry * hwe = default_hw;
618
619         while (hwe->vendor) {
620                 hwe->checker = checker_lookup(hwe->checker_name);
621                 r += store_hwe(hw, hwe);
622                 hwe++;
623         }
624         return r;
625 }