[libmultipath] Update HP HSV200 hardware table
[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       = NULL,
67                 .features      = DEFAULT_FEATURES,
68                 .hwhandler     = "1 hp_sw",
69                 .selector      = DEFAULT_SELECTOR,
70                 .pgpolicy      = GROUP_BY_SERIAL,
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        = "(COMPAQ|HP)",
79                 .product       = "(MSA|HSV)1.*",
80                 .getuid        = DEFAULT_GETUID,
81                 .getprio       = NULL,
82                 .features      = DEFAULT_FEATURES,
83                 .hwhandler     = "1 hp_sw",
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  = HP_SW,
91         },
92         {
93                 .vendor        = "HP",
94                 .product       = "A6189A",
95                 .getuid        = DEFAULT_GETUID,
96                 .getprio       = NULL,
97                 .features      = DEFAULT_FEATURES,
98                 .hwhandler     = DEFAULT_HWHANDLER,
99                 .selector      = DEFAULT_SELECTOR,
100                 .pgpolicy      = MULTIBUS,
101                 .pgfailback    = FAILBACK_UNDEF,
102                 .rr_weight     = RR_WEIGHT_NONE,
103                 .no_path_retry = NO_PATH_RETRY_UNDEF,
104                 .minio         = DEFAULT_MINIO,
105                 .checker_name  = READSECTOR0,
106         },
107         {
108                 .vendor        = "HP",
109                 .product       = "HSV20.*",
110                 .revision      = "[123].*",
111                 .getuid        = DEFAULT_GETUID,
112                 .getprio       = NULL,
113                 .features      = DEFAULT_FEATURES,
114                 .hwhandler     = DEFAULT_HWHANDLER,
115                 .selector      = DEFAULT_SELECTOR,
116                 .pgpolicy      = MULTIBUS,
117                 .pgfailback    = FAILBACK_UNDEF,
118                 .rr_weight     = RR_WEIGHT_NONE,
119                 .no_path_retry = NO_PATH_RETRY_UNDEF,
120                 .minio         = DEFAULT_MINIO,
121                 .checker_name  = HP_SW,
122         },
123         {
124                 .vendor        = "HP",
125                 .product       = "HSV20.*",
126                 .revision      = "[^123].*",
127                 .getuid        = DEFAULT_GETUID,
128                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
129                 .features      = DEFAULT_FEATURES,
130                 .hwhandler     = DEFAULT_HWHANDLER,
131                 .selector      = DEFAULT_SELECTOR,
132                 .pgpolicy      = MULTIBUS,
133                 .pgfailback    = -FAILBACK_IMMEDIATE,
134                 .rr_weight     = RR_WEIGHT_PRIORITIES,
135                 .no_path_retry = NO_PATH_RETRY_UNDEF,
136                 .minio         = DEFAULT_MINIO,
137                 .checker_name  = TUR,
138         },
139         {
140                 .vendor        = "HP",
141                 .product       = "HSV21.*",
142                 .getuid        = DEFAULT_GETUID,
143                 .getprio       = "/sbin/mpath_prio_alua /dev/%n",
144                 .features      = DEFAULT_FEATURES,
145                 .hwhandler     = DEFAULT_HWHANDLER,
146                 .selector      = DEFAULT_SELECTOR,
147                 .pgpolicy      = GROUP_BY_PRIO,
148                 .pgfailback    = FAILBACK_UNDEF,
149                 .rr_weight     = RR_WEIGHT_NONE,
150                 .no_path_retry = NO_PATH_RETRY_UNDEF,
151                 .minio         = DEFAULT_MINIO,
152                 .checker_name  = TUR,
153         },
154         /*
155          * DDN controller family
156          *
157          * Maintainer : Christophe Varoqui
158          * Mail : christophe.varoqui@free.fr
159          */
160         {
161                 .vendor        = "DDN",
162                 .product       = "SAN DataDirector",
163                 .getuid        = DEFAULT_GETUID,
164                 .getprio       = NULL,
165                 .features      = DEFAULT_FEATURES,
166                 .hwhandler     = DEFAULT_HWHANDLER,
167                 .selector      = DEFAULT_SELECTOR,
168                 .pgpolicy      = MULTIBUS,
169                 .pgfailback    = FAILBACK_UNDEF,
170                 .rr_weight     = RR_WEIGHT_NONE,
171                 .no_path_retry = NO_PATH_RETRY_UNDEF,
172                 .minio         = DEFAULT_MINIO,
173                 .checker_name  = READSECTOR0,
174         },
175         /*
176          * EMC / Clariion controller family
177          *
178          * Maintainer : Edward Goggin, EMC
179          * Mail : egoggin@emc.com
180          */
181         {
182                 .vendor        = "EMC",
183                 .product       = "SYMMETRIX",
184                 .getuid        = "scsi_id -g -u -ppre-spc3-83 -s /block/%n",
185                 .getprio       = NULL,
186                 .features      = DEFAULT_FEATURES,
187                 .hwhandler     = DEFAULT_HWHANDLER,
188                 .selector      = DEFAULT_SELECTOR,
189                 .pgpolicy      = MULTIBUS,
190                 .pgfailback    = FAILBACK_UNDEF,
191                 .rr_weight     = RR_WEIGHT_NONE,
192                 .no_path_retry = NO_PATH_RETRY_UNDEF,
193                 .minio         = DEFAULT_MINIO,
194                 .checker_name  = READSECTOR0,
195         },
196         {
197                 .vendor        = "DGC",
198                 .product       = ".*",
199                 .bl_product    = "LUNZ",
200                 .getuid        = DEFAULT_GETUID,
201                 .getprio       = "mpath_prio_emc /dev/%n",
202                 .features      = "1 queue_if_no_path",
203                 .hwhandler     = "1 emc",
204                 .selector      = DEFAULT_SELECTOR,
205                 .pgpolicy      = GROUP_BY_PRIO,
206                 .pgfailback    = -FAILBACK_IMMEDIATE,
207                 .rr_weight     = RR_WEIGHT_NONE,
208                 .no_path_retry = (300 / DEFAULT_CHECKINT),
209                 .minio         = DEFAULT_MINIO,
210                 .checker_name  = EMC_CLARIION,
211         },
212         /*
213          * Fujitsu controller family
214          *
215          * Maintainer : Christophe Varoqui
216          * Mail : christophe.varoqui@free.fr
217          */
218         {
219                 .vendor        = "FSC",
220                 .product       = "CentricStor",
221                 .getuid        = DEFAULT_GETUID,
222                 .getprio       = NULL,
223                 .features      = DEFAULT_FEATURES,
224                 .hwhandler     = DEFAULT_HWHANDLER,
225                 .selector      = DEFAULT_SELECTOR,
226                 .pgpolicy      = GROUP_BY_SERIAL,
227                 .pgfailback    = FAILBACK_UNDEF,
228                 .rr_weight     = RR_WEIGHT_NONE,
229                 .no_path_retry = NO_PATH_RETRY_UNDEF,
230                 .minio         = DEFAULT_MINIO,
231                 .checker_name  = READSECTOR0,
232         },
233         /*
234          * Hitachi controller family
235          *
236          * Maintainer : Matthias Rudolph
237          * Mail : matthias.rudolph@hds.com
238          */
239         {
240                 .vendor        = "(HITACHI|HP)",
241                 .product       = "OPEN-.*",
242                 .getuid        = DEFAULT_GETUID,
243                 .getprio       = NULL,
244                 .features      = DEFAULT_FEATURES,
245                 .hwhandler     = DEFAULT_HWHANDLER,
246                 .selector      = DEFAULT_SELECTOR,
247                 .pgpolicy      = MULTIBUS,
248                 .pgfailback    = FAILBACK_UNDEF,
249                 .rr_weight     = RR_WEIGHT_NONE,
250                 .no_path_retry = NO_PATH_RETRY_UNDEF,
251                 .minio         = DEFAULT_MINIO,
252                 .checker_name  = READSECTOR0,
253         },
254         {
255                 .vendor        = "HITACHI",
256                 .product       = "DF.*",
257                 .getuid        = DEFAULT_GETUID,
258                 .getprio       = "mpath_prio_hds_modular %d",
259                 .features      = DEFAULT_FEATURES,
260                 .hwhandler     = DEFAULT_HWHANDLER,
261                 .selector      = DEFAULT_SELECTOR,
262                 .pgpolicy      = GROUP_BY_PRIO,
263                 .pgfailback    = -FAILBACK_IMMEDIATE,
264                 .rr_weight     = RR_WEIGHT_NONE,
265                 .no_path_retry = NO_PATH_RETRY_UNDEF,
266                 .minio         = DEFAULT_MINIO,
267                 .checker_name  = READSECTOR0,
268         },
269         /*
270          * IBM controller family
271          *
272          * Maintainer : Hannes Reinecke, SuSE
273          * Mail : hare@suse.de
274          */
275         {
276                 .vendor        = "IBM",
277                 .product       = "ProFibre 4000R",
278                 .getuid        = DEFAULT_GETUID,
279                 .getprio       = NULL,
280                 .features      = DEFAULT_FEATURES,
281                 .hwhandler     = DEFAULT_HWHANDLER,
282                 .selector      = DEFAULT_SELECTOR,
283                 .pgpolicy      = MULTIBUS,
284                 .pgfailback    = FAILBACK_UNDEF,
285                 .rr_weight     = RR_WEIGHT_NONE,
286                 .no_path_retry = NO_PATH_RETRY_UNDEF,
287                 .minio         = DEFAULT_MINIO,
288                 .checker_name  = READSECTOR0,
289         },
290         {
291                 /* IBM DS4100 / FAStT100 */
292                 .vendor        = "IBM",
293                 .product       = "1742",
294                 .getuid        = DEFAULT_GETUID,
295                 .getprio       = "mpath_prio_tpc /dev/%n",
296                 .features      = DEFAULT_FEATURES,
297                 .hwhandler     = DEFAULT_HWHANDLER,
298                 .selector      = DEFAULT_SELECTOR,
299                 .pgpolicy      = GROUP_BY_PRIO,
300                 .pgfailback    = -FAILBACK_IMMEDIATE,
301                 .rr_weight     = RR_WEIGHT_NONE,
302                 .no_path_retry = NO_PATH_RETRY_UNDEF,
303                 .minio         = DEFAULT_MINIO,
304                 .checker_name  = TUR,
305         },
306         {
307                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
308                 .vendor        = "IBM",
309                 .product       = "3526",
310                 .getuid        = DEFAULT_GETUID,
311                 .getprio       = "mpath_prio_tpc /dev/%n",
312                 .features      = DEFAULT_FEATURES,
313                 .hwhandler     = DEFAULT_HWHANDLER,
314                 .selector      = DEFAULT_SELECTOR,
315                 .pgpolicy      = GROUP_BY_PRIO,
316                 .pgfailback    = -FAILBACK_IMMEDIATE,
317                 .rr_weight     = RR_WEIGHT_NONE,
318                 .no_path_retry = NO_PATH_RETRY_UNDEF,
319                 .minio         = DEFAULT_MINIO,
320                 .checker_name  = TUR,
321         },
322         {
323                 /* IBM DS4200 / FAStT200 */
324                 .vendor        = "IBM",
325                 .product       = "3542",
326                 .getuid        = DEFAULT_GETUID,
327                 .getprio       = NULL,
328                 .features      = DEFAULT_FEATURES,
329                 .hwhandler     = DEFAULT_HWHANDLER,
330                 .selector      = DEFAULT_SELECTOR,
331                 .pgpolicy      = GROUP_BY_SERIAL,
332                 .pgfailback    = FAILBACK_UNDEF,
333                 .rr_weight     = RR_WEIGHT_NONE,
334                 .no_path_retry = NO_PATH_RETRY_UNDEF,
335                 .minio         = DEFAULT_MINIO,
336                 .checker_name  = TUR,
337         },
338         {
339                 /* IBM ESS F20 aka Shark */
340                 .vendor        = "IBM",
341                 .product       = "2105(800|F20)",
342                 .getuid        = DEFAULT_GETUID,
343                 .getprio       = NULL,
344                 .features      = "1 queue_if_no_path",
345                 .hwhandler     = DEFAULT_HWHANDLER,
346                 .selector      = DEFAULT_SELECTOR,
347                 .pgpolicy      = GROUP_BY_SERIAL,
348                 .pgfailback    = FAILBACK_UNDEF,
349                 .rr_weight     = RR_WEIGHT_NONE,
350                 .no_path_retry = NO_PATH_RETRY_UNDEF,
351                 .minio         = DEFAULT_MINIO,
352                 .checker_name  = TUR,
353         },
354         {
355                 /* IBM DS6000 */
356                 .vendor        = "IBM",
357                 .product       = "1750500",
358                 .getuid        = DEFAULT_GETUID,
359                 .getprio       = "mpath_prio_alua /dev/%n",
360                 .features      = "1 queue_if_no_path",
361                 .hwhandler     = DEFAULT_HWHANDLER,
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_UNDEF,
367                 .minio         = DEFAULT_MINIO,
368                 .checker_name  = TUR,
369         },
370         {
371                 /* IBM DS8000 */
372                 .vendor        = "IBM",
373                 .product       = "2107900",
374                 .getuid        = DEFAULT_GETUID,
375                 .getprio       = NULL,
376                 .features      = "1 queue_if_no_path",
377                 .hwhandler     = DEFAULT_HWHANDLER,
378                 .selector      = DEFAULT_SELECTOR,
379                 .pgpolicy      = GROUP_BY_SERIAL,
380                 .pgfailback    = FAILBACK_UNDEF,
381                 .rr_weight     = RR_WEIGHT_NONE,
382                 .no_path_retry = NO_PATH_RETRY_UNDEF,
383                 .minio         = DEFAULT_MINIO,
384                 .checker_name  = TUR,
385         },
386         {
387                 /* IBM SAN Volume Controller */
388                 .vendor        = "IBM",
389                 .product       = "2145",
390                 .getuid        = DEFAULT_GETUID,
391                 .getprio       = "mpath_prio_alua /dev/%n",
392                 .features      = "1 queue_if_no_path",
393                 .hwhandler     = DEFAULT_HWHANDLER,
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_UNDEF,
399                 .minio         = DEFAULT_MINIO,
400                 .checker_name  = TUR,
401         },
402         {
403                 /* IBM S/390 ECKD DASD */
404                 .vendor        = "IBM",
405                 .product       = "S/390 DASD ECKD",
406                 .bl_product       = "S/390.*",
407                 .getuid        = "dasd_id /dev/%n",
408                 .getprio       = NULL,
409                 .features      = DEFAULT_FEATURES,
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  = DIRECTIO,
418         },
419         /*
420          * NETAPP controller family
421          *
422          * Maintainer : Dave Wysochanski
423          * Mail : davidw@netapp.com
424          */
425         {
426                 .vendor        = "NETAPP",
427                 .product       = "LUN.*",
428                 .getuid        = DEFAULT_GETUID,
429                 .getprio       = "mpath_prio_netapp /dev/%n",
430                 .features      = "1 queue_if_no_path",
431                 .hwhandler     = DEFAULT_HWHANDLER,
432                 .selector      = DEFAULT_SELECTOR,
433                 .pgpolicy      = GROUP_BY_PRIO,
434                 .pgfailback    = -FAILBACK_IMMEDIATE,
435                 .rr_weight     = RR_WEIGHT_NONE,
436                 .no_path_retry = NO_PATH_RETRY_UNDEF,
437                 .minio         = 128,
438                 .checker_name  = READSECTOR0,
439         },
440         /*
441          * IBM NSeries (NETAPP) controller family
442          *
443          * Maintainer : Dave Wysochanski
444          * Mail : davidw@netapp.com
445          */
446         {
447                 .vendor        = "IBM",
448                 .product       = "Nseries.*",
449                 .getuid        = DEFAULT_GETUID,
450                 .getprio       = "mpath_prio_netapp /dev/%n",
451                 .features      = "1 queue_if_no_path",
452                 .hwhandler     = DEFAULT_HWHANDLER,
453                 .selector      = DEFAULT_SELECTOR,
454                 .pgpolicy      = GROUP_BY_PRIO,
455                 .pgfailback    = -FAILBACK_IMMEDIATE,
456                 .rr_weight     = RR_WEIGHT_NONE,
457                 .no_path_retry = NO_PATH_RETRY_UNDEF,
458                 .minio         = 128,
459                 .checker_name  = READSECTOR0,
460         },
461         /*
462          * Pillar Data controller family
463          *
464          * Maintainer : Christophe Varoqui
465          * Mail : christophe.varoqui@free.fr
466          */
467         {
468                 .vendor        = "Pillar",
469                 .product       = "Axiom 500",
470                 .getuid        = DEFAULT_GETUID,
471                 .getprio       = "mpath_prio_alua %d",
472                 .features      = DEFAULT_FEATURES,
473                 .hwhandler     = DEFAULT_HWHANDLER,
474                 .selector      = DEFAULT_SELECTOR,
475                 .pgpolicy      = GROUP_BY_PRIO,
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         },
482         /*
483          * SGI arrays
484          *
485          * Maintainer : Christophe Varoqui
486          * Mail : christophe.varoqui@free.fr
487          */
488         {
489                 .vendor        = "SGI",
490                 .product       = "TP9[13]00",
491                 .getuid        = DEFAULT_GETUID,
492                 .getprio       = NULL,
493                 .features      = DEFAULT_FEATURES,
494                 .hwhandler     = DEFAULT_HWHANDLER,
495                 .selector      = DEFAULT_SELECTOR,
496                 .pgpolicy      = MULTIBUS,
497                 .pgfailback    = FAILBACK_UNDEF,
498                 .rr_weight     = RR_WEIGHT_NONE,
499                 .no_path_retry = NO_PATH_RETRY_UNDEF,
500                 .minio         = DEFAULT_MINIO,
501                 .checker_name  = READSECTOR0,
502         },
503         {
504                 .vendor        = "SGI",
505                 .product       = "TP9[45]00",
506                 .getuid        = DEFAULT_GETUID,
507                 .getprio       = "mpath_prio_tpc /dev/%n",
508                 .features      = DEFAULT_FEATURES,
509                 .hwhandler     = DEFAULT_HWHANDLER,
510                 .selector      = DEFAULT_SELECTOR,
511                 .pgpolicy      = GROUP_BY_PRIO,
512                 .pgfailback    = -FAILBACK_IMMEDIATE,
513                 .rr_weight     = RR_WEIGHT_NONE,
514                 .no_path_retry = NO_PATH_RETRY_UNDEF,
515                 .minio         = DEFAULT_MINIO,
516                 .checker_name  = TUR,
517         },
518         /*
519          * STK arrays
520          *
521          * Maintainer : Christophe Varoqui
522          * Mail : christophe.varoqui@free.fr
523          */
524         {
525                 .vendor        = "STK",
526                 .product       = "OPENstorage D280",
527                 .getuid        = DEFAULT_GETUID,
528                 .getprio       = "mpath_prio_tpc /dev/%n",
529                 .features      = DEFAULT_FEATURES,
530                 .hwhandler     = DEFAULT_HWHANDLER,
531                 .selector      = DEFAULT_SELECTOR,
532                 .pgpolicy      = GROUP_BY_PRIO,
533                 .pgfailback    = -FAILBACK_IMMEDIATE,
534                 .rr_weight     = RR_WEIGHT_NONE,
535                 .no_path_retry = NO_PATH_RETRY_UNDEF,
536                 .minio         = DEFAULT_MINIO,
537                 .checker_name  = TUR,
538         },
539         /*
540          * SUN arrays
541          *
542          * Maintainer : Christophe Varoqui
543          * Mail : christophe.varoqui@free.fr
544          */
545         {
546                 .vendor        = "SUN",
547                 .product       = "(StorEdge 3510|T4)",
548                 .getuid        = DEFAULT_GETUID,
549                 .getprio       = NULL,
550                 .features      = DEFAULT_FEATURES,
551                 .hwhandler     = DEFAULT_HWHANDLER,
552                 .selector      = DEFAULT_SELECTOR,
553                 .pgpolicy      = MULTIBUS,
554                 .pgfailback    = FAILBACK_UNDEF,
555                 .rr_weight     = RR_WEIGHT_NONE,
556                 .no_path_retry = NO_PATH_RETRY_UNDEF,
557                 .minio         = DEFAULT_MINIO,
558                 .checker_name  = READSECTOR0,
559         },
560         /*
561          * EOL
562          */
563         {
564                 .vendor        = NULL,
565                 .product       = NULL,
566                 .getuid        = NULL,
567                 .getprio       = NULL,
568                 .features      = NULL,
569                 .hwhandler     = NULL,
570                 .selector      = NULL,
571                 .pgpolicy      = 0,
572                 .pgfailback    = 0,
573                 .rr_weight     = 0,
574                 .no_path_retry = 0,
575                 .minio         = 0,
576                 .checker_name  = NULL,
577         },
578 };
579
580 extern int
581 setup_default_hwtable (vector hw)
582 {
583         int r = 0;
584         struct hwentry * hwe = default_hw;
585
586         while (hwe->vendor) {
587                 hwe->checker = checker_lookup(hwe->checker_name);
588                 r += store_hwe(hw, hwe);
589                 hwe++;
590         }
591         return r;
592 }