multipath-tools: Add rbd to the hwtable
[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 (subscribers-only, see README)
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  * Please, use the TEMPLATE below to add new hardware.
20  *
21  * WARNING:
22  *
23  * Devices with a proprietary handler must also be included in
24  * the kernel side. Currently at drivers/scsi/scsi_dh.c
25  */
26 static struct hwentry default_hw[] = {
27         /*
28          * Apple
29          *
30          * Maintainer : Shyam Sundar
31          * Mail : g.shyamsundar@yahoo.co.in
32          */
33         {
34                 .vendor        = "APPLE",
35                 .product       = "Xserve RAID",
36                 .pgpolicy      = MULTIBUS,
37                 .pgfailback    = FAILBACK_UNDEF,
38         },
39         /*
40          * HPE
41          */
42         {
43                 .vendor        = "3PARdata",
44                 .product       = "VV",
45                 .pgpolicy      = GROUP_BY_PRIO,
46                 .pgfailback    = -FAILBACK_IMMEDIATE,
47                 .hwhandler     = "1 alua",
48                 .prio_name     = PRIO_ALUA,
49                 .no_path_retry = 18,
50         },
51         {
52                 /* RA8000 / ESA12000 */
53                 .vendor        = "DEC",
54                 .product       = "HSG80",
55                 .features      = "1 queue_if_no_path",
56                 .hwhandler     = "1 hp_sw",
57                 .pgpolicy      = GROUP_BY_PRIO,
58                 .pgfailback    = FAILBACK_UNDEF,
59                 .checker_name  = HP_SW,
60                 .prio_name     = PRIO_HP_SW,
61         },
62         {
63                 /* VIRTUAL ARRAY 7400 */
64                 .vendor        = "HP",
65                 .product       = "A6189A",
66                 .pgpolicy      = MULTIBUS,
67                 .pgfailback    = FAILBACK_UNDEF,
68                 .no_path_retry = 12,
69         },
70         {
71                 /* MSA 1000/1500 and EVA 3000/5000, with old firmware */
72                 .vendor        = "(COMPAQ|HP)",
73                 .product       = "(MSA|HSV)1.0",
74                 .features      = "1 queue_if_no_path",
75                 .hwhandler     = "1 hp_sw",
76                 .pgpolicy      = GROUP_BY_PRIO,
77                 .pgfailback    = FAILBACK_UNDEF,
78                 .no_path_retry = 12,
79                 .minio         = 100,
80                 .checker_name  = HP_SW,
81                 .prio_name     = PRIO_HP_SW,
82         },
83         {
84                 /* MSA 1000/1500 with new firmware */
85                 .vendor        = "(COMPAQ|HP)",
86                 .product       = "MSA VOLUME",
87                 .pgpolicy      = GROUP_BY_PRIO,
88                 .pgfailback    = -FAILBACK_IMMEDIATE,
89                 .no_path_retry = 12,
90                 .minio         = 100,
91                 .prio_name     = PRIO_ALUA,
92         },
93         {
94                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
95                 .vendor        = "(COMPAQ|HP)",
96                 .product       = "(HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0)",
97                 .pgpolicy      = GROUP_BY_PRIO,
98                 .pgfailback    = -FAILBACK_IMMEDIATE,
99                 .no_path_retry = 12,
100                 .minio         = 100,
101                 .prio_name     = PRIO_ALUA,
102         },
103         {
104                 /* MSA2000 family with old firmware */
105                 .vendor        = "HP",
106                 .product       = "(MSA2[02]12fc|MSA2012i)",
107                 .pgpolicy      = MULTIBUS,
108                 .pgfailback    = FAILBACK_UNDEF,
109                 .no_path_retry = 18,
110                 .minio         = 100,
111         },
112         {
113                 /* MSA2000 family with new firmware */
114                 .vendor        = "HP",
115                 .product       = "(MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME)",
116                 .pgpolicy      = GROUP_BY_PRIO,
117                 .pgfailback    = -FAILBACK_IMMEDIATE,
118                 .no_path_retry = 18,
119                 .minio         = 100,
120                 .prio_name     = PRIO_ALUA,
121         },
122         {
123                 /* MSA 1040/2040 family */
124                 .vendor        = "HP",
125                 .product       = "MSA (1|2)040 SA(N|S)",
126                 .pgpolicy      = GROUP_BY_PRIO,
127                 .pgfailback    = -FAILBACK_IMMEDIATE,
128                 .no_path_retry = 18,
129                 .minio         = 100,
130                 .prio_name     = PRIO_ALUA,
131         },
132         {
133                 /* SAN Virtualization Services Platform */
134                 .vendor        = "HP",
135                 .product       = "HSVX700",
136                 .hwhandler     = "1 alua",
137                 .pgpolicy      = GROUP_BY_PRIO,
138                 .pgfailback    = -FAILBACK_IMMEDIATE,
139                 .no_path_retry = 12,
140                 .minio         = 100,
141                 .prio_name     = PRIO_ALUA,
142         },
143         {
144                 /* Smart Array */
145                 .vendor        = "HP",
146                 .product       = "LOGICAL VOLUME",
147                 .pgpolicy      = MULTIBUS,
148                 .pgfailback    = FAILBACK_UNDEF,
149                 .no_path_retry = 12,
150         },
151         {
152                 /* P2000 family */
153                 .vendor        = "HP",
154                 .product       = "(P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI)",
155                 .pgpolicy      = GROUP_BY_PRIO,
156                 .pgfailback    = -FAILBACK_IMMEDIATE,
157                 .no_path_retry = 18,
158                 .minio         = 100,
159                 .prio_name     = PRIO_ALUA,
160         },
161         /*
162          * DataDirect Networks
163          */
164         {
165                 .vendor        = "DDN",
166                 .product       = "SAN DataDirector",
167                 .pgpolicy      = MULTIBUS,
168                 .pgfailback    = FAILBACK_UNDEF,
169         },
170         /*
171          * EMC
172          *
173          * Maintainer : Edward Goggin
174          * Mail : egoggin@emc.com
175          */
176         {
177                 /* Symmetrix / DMX / VMAX */
178                 .vendor        = "EMC",
179                 .product       = "SYMMETRIX",
180                 .pgpolicy      = MULTIBUS,
181                 .pgfailback    = FAILBACK_UNDEF,
182                 .no_path_retry = 6,
183         },
184         {
185                 /* DGC CLARiiON CX/AX and EMC VNX */
186                 .vendor        = "^DGC",
187                 .product       = "^(RAID|DISK|VRAID)",
188                 .bl_product    = "LUNZ",
189                 .features      = "1 queue_if_no_path",
190                 .hwhandler     = "1 emc",
191                 .pgpolicy      = GROUP_BY_PRIO,
192                 .pgfailback    = -FAILBACK_IMMEDIATE,
193                 .no_path_retry = (300 / DEFAULT_CHECKINT),
194                 .checker_name  = EMC_CLARIION,
195                 .prio_name     = PRIO_EMC,
196         },
197         {
198                 /* Invista / VPLEX */
199                 .vendor        = "EMC",
200                 .product       = "Invista",
201                 .bl_product    = "LUNZ",
202                 .pgpolicy      = MULTIBUS,
203                 .pgfailback    = FAILBACK_UNDEF,
204                 .no_path_retry = 5,
205         },
206         {
207                 .vendor        = "XtremIO",
208                 .product       = "XtremApp",
209                 .selector      = "queue-length 0",
210                 .pgpolicy      = MULTIBUS,
211                 .pgfailback    = FAILBACK_UNDEF,
212         },
213         /*
214          * DELL
215          */
216         {
217                 .vendor        = "COMPELNT",
218                 .product       = "Compellent Vol",
219                 .pgpolicy      = MULTIBUS,
220                 .pgfailback    = FAILBACK_UNDEF,
221                 .no_path_retry = NO_PATH_RETRY_QUEUE,
222         },
223         {
224                 .vendor        = "DELL",
225                 .product       = "MD3000",
226                 .bl_product    = "Universal Xport",
227                 .features      = "2 pg_init_retries 50",
228                 .hwhandler     = "1 rdac",
229                 .pgpolicy      = GROUP_BY_PRIO,
230                 .pgfailback    = -FAILBACK_IMMEDIATE,
231                 .no_path_retry = 15,
232                 .checker_name  = RDAC,
233                 .prio_name     = PRIO_RDAC,
234         },
235         {
236                 .vendor        = "DELL",
237                 .product       = "(MD32xx|MD36xx)",
238                 .bl_product    = "Universal Xport",
239                 .features      = "2 pg_init_retries 50",
240                 .hwhandler     = "1 rdac",
241                 .pgpolicy      = GROUP_BY_PRIO,
242                 .pgfailback    = -FAILBACK_IMMEDIATE,
243                 .no_path_retry = 15,
244                 .checker_name  = RDAC,
245                 .prio_name     = PRIO_RDAC,
246         },
247         {
248                 .vendor        = "DELL",
249                 .product       = "(MD34xx|MD38xx)",
250                 .bl_product    = "Universal Xport",
251                 .features      = "2 pg_init_retries 50",
252                 .hwhandler     = "1 rdac",
253                 .pgpolicy      = GROUP_BY_PRIO,
254                 .pgfailback    = -FAILBACK_IMMEDIATE,
255                 .no_path_retry = 15,
256                 .checker_name  = RDAC,
257                 .prio_name     = PRIO_RDAC,
258         },
259         /*
260          * Fujitsu
261          */
262         {
263                 .vendor        = "FSC",
264                 .product       = "CentricStor",
265                 .pgpolicy      = GROUP_BY_SERIAL,
266                 .pgfailback    = FAILBACK_UNDEF,
267         },
268         {
269                 .vendor        = "FUJITSU",
270                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
271                 .features      = "1 queue_if_no_path",
272                 .pgpolicy      = GROUP_BY_PRIO,
273                 .pgfailback    = -FAILBACK_IMMEDIATE,
274                 .no_path_retry = 10,
275                 .prio_name     = PRIO_ALUA,
276         },
277         {
278                 /* FibreCAT S80 */
279                 .vendor        = "(EUROLOGC|EuroLogc)",
280                 .product       = "FC2502",
281                 .pgpolicy      = MULTIBUS,
282                 .pgfailback    = FAILBACK_UNDEF,
283         },
284         /*
285          * Hitachi
286          *
287          * Maintainer : Matthias Rudolph
288          * Mail : matthias.rudolph@hds.com
289          */
290         {
291                 /* USP-V, HUS VM, VSP, VSP G1000 and VSP GX00 families */
292                 .vendor        = "(HITACHI|HP)",
293                 .product       = "OPEN-",
294                 .pgpolicy      = MULTIBUS,
295                 .pgfailback    = FAILBACK_UNDEF,
296         },
297         {
298                 /* AMS 2000 and HUS 100 families */
299                 .vendor        = "HITACHI",
300                 .product       = "DF",
301                 .features      = "1 queue_if_no_path",
302                 .pgpolicy      = GROUP_BY_PRIO,
303                 .pgfailback    = -FAILBACK_IMMEDIATE,
304                 .prio_name     = PRIO_HDS,
305         },
306         /*
307          * IBM
308          *
309          * Maintainer : Hannes Reinecke
310          * Mail : hare@suse.de
311          */
312         {
313                 .vendor        = "IBM",
314                 .product       = "ProFibre 4000R",
315                 .pgpolicy      = MULTIBUS,
316                 .pgfailback    = FAILBACK_UNDEF,
317         },
318         {
319                 /* DS4300 / FAStT600 */
320                 .vendor        = "IBM",
321                 .product       = "^1722-600",
322                 .bl_product    = "Universal Xport",
323                 .features      = "1 queue_if_no_path",
324                 .hwhandler     = "1 rdac",
325                 .pgpolicy      = GROUP_BY_PRIO,
326                 .pgfailback    = -FAILBACK_IMMEDIATE,
327                 .no_path_retry = 300,
328                 .checker_name  = RDAC,
329                 .prio_name     = PRIO_RDAC,
330         },
331         {
332                 /* DS4100 / FAStT100 */
333                 .vendor        = "IBM",
334                 .product       = "^1724",
335                 .bl_product    = "Universal Xport",
336                 .features      = "1 queue_if_no_path",
337                 .hwhandler     = "1 rdac",
338                 .pgpolicy      = GROUP_BY_PRIO,
339                 .pgfailback    = -FAILBACK_IMMEDIATE,
340                 .no_path_retry = 300,
341                 .checker_name  = RDAC,
342                 .prio_name     = PRIO_RDAC,
343         },
344         {
345                 /* DS3200 / DS3300 / DS3400 / Boot DS */
346                 .vendor        = "IBM",
347                 .product       = "^1726",
348                 .bl_product    = "Universal Xport",
349                 .features      = "1 queue_if_no_path",
350                 .hwhandler     = "1 rdac",
351                 .pgpolicy      = GROUP_BY_PRIO,
352                 .pgfailback    = -FAILBACK_IMMEDIATE,
353                 .no_path_retry = 300,
354                 .checker_name  = RDAC,
355                 .prio_name     = PRIO_RDAC,
356         },
357         {
358                 /* DS4400 / DS4500 / FAStT700 / FAStT900 */
359                 .vendor        = "IBM",
360                 .product       = "^1742",
361                 .bl_product    = "Universal Xport",
362                 .hwhandler     = "1 rdac",
363                 .pgpolicy      = GROUP_BY_PRIO,
364                 .pgfailback    = -FAILBACK_IMMEDIATE,
365                 .no_path_retry = NO_PATH_RETRY_QUEUE,
366                 .checker_name  = RDAC,
367                 .prio_name     = PRIO_RDAC,
368         },
369         {
370                 /* DS3500 / DS3512 / DS3524 */
371                 .vendor        = "IBM",
372                 .product       = "^(1745|1746)",
373                 .bl_product    = "Universal Xport",
374                 .features      = "2 pg_init_retries 50",
375                 .hwhandler     = "1 rdac",
376                 .pgpolicy      = GROUP_BY_PRIO,
377                 .pgfailback    = -FAILBACK_IMMEDIATE,
378                 .no_path_retry = 15,
379                 .checker_name  = RDAC,
380                 .prio_name     = PRIO_RDAC,
381         },
382         {
383                 /* DS3950 / DS4200 / DS4700 / DS5020 */
384                 .vendor        = "IBM",
385                 .product       = "^1814",
386                 .bl_product    = "Universal Xport",
387                 .hwhandler     = "1 rdac",
388                 .pgpolicy      = GROUP_BY_PRIO,
389                 .pgfailback    = -FAILBACK_IMMEDIATE,
390                 .no_path_retry = NO_PATH_RETRY_QUEUE,
391                 .checker_name  = RDAC,
392                 .prio_name     = PRIO_RDAC,
393         },
394         {
395                 /* DS4800 */
396                 .vendor        = "IBM",
397                 .product       = "^1815",
398                 .bl_product    = "Universal Xport",
399                 .hwhandler     = "1 rdac",
400                 .pgpolicy      = GROUP_BY_PRIO,
401                 .pgfailback    = -FAILBACK_IMMEDIATE,
402                 .no_path_retry = NO_PATH_RETRY_QUEUE,
403                 .checker_name  = RDAC,
404                 .prio_name     = PRIO_RDAC,
405         },
406         {
407                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
408                 .vendor        = "IBM",
409                 .product       = "^1818",
410                 .bl_product    = "Universal Xport",
411                 .hwhandler     = "1 rdac",
412                 .pgpolicy      = GROUP_BY_PRIO,
413                 .pgfailback    = -FAILBACK_IMMEDIATE,
414                 .no_path_retry = NO_PATH_RETRY_QUEUE,
415                 .checker_name  = RDAC,
416                 .prio_name     = PRIO_RDAC,
417         },
418         {
419                 /* Netfinity Fibre Channel RAID Controller Unit */
420                 .vendor        = "IBM",
421                 .product       = "^3526",
422                 .bl_product    = "Universal Xport",
423                 .hwhandler     = "1 rdac",
424                 .pgpolicy      = GROUP_BY_PRIO,
425                 .pgfailback    = -FAILBACK_IMMEDIATE,
426                 .no_path_retry = NO_PATH_RETRY_QUEUE,
427                 .checker_name  = RDAC,
428                 .prio_name     = PRIO_RDAC,
429         },
430         {
431                 /* DS4200 / FAStT200 */
432                 .vendor        = "IBM",
433                 .product       = "^3542",
434                 .pgpolicy      = GROUP_BY_SERIAL,
435                 .pgfailback    = FAILBACK_UNDEF,
436         },
437         {
438                 /* Enterprise Storage Server / Shark 800 */
439                 .vendor        = "IBM",
440                 .product       = "^2105800",
441                 .features      = "1 queue_if_no_path",
442                 .pgpolicy      = GROUP_BY_SERIAL,
443                 .pgfailback    = FAILBACK_UNDEF,
444         },
445         {
446                 /* Enterprise Storage Server / Shark F20 */
447                 .vendor        = "IBM",
448                 .product       = "^2105F20",
449                 .features      = "1 queue_if_no_path",
450                 .pgpolicy      = GROUP_BY_SERIAL,
451                 .pgfailback    = FAILBACK_UNDEF,
452         },
453         {
454                 /* DS6000 */
455                 .vendor        = "IBM",
456                 .product       = "^1750500",
457                 .features      = "1 queue_if_no_path",
458                 .pgpolicy      = GROUP_BY_PRIO,
459                 .pgfailback    = -FAILBACK_IMMEDIATE,
460                 .prio_name     = PRIO_ALUA,
461         },
462         {
463                 /* DS8000 */
464                 .vendor        = "IBM",
465                 .product       = "^2107900",
466                 .features      = "1 queue_if_no_path",
467                 .pgpolicy      = MULTIBUS,
468                 .pgfailback    = FAILBACK_UNDEF,
469         },
470         {
471                 /* SAN Volume Controller / Storwize */
472                 .vendor        = "IBM",
473                 .product       = "^2145",
474                 .features      = "1 queue_if_no_path",
475                 .pgpolicy      = GROUP_BY_PRIO,
476                 .pgfailback    = -FAILBACK_IMMEDIATE,
477                 .prio_name     = PRIO_ALUA,
478         },
479         {
480                 .vendor        = "IBM",
481                 .product       = "S/390 DASD ECKD",
482                 .bl_product    = "S/390",
483                 .uid_attribute = "ID_UID",
484                 .features      = "1 queue_if_no_path",
485                 .pgpolicy      = MULTIBUS,
486                 .pgfailback    = FAILBACK_UNDEF,
487         },
488         {
489                 .vendor        = "IBM",
490                 .product       = "S/390 DASD FBA",
491                 .bl_product    = "S/390",
492                 .uid_attribute = "ID_UID",
493                 .features      = "1 queue_if_no_path",
494                 .pgpolicy      = MULTIBUS,
495                 .pgfailback    = FAILBACK_UNDEF,
496         },
497         {
498                 /* Power RAID */
499                 .vendor        = "IBM",
500                 .product       = "^IPR",
501                 .features      = "1 queue_if_no_path",
502                 .hwhandler     = "1 alua",
503                 .pgpolicy      = GROUP_BY_PRIO,
504                 .pgfailback    = -FAILBACK_IMMEDIATE,
505                 .prio_name     = PRIO_ALUA,
506         },
507         {
508                 /* SAS RAID Controller Module (RSSM) */
509                 .vendor        = "IBM",
510                 .product       = "1820N00",
511                 .pgpolicy      = GROUP_BY_PRIO,
512                 .pgfailback    = -FAILBACK_IMMEDIATE,
513                 .no_path_retry = NO_PATH_RETRY_QUEUE,
514                 .minio         = 100,
515                 .prio_name     = PRIO_ALUA,
516         },
517         {
518                 /* XIV Storage System */
519                 .vendor        = "IBM",
520                 .product       = "2810XIV",
521                 .features      = "1 queue_if_no_path",
522                 .pgpolicy      = MULTIBUS,
523                 .pgfailback    = 15,
524                 .minio         = 15,
525         },
526                 /*
527                  * IBM Power Virtual SCSI Devices
528                  *
529                  * Maintainer : Brian King
530                  * Mail : brking@linux.vnet.ibm.com
531                  */
532         {
533                 .vendor        = "AIX",
534                 .product       = "VDASD",
535                 .pgpolicy      = MULTIBUS,
536                 .pgfailback    = FAILBACK_UNDEF,
537                 .no_path_retry = (300 / DEFAULT_CHECKINT),
538         },
539         {
540                 .vendor        = "IBM",
541                 .product       = "3303      NVDISK",
542                 .pgfailback    = FAILBACK_UNDEF,
543                 .no_path_retry = (300 / DEFAULT_CHECKINT),
544         },
545         {
546                 .vendor        = "AIX",
547                 .product       = "NVDISK",
548                 .hwhandler     = "1 alua",
549                 .pgpolicy      = GROUP_BY_PRIO,
550                 .pgfailback    = -FAILBACK_IMMEDIATE,
551                 .no_path_retry = (300 / DEFAULT_CHECKINT),
552                 .prio_name     = PRIO_ALUA,
553         },
554         /*
555          * NetApp
556          */
557         {
558                 /*
559                  * ONTAP family
560                  *
561                  * Maintainer : Martin George
562                  * Mail : marting@netapp.com
563                  */
564                 .vendor        = "NETAPP",
565                 .product       = "LUN",
566                 .features      = "3 queue_if_no_path pg_init_retries 50",
567                 .pgpolicy      = GROUP_BY_PRIO,
568                 .pgfailback    = -FAILBACK_IMMEDIATE,
569                 .flush_on_last_del = FLUSH_ENABLED,
570                 .minio         = 128,
571                 .dev_loss      = MAX_DEV_LOSS_TMO,
572                 .prio_name     = PRIO_ONTAP,
573         },
574         {
575                 /*
576                  * SANtricity(RDAC) family
577                  *
578                  * Maintainer : Sean Stewart
579                  * Mail : sean.stewart@netapp.com
580                  */
581                 .vendor        = "(NETAPP|LSI|ENGENIO)",
582                 .product       = "INF-01-00",
583                 .bl_product    = "Universal Xport",
584                 .features      = "2 pg_init_retries 50",
585                 .hwhandler     = "1 rdac",
586                 .pgpolicy      = GROUP_BY_PRIO,
587                 .pgfailback    = -FAILBACK_IMMEDIATE,
588                 .no_path_retry = 30,
589                 .checker_name  = RDAC,
590                 .prio_name     = PRIO_RDAC,
591         },
592         /*
593          * Nexenta
594          *
595          * Maintainer : Yacine Kheddache
596          * Mail : yacine@alyseo.com
597          */
598         {
599                 .vendor        = "NEXENTA",
600                 .product       = "COMSTAR",
601                 .features      = "1 queue_if_no_path",
602                 .pgpolicy      = GROUP_BY_SERIAL,
603                 .pgfailback    = FAILBACK_UNDEF,
604                 .no_path_retry = 30,
605                 .minio         = 128,
606         },
607         /*
608          * SGI
609          */
610         {
611                 .vendor        = "SGI",
612                 .product       = "TP9[13]00",
613                 .pgpolicy      = MULTIBUS,
614                 .pgfailback    = FAILBACK_UNDEF,
615         },
616         {
617                 .vendor        = "SGI",
618                 .product       = "TP9[45]00",
619                 .bl_product    = "Universal Xport",
620                 .hwhandler     = "1 rdac",
621                 .pgpolicy      = GROUP_BY_PRIO,
622                 .pgfailback    = -FAILBACK_IMMEDIATE,
623                 .no_path_retry = NO_PATH_RETRY_QUEUE,
624                 .checker_name  = RDAC,
625                 .prio_name     = PRIO_RDAC,
626         },
627         {
628                 /* InfiniteStorage ??? */
629                 .vendor        = "SGI",
630                 .product       = "IS",
631                 .bl_product    = "Universal Xport",
632                 .features      = "2 pg_init_retries 50",
633                 .hwhandler     = "1 rdac",
634                 .pgpolicy      = GROUP_BY_PRIO,
635                 .pgfailback    = -FAILBACK_IMMEDIATE,
636                 .no_path_retry = 15,
637                 .checker_name  = RDAC,
638                 .prio_name     = PRIO_RDAC,
639         },
640         /*
641          * NEC
642          */
643         {
644                 /* M-Series */
645                 .vendor        = "NEC",
646                 .product       = "DISK ARRAY",
647                 .hwhandler     = "1 alua",
648                 .pgpolicy      = GROUP_BY_PRIO,
649                 .pgfailback    = -FAILBACK_IMMEDIATE,
650                 .prio_name     = PRIO_ALUA,
651         },
652         /*
653          * Oracle
654          */
655         {
656                 /*
657                  * Pillar Data
658                  *
659                  * Maintainer : Srinivasan Ramani
660                  * Mail : srinivas.ramani@oracle.com
661                  */
662                 .vendor        = "Pillar",
663                 .product       = "Axiom",
664                 .pgpolicy      = GROUP_BY_PRIO,
665                 .pgfailback    = -FAILBACK_IMMEDIATE,
666                 .prio_name     = PRIO_ALUA,
667         },
668         {
669                 .vendor        = "STK",
670                 .product       = "OPENstorage D280",
671                 .bl_product    = "Universal Xport",
672                 .hwhandler     = "1 rdac",
673                 .pgpolicy      = GROUP_BY_PRIO,
674                 .pgfailback    = -FAILBACK_IMMEDIATE,
675                 .checker_name  = RDAC,
676                 .prio_name     = PRIO_RDAC,
677         },
678         {
679                 .vendor        = "STK",
680                 .product       = "FLEXLINE 380",
681                 .bl_product    = "Universal Xport",
682                 .hwhandler     = "1 rdac",
683                 .pgpolicy      = GROUP_BY_PRIO,
684                 .pgfailback    = -FAILBACK_IMMEDIATE,
685                 .no_path_retry = NO_PATH_RETRY_QUEUE,
686                 .checker_name  = RDAC,
687                 .prio_name     = PRIO_RDAC,
688         },
689         {
690                 .vendor        = "SUN",
691                 .product       = "(StorEdge 3510|T4)",
692                 .pgpolicy      = MULTIBUS,
693                 .pgfailback    = FAILBACK_UNDEF,
694         },
695         {
696                 .vendor        = "SUN",
697                 .product       = "STK6580_6780",
698                 .bl_product    = "Universal Xport",
699                 .hwhandler     = "1 rdac",
700                 .pgpolicy      = GROUP_BY_PRIO,
701                 .pgfailback    = -FAILBACK_IMMEDIATE,
702                 .checker_name  = RDAC,
703                 .prio_name     = PRIO_RDAC,
704         },
705         {
706                 /* 6140 */
707                 .vendor        = "SUN",
708                 .product       = "CSM200_R",
709                 .bl_product    = "Universal Xport",
710                 .hwhandler     = "1 rdac",
711                 .pgpolicy      = GROUP_BY_PRIO,
712                 .pgfailback    = -FAILBACK_IMMEDIATE,
713                 .no_path_retry = NO_PATH_RETRY_QUEUE,
714                 .checker_name  = RDAC,
715                 .prio_name     = PRIO_RDAC,
716         },
717         {
718                 /* 2510 / 2530 / 2540 */
719                 .vendor        = "SUN",
720                 .product       = "LCSM100_[IEFS]",
721                 .bl_product    = "Universal Xport",
722                 .hwhandler     = "1 rdac",
723                 .pgpolicy      = GROUP_BY_PRIO,
724                 .pgfailback    = -FAILBACK_IMMEDIATE,
725                 .no_path_retry = NO_PATH_RETRY_QUEUE,
726                 .checker_name  = RDAC,
727                 .prio_name     = PRIO_RDAC,
728         },
729         {
730                 .vendor        = "SUN",
731                 .product       = "SUN_6180",
732                 .bl_product    = "Universal Xport",
733                 .hwhandler     = "1 rdac",
734                 .pgpolicy      = GROUP_BY_PRIO,
735                 .pgfailback    = -FAILBACK_IMMEDIATE,
736                 .no_path_retry = NO_PATH_RETRY_QUEUE,
737                 .checker_name  = RDAC,
738                 .prio_name     = PRIO_RDAC,
739         },
740         /*
741          * Pivot3
742          *
743          * Maintainer : Bart Brooks
744          * Mail : bartb@pivot3.com
745          */
746         {
747                 .vendor        = "PIVOT3",
748                 .product       = "RAIGE VOLUME",
749                 .features      = "1 queue_if_no_path",
750                 .pgpolicy      = MULTIBUS,
751                 .pgfailback    = FAILBACK_UNDEF,
752                 .minio         = 100,
753         },
754         /*
755          * Intel
756          */
757         {
758                 .vendor        = "(Intel|INTEL)",
759                 .product       = "Multi-Flex",
760                 .hwhandler     = "1 alua",
761                 .pgpolicy      = GROUP_BY_PRIO,
762                 .pgfailback    = -FAILBACK_IMMEDIATE,
763                 .no_path_retry = NO_PATH_RETRY_QUEUE,
764                 .prio_name     = PRIO_ALUA,
765         },
766         /*
767          * Linux-IO Target
768          */
769         {
770                 .vendor        = "(LIO-ORG|SUSE)",
771                 .product       = "RBD",
772                 .hwhandler     = "1 alua",
773                 .pgpolicy      = GROUP_BY_PRIO,
774                 .pgfailback    = -FAILBACK_IMMEDIATE,
775                 .no_path_retry = 12,
776                 .minio         = 100,
777                 .prio_name     = PRIO_ALUA,
778         },
779         /*
780          * DataCore
781          */
782         {
783                 .vendor        = "DataCore",
784                 .product       = "SANmelody",
785                 .pgpolicy      = GROUP_BY_PRIO,
786                 .pgfailback    = -FAILBACK_IMMEDIATE,
787                 .no_path_retry = NO_PATH_RETRY_QUEUE,
788                 .prio_name     = PRIO_ALUA,
789         },
790         {
791                 .vendor        = "DataCore",
792                 .product       = "Virtual Disk",
793                 .pgpolicy      = GROUP_BY_PRIO,
794                 .pgfailback    = -FAILBACK_IMMEDIATE,
795                 .no_path_retry = NO_PATH_RETRY_QUEUE,
796                 .prio_name     = PRIO_ALUA,
797         },
798         /*
799          * Pure Storage
800          */
801         {
802                 .vendor        = "PURE",
803                 .product       = "FlashArray",
804                 .selector      = "queue-length 0",
805                 .pgpolicy      = MULTIBUS,
806                 .pgfailback    = FAILBACK_UNDEF,
807                 .fast_io_fail  = 10,
808                 .dev_loss      = 60,
809         },
810         /*
811          * Huawei
812          */
813         {
814                 .vendor        = "(HUAWEI|HUASY)",
815                 .product       = "XSG1",
816                 .pgpolicy      = MULTIBUS,
817                 .pgfailback    = FAILBACK_UNDEF,
818         },
819         /*
820          * Red Hat
821          *
822          * Maintainer: Mike Christie
823          * Mail: mchristi@redhat.com
824          */
825         {
826                 .vendor        = "Ceph",
827                 .product       = "RBD",
828                 .pgpolicy      = FAILOVER,
829                 .no_path_retry = NO_PATH_RETRY_FAIL,
830                 .checker_name  = RBD,
831                 .deferred_remove = DEFERRED_REMOVE_ON,
832         },
833 #if 0
834         /*
835          * Copy this TEMPLATE to add new hardware.
836          *
837          * Keep only mandatory and modified attributes.
838          * Attributes with default values must be removed.
839          * .vendor and .product are mandatory, all other are optional.
840          * POSIX Extended regex can be used in .vendor, .product, .revision and .bl_product
841          *
842          * COMPANY_NAME
843          *
844          * Maintainer : XXX
845          * Mail : XXX
846          */
847         {
848                 /* If product-ID is different from marketing name add a comment */
849                 .vendor        = "VENDOR",
850                 .product       = "PRODUCT",
851                 .revision      = "REVISION",
852                 .bl_product    = "BL_PRODUCT",
853                 .pgpolicy      = FAILOVER,
854                 .uid_attribute = "ID_SERIAL",
855                 .selector      = "service-time 0",
856                 .checker_name  = TUR,
857                 .features      = "0",
858                 .hwhandler     = "0",
859                 .prio_name     = "const",
860                 .prio_args     = "",
861                 .pgfailback    = -FAILBACK_MANUAL,
862                 .rr_weight     = RR_WEIGHT_NONE,
863                 .no_path_retry = NO_PATH_RETRY_UNDEF,
864                 .minio         = 1000,
865                 .minio_rq      = 1,
866                 .flush_on_last_del = FLUSH_DISABLED,
867                 .fast_io_fail  = 5,
868                 .dev_loss      = 600,
869                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
870                 .detect_prio   = DETECT_PRIO_ON,
871                 .deferred_remove = DEFERRED_REMOVE_OFF,
872                 .delay_watch_checks = DELAY_CHECKS_OFF,
873                 .delay_wait_checks = DELAY_CHECKS_OFF,
874         },
875 #endif
876         /*
877          * EOL
878          */
879         {
880                 .vendor        = NULL,
881                 .product       = NULL,
882         },
883 };
884
885 extern int
886 setup_default_hwtable (vector hw)
887 {
888         int r = 0;
889         struct hwentry * hwe = default_hw;
890
891         while (hwe->vendor) {
892                 r += store_hwe(hw, hwe);
893                 hwe++;
894         }
895         return r;
896 }