multipath: Merge the DELL MD3xxx device configs
[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  * Moreover, if a device needs a special treatment by the SCSI
27  * subsystem it should be included in drivers/scsi/scsi_devinfo.c
28  */
29 static struct hwentry default_hw[] = {
30         /*
31          * Apple
32          *
33          * Maintainer : Shyam Sundar
34          * Mail : g.shyamsundar@yahoo.co.in
35          */
36         {
37                 .vendor        = "APPLE",
38                 .product       = "Xserve RAID",
39                 .pgpolicy      = MULTIBUS,
40         },
41         /*
42          * HPE
43          */
44         {
45                 .vendor        = "3PARdata",
46                 .product       = "VV",
47                 .pgpolicy      = GROUP_BY_PRIO,
48                 .pgfailback    = -FAILBACK_IMMEDIATE,
49                 .hwhandler     = "1 alua",
50                 .prio_name     = PRIO_ALUA,
51                 .no_path_retry = 18,
52         },
53         {
54                 /* RA8000 / ESA12000 */
55                 .vendor        = "DEC",
56                 .product       = "HSG80",
57                 .no_path_retry = NO_PATH_RETRY_QUEUE,
58                 .hwhandler     = "1 hp_sw",
59                 .pgpolicy      = GROUP_BY_PRIO,
60                 .checker_name  = HP_SW,
61                 .prio_name     = PRIO_HP_SW,
62         },
63         {
64                 /* VIRTUAL ARRAY 7400 */
65                 .vendor        = "HP",
66                 .product       = "A6189A",
67                 .pgpolicy      = MULTIBUS,
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[01]0",
74                 .hwhandler     = "1 hp_sw",
75                 .pgpolicy      = GROUP_BY_PRIO,
76                 .no_path_retry = 12,
77                 .checker_name  = HP_SW,
78                 .prio_name     = PRIO_HP_SW,
79         },
80         {
81                 /* MSA 1000/1500 with new firmware */
82                 .vendor        = "(COMPAQ|HP)",
83                 .product       = "MSA VOLUME",
84                 .pgpolicy      = GROUP_BY_PRIO,
85                 .pgfailback    = -FAILBACK_IMMEDIATE,
86                 .no_path_retry = 12,
87                 .prio_name     = PRIO_ALUA,
88         },
89         {
90                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
91                 .vendor        = "(COMPAQ|HP)",
92                 .product       = "(HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0)",
93                 .pgpolicy      = GROUP_BY_PRIO,
94                 .pgfailback    = -FAILBACK_IMMEDIATE,
95                 .no_path_retry = 12,
96                 .prio_name     = PRIO_ALUA,
97         },
98         {
99                 /* MSA2000 family with old firmware */
100                 .vendor        = "HP",
101                 .product       = "(MSA2[02]12fc|MSA2012i)",
102                 .pgpolicy      = MULTIBUS,
103                 .no_path_retry = 18,
104         },
105         {
106                 /* MSA2000 family with new firmware */
107                 .vendor        = "HP",
108                 .product       = "(MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME)",
109                 .pgpolicy      = GROUP_BY_PRIO,
110                 .pgfailback    = -FAILBACK_IMMEDIATE,
111                 .no_path_retry = 18,
112                 .prio_name     = PRIO_ALUA,
113         },
114         {
115                 /* MSA 1040/2040 family */
116                 .vendor        = "HP",
117                 .product       = "MSA [12]040 SA[NS]",
118                 .pgpolicy      = GROUP_BY_PRIO,
119                 .pgfailback    = -FAILBACK_IMMEDIATE,
120                 .no_path_retry = 18,
121                 .prio_name     = PRIO_ALUA,
122         },
123         {
124                 /* SAN Virtualization Services Platform */
125                 .vendor        = "HP",
126                 .product       = "HSVX700",
127                 .hwhandler     = "1 alua",
128                 .pgpolicy      = GROUP_BY_PRIO,
129                 .pgfailback    = -FAILBACK_IMMEDIATE,
130                 .no_path_retry = 12,
131                 .prio_name     = PRIO_ALUA,
132         },
133         {
134                 /* Smart Array */
135                 .vendor        = "HP",
136                 .product       = "LOGICAL VOLUME",
137                 .pgpolicy      = MULTIBUS,
138                 .no_path_retry = 12,
139         },
140         {
141                 /* P2000 family */
142                 .vendor        = "HP",
143                 .product       = "(P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI)",
144                 .pgpolicy      = GROUP_BY_PRIO,
145                 .pgfailback    = -FAILBACK_IMMEDIATE,
146                 .no_path_retry = 18,
147                 .prio_name     = PRIO_ALUA,
148         },
149         {
150                 /* StoreVirtual 4000 family */
151                 .vendor        = "LEFTHAND",
152                 .product       = "^(P4000|iSCSIDisk)",
153                 .pgpolicy      = GROUP_BY_PRIO,
154                 .pgfailback    = -FAILBACK_IMMEDIATE,
155                 .no_path_retry = 18,
156                 .prio_name     = PRIO_ALUA,
157         },
158         /*
159          * DataDirect Networks
160          */
161         {
162                 .vendor        = "DDN",
163                 .product       = "SAN DataDirector",
164                 .pgpolicy      = MULTIBUS,
165         },
166         {
167                 .vendor        = "DDN",
168                 .product       = "^EF3010",
169                 .pgpolicy      = MULTIBUS,
170                 .no_path_retry = 30,
171         },
172         {
173                 .vendor        = "DDN",
174                 .product       = "^(EF3015|S2A|SFA)",
175                 .pgpolicy      = GROUP_BY_PRIO,
176                 .pgfailback    = -FAILBACK_IMMEDIATE,
177                 .prio_name     = PRIO_ALUA,
178                 .no_path_retry = 30,
179         },
180         /*
181          * Dell EMC
182          */
183         {
184                 /* Symmetrix / DMX / VMAX */
185                 .vendor        = "EMC",
186                 .product       = "SYMMETRIX",
187                 .pgpolicy      = MULTIBUS,
188                 .no_path_retry = 6,
189         },
190         {
191                 /* DGC CLARiiON CX/AX / EMC VNX and Unity */
192                 .vendor        = "^DGC",
193                 .product       = "^(RAID|DISK|VRAID)",
194                 .bl_product    = "LUNZ",
195                 .hwhandler     = "1 emc",
196                 .pgpolicy      = GROUP_BY_PRIO,
197                 .pgfailback    = -FAILBACK_IMMEDIATE,
198                 .no_path_retry = (300 / DEFAULT_CHECKINT),
199                 .checker_name  = EMC_CLARIION,
200                 .prio_name     = PRIO_EMC,
201         },
202         {
203                 /* Invista / VPLEX */
204                 .vendor        = "EMC",
205                 .product       = "Invista",
206                 .bl_product    = "LUNZ",
207                 .pgpolicy      = MULTIBUS,
208                 .no_path_retry = 5,
209         },
210         {
211                 .vendor        = "XtremIO",
212                 .product       = "XtremApp",
213                 .pgpolicy      = MULTIBUS,
214         },
215         {
216                 /*
217                  * Dell SC Series, formerly Compellent
218                  *
219                  * Maintainer : Sean McGinnis
220                  * Mail : sean_mcginnis@dell.com
221                  */
222                 .vendor        = "COMPELNT",
223                 .product       = "Compellent Vol",
224                 .pgpolicy      = MULTIBUS,
225                 .no_path_retry = NO_PATH_RETRY_QUEUE,
226         },
227                 /* MD Series */
228         {
229                 .vendor        = "DELL",
230                 .product       = "^MD3",
231                 .bl_product    = "Universal Xport",
232                 .pgpolicy      = GROUP_BY_PRIO,
233                 .checker_name  = RDAC,
234                 .features      = "2 pg_init_retries 50",
235                 .hwhandler     = "1 rdac",
236                 .prio_name     = PRIO_RDAC,
237                 .pgfailback    = -FAILBACK_IMMEDIATE,
238                 .no_path_retry = 30,
239         },
240         /*
241          * Fujitsu
242          */
243         {
244                 .vendor        = "FSC",
245                 .product       = "CentricStor",
246                 .pgpolicy      = GROUP_BY_SERIAL,
247         },
248         {
249                 .vendor        = "FUJITSU",
250                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
251                 .pgpolicy      = GROUP_BY_PRIO,
252                 .pgfailback    = -FAILBACK_IMMEDIATE,
253                 .no_path_retry = 10,
254                 .prio_name     = PRIO_ALUA,
255         },
256         {
257                 /* FibreCAT S80 */
258                 .vendor        = "(EUROLOGC|EuroLogc)",
259                 .product       = "FC2502",
260                 .pgpolicy      = MULTIBUS,
261         },
262         {
263                 .vendor        = "FUJITSU",
264                 .product       = "E[248]000",
265                 .pgpolicy      = GROUP_BY_PRIO,
266                 .pgfailback    = -FAILBACK_IMMEDIATE,
267                 .no_path_retry = 10,
268                 .prio_name     = PRIO_ALUA,
269         },
270         /*
271          * Hitachi
272          *
273          * Maintainer : Matthias Rudolph
274          * Mail : matthias.rudolph@hds.com
275          */
276         {
277                 /* USP-V, HUS VM, VSP, VSP G1000 and VSP GX00 families */
278                 .vendor        = "(HITACHI|HP)",
279                 .product       = "^OPEN-",
280                 .pgpolicy      = MULTIBUS,
281         },
282         {
283                 /* AMS 2000 and HUS 100 families */
284                 .vendor        = "(HITACHI|HP)",
285                 .product       = "^DF",
286                 .no_path_retry = NO_PATH_RETRY_QUEUE,
287                 .pgpolicy      = GROUP_BY_PRIO,
288                 .pgfailback    = -FAILBACK_IMMEDIATE,
289                 .prio_name     = PRIO_HDS,
290         },
291         /*
292          * IBM
293          *
294          * Maintainer : Hannes Reinecke
295          * Mail : hare@suse.de
296          */
297         {
298                 .vendor        = "IBM",
299                 .product       = "ProFibre 4000R",
300                 .pgpolicy      = MULTIBUS,
301         },
302         {
303                 /* DS4300 / FAStT600 */
304                 .vendor        = "IBM",
305                 .product       = "^1722-600",
306                 .bl_product    = "Universal Xport",
307                 .pgpolicy      = GROUP_BY_PRIO,
308                 .checker_name  = RDAC,
309                 .features      = "2 pg_init_retries 50",
310                 .hwhandler     = "1 rdac",
311                 .prio_name     = PRIO_RDAC,
312                 .pgfailback    = -FAILBACK_IMMEDIATE,
313                 .no_path_retry = 30,
314         },
315         {
316                 /* DS4100 / FAStT100 */
317                 .vendor        = "IBM",
318                 .product       = "^1724",
319                 .bl_product    = "Universal Xport",
320                 .pgpolicy      = GROUP_BY_PRIO,
321                 .checker_name  = RDAC,
322                 .features      = "2 pg_init_retries 50",
323                 .hwhandler     = "1 rdac",
324                 .prio_name     = PRIO_RDAC,
325                 .pgfailback    = -FAILBACK_IMMEDIATE,
326                 .no_path_retry = 30,
327         },
328         {
329                 /* DS3000 / DS3200 / DS3300 / DS3400 / Boot DS */
330                 .vendor        = "IBM",
331                 .product       = "^1726",
332                 .bl_product    = "Universal Xport",
333                 .pgpolicy      = GROUP_BY_PRIO,
334                 .checker_name  = RDAC,
335                 .features      = "2 pg_init_retries 50",
336                 .hwhandler     = "1 rdac",
337                 .prio_name     = PRIO_RDAC,
338                 .pgfailback    = -FAILBACK_IMMEDIATE,
339                 .no_path_retry = 30,
340         },
341         {
342                 /* DS4400 / DS4500 / FAStT700 / FAStT900 */
343                 .vendor        = "IBM",
344                 .product       = "^1742",
345                 .bl_product    = "Universal Xport",
346                 .pgpolicy      = GROUP_BY_PRIO,
347                 .checker_name  = RDAC,
348                 .features      = "2 pg_init_retries 50",
349                 .hwhandler     = "1 rdac",
350                 .prio_name     = PRIO_RDAC,
351                 .pgfailback    = -FAILBACK_IMMEDIATE,
352                 .no_path_retry = 30,
353         },
354         {
355                 /* DS3500 / DS3512 / DS3524 */
356                 .vendor        = "IBM",
357                 .product       = "^1746",
358                 .bl_product    = "Universal Xport",
359                 .pgpolicy      = GROUP_BY_PRIO,
360                 .checker_name  = RDAC,
361                 .features      = "2 pg_init_retries 50",
362                 .hwhandler     = "1 rdac",
363                 .prio_name     = PRIO_RDAC,
364                 .pgfailback    = -FAILBACK_IMMEDIATE,
365                 .no_path_retry = 30,
366         },
367         {
368                 /* DCS3860 */
369                 .vendor        = "IBM",
370                 .product       = "^1813",
371                 .bl_product    = "Universal Xport",
372                 .pgpolicy      = GROUP_BY_PRIO,
373                 .checker_name  = RDAC,
374                 .features      = "2 pg_init_retries 50",
375                 .hwhandler     = "1 rdac",
376                 .prio_name     = PRIO_RDAC,
377                 .pgfailback    = -FAILBACK_IMMEDIATE,
378                 .no_path_retry = 30,
379         },
380         {
381                 /* DS3950 / DS4200 / DS4700 / DS5020 */
382                 .vendor        = "IBM",
383                 .product       = "^1814",
384                 .bl_product    = "Universal Xport",
385                 .pgpolicy      = GROUP_BY_PRIO,
386                 .checker_name  = RDAC,
387                 .features      = "2 pg_init_retries 50",
388                 .hwhandler     = "1 rdac",
389                 .prio_name     = PRIO_RDAC,
390                 .pgfailback    = -FAILBACK_IMMEDIATE,
391                 .no_path_retry = 30,
392         },
393         {
394                 /* DS4800 */
395                 .vendor        = "IBM",
396                 .product       = "^1815",
397                 .bl_product    = "Universal Xport",
398                 .pgpolicy      = GROUP_BY_PRIO,
399                 .checker_name  = RDAC,
400                 .features      = "2 pg_init_retries 50",
401                 .hwhandler     = "1 rdac",
402                 .prio_name     = PRIO_RDAC,
403                 .pgfailback    = -FAILBACK_IMMEDIATE,
404                 .no_path_retry = 30,
405         },
406         {
407                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
408                 .vendor        = "IBM",
409                 .product       = "^1818",
410                 .bl_product    = "Universal Xport",
411                 .pgpolicy      = GROUP_BY_PRIO,
412                 .checker_name  = RDAC,
413                 .features      = "2 pg_init_retries 50",
414                 .hwhandler     = "1 rdac",
415                 .prio_name     = PRIO_RDAC,
416                 .pgfailback    = -FAILBACK_IMMEDIATE,
417                 .no_path_retry = 30,
418         },
419         {
420                 /* Netfinity Fibre Channel RAID Controller Unit */
421                 .vendor        = "IBM",
422                 .product       = "^3526",
423                 .bl_product    = "Universal Xport",
424                 .pgpolicy      = GROUP_BY_PRIO,
425                 .checker_name  = RDAC,
426                 .features      = "2 pg_init_retries 50",
427                 .hwhandler     = "1 rdac",
428                 .prio_name     = PRIO_RDAC,
429                 .pgfailback    = -FAILBACK_IMMEDIATE,
430                 .no_path_retry = 30,
431         },
432         {
433                 /* FAStT200 and FAStT500 */
434                 .vendor        = "IBM",
435                 .product       = "^(3542|3552)",
436                 .bl_product    = "Universal Xport",
437                 .pgpolicy      = GROUP_BY_PRIO,
438                 .checker_name  = RDAC,
439                 .features      = "2 pg_init_retries 50",
440                 .hwhandler     = "1 rdac",
441                 .prio_name     = PRIO_RDAC,
442                 .pgfailback    = -FAILBACK_IMMEDIATE,
443                 .no_path_retry = 30,
444         },
445         {
446                 /* Enterprise Storage Server / Shark family */
447                 .vendor        = "IBM",
448                 .product       = "^2105",
449                 .no_path_retry = NO_PATH_RETRY_QUEUE,
450                 .pgpolicy      = MULTIBUS,
451         },
452         {
453                 /* DS6000 / DS6800 */
454                 .vendor        = "IBM",
455                 .product       = "^1750500",
456                 .no_path_retry = NO_PATH_RETRY_QUEUE,
457                 .pgpolicy      = GROUP_BY_PRIO,
458                 .pgfailback    = -FAILBACK_IMMEDIATE,
459                 .prio_name     = PRIO_ALUA,
460         },
461         {
462                 /* DS8000 family */
463                 .vendor        = "IBM",
464                 .product       = "^2107900",
465                 .no_path_retry = NO_PATH_RETRY_QUEUE,
466                 .pgpolicy      = MULTIBUS,
467         },
468         {
469                 /* Storwize family / SAN Volume Controller / Flex System V7000 / FlashSystem V840/V9000 */
470                 .vendor        = "IBM",
471                 .product       = "^2145",
472                 .no_path_retry = NO_PATH_RETRY_QUEUE,
473                 .pgpolicy      = GROUP_BY_PRIO,
474                 .pgfailback    = -FAILBACK_IMMEDIATE,
475                 .prio_name     = PRIO_ALUA,
476         },
477         {
478                 .vendor        = "IBM",
479                 .product       = "S/390 DASD ECKD",
480                 .bl_product    = "S/390",
481                 .uid_attribute = "ID_UID",
482                 .no_path_retry = NO_PATH_RETRY_QUEUE,
483                 .pgpolicy      = MULTIBUS,
484         },
485         {
486                 .vendor        = "IBM",
487                 .product       = "S/390 DASD FBA",
488                 .bl_product    = "S/390",
489                 .uid_attribute = "ID_UID",
490                 .no_path_retry = NO_PATH_RETRY_QUEUE,
491                 .pgpolicy      = MULTIBUS,
492         },
493         {
494                 /* Power RAID */
495                 .vendor        = "IBM",
496                 .product       = "^IPR",
497                 .no_path_retry = NO_PATH_RETRY_QUEUE,
498                 .hwhandler     = "1 alua",
499                 .pgpolicy      = GROUP_BY_PRIO,
500                 .pgfailback    = -FAILBACK_IMMEDIATE,
501                 .prio_name     = PRIO_ALUA,
502         },
503         {
504                 /* SAS RAID Controller Module (RSSM) */
505                 .vendor        = "IBM",
506                 .product       = "1820N00",
507                 .pgpolicy      = GROUP_BY_PRIO,
508                 .pgfailback    = -FAILBACK_IMMEDIATE,
509                 .no_path_retry = NO_PATH_RETRY_QUEUE,
510                 .prio_name     = PRIO_ALUA,
511         },
512         {
513                 /* XIV Storage System / FlashSystem A9000/A9000R */
514                 .vendor        = "IBM",
515                 .product       = "2810XIV",
516                 .no_path_retry = NO_PATH_RETRY_QUEUE,
517                 .pgpolicy      = MULTIBUS,
518         },
519         {
520                 /* FlashSystem 710/720/810/820/840/900 */
521                 .vendor        = "IBM",
522                 .product       = "FlashSystem",
523                 .pgpolicy      = MULTIBUS,
524         },
525         {
526                 /* DDN */
527                 .vendor        = "IBM",
528                 .product       = "^(DCS9900|2851)",
529                 .pgpolicy      = GROUP_BY_PRIO,
530                 .pgfailback    = -FAILBACK_IMMEDIATE,
531                 .prio_name     = PRIO_ALUA,
532                 .no_path_retry = 30,
533         },
534                 /*
535                  * IBM Power Virtual SCSI Devices
536                  *
537                  * Maintainer : Brian King
538                  * Mail : brking@linux.vnet.ibm.com
539                  */
540         {
541                 .vendor        = "AIX",
542                 .product       = "VDASD",
543                 .pgpolicy      = MULTIBUS,
544                 .no_path_retry = (300 / DEFAULT_CHECKINT),
545         },
546         {
547                 /* 3303 NVDISK */
548                 .vendor        = "IBM",
549                 .product       = "3303[ ]+NVDISK",
550                 .no_path_retry = (300 / DEFAULT_CHECKINT),
551         },
552         {
553                 .vendor        = "AIX",
554                 .product       = "NVDISK",
555                 .hwhandler     = "1 alua",
556                 .pgpolicy      = GROUP_BY_PRIO,
557                 .pgfailback    = -FAILBACK_IMMEDIATE,
558                 .no_path_retry = (300 / DEFAULT_CHECKINT),
559                 .prio_name     = PRIO_ALUA,
560         },
561         /*
562          * NetApp
563          */
564         {
565                 /*
566                  * ONTAP family
567                  *
568                  * Maintainer : Martin George
569                  * Mail : marting@netapp.com
570                  */
571                 .vendor        = "NETAPP",
572                 .product       = "LUN",
573                 .features      = "2 pg_init_retries 50",
574                 .no_path_retry = NO_PATH_RETRY_QUEUE,
575                 .pgpolicy      = GROUP_BY_PRIO,
576                 .pgfailback    = -FAILBACK_IMMEDIATE,
577                 .flush_on_last_del = FLUSH_ENABLED,
578                 .dev_loss      = MAX_DEV_LOSS_TMO,
579                 .prio_name     = PRIO_ONTAP,
580         },
581         {
582                 /*
583                  * SANtricity(RDAC) family
584                  *
585                  * Maintainer : Sean Stewart
586                  * Mail : sean.stewart@netapp.com
587                  */
588                 .vendor        = "(NETAPP|LSI|ENGENIO)",
589                 .product       = "INF-01-00",
590                 .bl_product    = "Universal Xport",
591                 .pgpolicy      = GROUP_BY_PRIO,
592                 .checker_name  = RDAC,
593                 .features      = "2 pg_init_retries 50",
594                 .hwhandler     = "1 rdac",
595                 .prio_name     = PRIO_RDAC,
596                 .pgfailback    = -FAILBACK_IMMEDIATE,
597                 .no_path_retry = 30,
598         },
599         {
600                 /*
601                  * SolidFir family
602                  *
603                  * Maintainer : PJ Waskiewicz
604                  * Mail : pj.waskiewicz@netapp.com
605                  */
606                 .vendor        = "SolidFir",
607                 .product       = "SSD SAN",
608                 .pgpolicy      = MULTIBUS,
609                 .no_path_retry = 24,
610         },
611         /*
612          * Nexenta
613          *
614          * Maintainer : Yacine Kheddache
615          * Mail : yacine@alyseo.com
616          */
617         {
618                 .vendor        = "NEXENTA",
619                 .product       = "COMSTAR",
620                 .pgpolicy      = GROUP_BY_SERIAL,
621                 .no_path_retry = 30,
622         },
623         /*
624          * SGI
625          */
626         {
627                 .vendor        = "SGI",
628                 .product       = "TP9100",
629                 .pgpolicy      = MULTIBUS,
630         },
631         {
632                 /* Total Performance family */
633                 .vendor        = "SGI",
634                 .product       = "TP9[3457]00",
635                 .bl_product    = "Universal Xport",
636                 .pgpolicy      = GROUP_BY_PRIO,
637                 .checker_name  = RDAC,
638                 .features      = "2 pg_init_retries 50",
639                 .hwhandler     = "1 rdac",
640                 .prio_name     = PRIO_RDAC,
641                 .pgfailback    = -FAILBACK_IMMEDIATE,
642                 .no_path_retry = 30,
643         },
644         {
645                 /* InfiniteStorage family */
646                 .vendor        = "SGI",
647                 .product       = "IS",
648                 .bl_product    = "Universal Xport",
649                 .pgpolicy      = GROUP_BY_PRIO,
650                 .checker_name  = RDAC,
651                 .features      = "2 pg_init_retries 50",
652                 .hwhandler     = "1 rdac",
653                 .prio_name     = PRIO_RDAC,
654                 .pgfailback    = -FAILBACK_IMMEDIATE,
655                 .no_path_retry = 30,
656         },
657         {
658                 /* DDN */
659                 .vendor        = "SGI",
660                 .product       = "^DD[46]A-",
661                 .pgpolicy      = GROUP_BY_PRIO,
662                 .pgfailback    = -FAILBACK_IMMEDIATE,
663                 .prio_name     = PRIO_ALUA,
664                 .no_path_retry = 30,
665         },
666         /*
667          * NEC
668          */
669         {
670                 /* M-Series */
671                 .vendor        = "NEC",
672                 .product       = "DISK ARRAY",
673                 .hwhandler     = "1 alua",
674                 .pgpolicy      = GROUP_BY_PRIO,
675                 .pgfailback    = -FAILBACK_IMMEDIATE,
676                 .prio_name     = PRIO_ALUA,
677         },
678         /*
679          * Oracle
680          */
681                 /*
682                  * Pillar Data / Oracle FS
683                  *
684                  * Maintainer : Srinivasan Ramani
685                  * Mail : srinivas.ramani@oracle.com
686                  */
687         {
688                 .vendor        = "^Pillar",
689                 .product       = "^Axiom",
690                 .pgpolicy      = GROUP_BY_PRIO,
691                 .pgfailback    = -FAILBACK_IMMEDIATE,
692                 .prio_name     = PRIO_ALUA,
693         },
694         {
695                 .vendor        = "^Oracle",
696                 .product       = "^Oracle FS",
697                 .pgpolicy      = GROUP_BY_PRIO,
698                 .pgfailback    = -FAILBACK_IMMEDIATE,
699                 .prio_name     = PRIO_ALUA,
700         },
701                 /* Sun - StorageTek */
702         {
703                 /* B210, B220, B240 and B280 */
704                 .vendor        = "STK",
705                 .product       = "BladeCtlr",
706                 .bl_product    = "Universal Xport",
707                 .pgpolicy      = GROUP_BY_PRIO,
708                 .checker_name  = RDAC,
709                 .features      = "2 pg_init_retries 50",
710                 .hwhandler     = "1 rdac",
711                 .prio_name     = PRIO_RDAC,
712                 .pgfailback    = -FAILBACK_IMMEDIATE,
713                 .no_path_retry = 30,
714         },
715         {
716                 /* 9176, D173, D178, D210, D220, D240 and D280 */
717                 .vendor        = "STK",
718                 .product       = "OPENstorage",
719                 .bl_product    = "Universal Xport",
720                 .pgpolicy      = GROUP_BY_PRIO,
721                 .checker_name  = RDAC,
722                 .features      = "2 pg_init_retries 50",
723                 .hwhandler     = "1 rdac",
724                 .prio_name     = PRIO_RDAC,
725                 .pgfailback    = -FAILBACK_IMMEDIATE,
726                 .no_path_retry = 30,
727         },
728         {
729                 /* 6540 */
730                 .vendor        = "STK",
731                 .product       = "FLEXLINE 380",
732                 .bl_product    = "Universal Xport",
733                 .pgpolicy      = GROUP_BY_PRIO,
734                 .checker_name  = RDAC,
735                 .features      = "2 pg_init_retries 50",
736                 .hwhandler     = "1 rdac",
737                 .prio_name     = PRIO_RDAC,
738                 .pgfailback    = -FAILBACK_IMMEDIATE,
739                 .no_path_retry = 30,
740         },
741         {
742                 /* 3510 / 6020 and 6120 */
743                 .vendor        = "SUN",
744                 .product       = "(StorEdge 3510|T4)",
745                 .pgpolicy      = MULTIBUS,
746         },
747         {
748                 .vendor        = "SUN",
749                 .product       = "STK6580_6780",
750                 .bl_product    = "Universal Xport",
751                 .pgpolicy      = GROUP_BY_PRIO,
752                 .checker_name  = RDAC,
753                 .features      = "2 pg_init_retries 50",
754                 .hwhandler     = "1 rdac",
755                 .prio_name     = PRIO_RDAC,
756                 .pgfailback    = -FAILBACK_IMMEDIATE,
757                 .no_path_retry = 30,
758         },
759         {
760                 /* 6130 / 6140 */
761                 .vendor        = "SUN",
762                 .product       = "CSM[12]00_R",
763                 .bl_product    = "Universal Xport",
764                 .pgpolicy      = GROUP_BY_PRIO,
765                 .checker_name  = RDAC,
766                 .features      = "2 pg_init_retries 50",
767                 .hwhandler     = "1 rdac",
768                 .prio_name     = PRIO_RDAC,
769                 .pgfailback    = -FAILBACK_IMMEDIATE,
770                 .no_path_retry = 30,
771         },
772         {
773                 /* 2500 / 2510 / 2530 / 2540 */
774                 .vendor        = "SUN",
775                 .product       = "LCSM100_[IEFS]",
776                 .bl_product    = "Universal Xport",
777                 .pgpolicy      = GROUP_BY_PRIO,
778                 .checker_name  = RDAC,
779                 .features      = "2 pg_init_retries 50",
780                 .hwhandler     = "1 rdac",
781                 .prio_name     = PRIO_RDAC,
782                 .pgfailback    = -FAILBACK_IMMEDIATE,
783                 .no_path_retry = 30,
784         },
785         {
786                 .vendor        = "SUN",
787                 .product       = "SUN_6180",
788                 .bl_product    = "Universal Xport",
789                 .pgpolicy      = GROUP_BY_PRIO,
790                 .checker_name  = RDAC,
791                 .features      = "2 pg_init_retries 50",
792                 .hwhandler     = "1 rdac",
793                 .prio_name     = PRIO_RDAC,
794                 .pgfailback    = -FAILBACK_IMMEDIATE,
795                 .no_path_retry = 30,
796         },
797         {
798                 /* ZFS Storage Appliances */
799                 .vendor        = "SUN",
800                 .product       = "(Sun Storage|ZFS Storage|COMSTAR)",
801                 .pgpolicy      = GROUP_BY_PRIO,
802                 .pgfailback    = -FAILBACK_IMMEDIATE,
803                 .prio_name     = PRIO_ALUA,
804                 .no_path_retry = 30,
805         },
806         /*
807          * Pivot3
808          *
809          * Maintainer : Bart Brooks
810          * Mail : bartb@pivot3.com
811          */
812         {
813                 .vendor        = "PIVOT3",
814                 .product       = "RAIGE VOLUME",
815                 .no_path_retry = NO_PATH_RETRY_QUEUE,
816                 .pgpolicy      = MULTIBUS,
817         },
818         {
819                 .vendor        = "(NexGen|Pivot3)",
820                 .product       = "(TierStore|vSTAC)",
821                 .pgpolicy      = GROUP_BY_PRIO,
822                 .pgfailback    = -FAILBACK_IMMEDIATE,
823                 .prio_name     = PRIO_ALUA,
824                 .no_path_retry = NO_PATH_RETRY_QUEUE,
825         },
826         /*
827          * Intel
828          */
829         {
830                 .vendor        = "(Intel|INTEL)",
831                 .product       = "Multi-Flex",
832                 .bl_product    = "VTrak V-LUN",
833                 .hwhandler     = "1 alua",
834                 .pgpolicy      = GROUP_BY_PRIO,
835                 .pgfailback    = -FAILBACK_IMMEDIATE,
836                 .no_path_retry = NO_PATH_RETRY_QUEUE,
837                 .prio_name     = PRIO_ALUA,
838         },
839         /*
840          * Linux-IO Target
841          */
842         {
843                 .vendor        = "(LIO-ORG|SUSE)",
844                 .product       = "RBD",
845                 .hwhandler     = "1 alua",
846                 .pgpolicy      = GROUP_BY_PRIO,
847                 .pgfailback    = -FAILBACK_IMMEDIATE,
848                 .no_path_retry = 12,
849                 .prio_name     = PRIO_ALUA,
850         },
851         /*
852          * DataCore
853          */
854         {
855                 .vendor        = "DataCore",
856                 .product       = "SANmelody",
857                 .pgpolicy      = GROUP_BY_PRIO,
858                 .pgfailback    = -FAILBACK_IMMEDIATE,
859                 .no_path_retry = NO_PATH_RETRY_QUEUE,
860                 .prio_name     = PRIO_ALUA,
861         },
862         {
863                 /* SANsymphony */
864                 .vendor        = "DataCore",
865                 .product       = "Virtual Disk",
866                 .pgpolicy      = GROUP_BY_PRIO,
867                 .pgfailback    = -FAILBACK_IMMEDIATE,
868                 .no_path_retry = NO_PATH_RETRY_QUEUE,
869                 .prio_name     = PRIO_ALUA,
870         },
871         /*
872          * Pure Storage
873          */
874         {
875                 .vendor        = "PURE",
876                 .product       = "FlashArray",
877                 .pgpolicy      = MULTIBUS,
878         },
879         /*
880          * Huawei
881          */
882         {
883                 /* OceanStor V3 */
884                 .vendor        = "(HUAWEI|HUASY)",
885                 .product       = "XSG1",
886                 .pgpolicy      = MULTIBUS,
887         },
888         /*
889          * Red Hat
890          *
891          * Maintainer: Mike Christie
892          * Mail: mchristi@redhat.com
893          */
894         {
895                 .vendor        = "Ceph",
896                 .product       = "RBD",
897                 .checker_name  = RBD,
898                 .deferred_remove = DEFERRED_REMOVE_ON,
899         },
900         /*
901          * Kove
902          */
903         {
904                 .vendor        = "KOVE",
905                 .product       = "XPD",
906                 .pgpolicy      = MULTIBUS,
907         },
908         /*
909          * Infinidat
910          */
911         {
912                 .vendor        = "NFINIDAT",
913                 .product       = "InfiniBox",
914                 .pgpolicy      = GROUP_BY_PRIO,
915                 .pgfailback    = -FAILBACK_IMMEDIATE,
916                 .prio_name     = PRIO_ALUA,
917         },
918         /*
919          * Nimble Storage
920          */
921         {
922                 .vendor        = "Nimble",
923                 .product       = "Server",
924                 .hwhandler     = "1 alua",
925                 .pgpolicy      = GROUP_BY_PRIO,
926                 .pgfailback    = -FAILBACK_IMMEDIATE,
927                 .prio_name     = PRIO_ALUA,
928                 .no_path_retry = NO_PATH_RETRY_QUEUE,
929         },
930         /*
931          * Kaminario
932          */
933         {
934                 .vendor        = "KMNRIO",
935                 .product       = "K2",
936                 .pgpolicy      = MULTIBUS,
937         },
938         /*
939          * Tegile Systems
940          */
941         {
942                 .vendor        = "TEGILE",
943                 .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
944                 .hwhandler     = "1 alua",
945                 .pgpolicy      = GROUP_BY_PRIO,
946                 .pgfailback    = -FAILBACK_IMMEDIATE,
947                 .prio_name     = PRIO_ALUA,
948                 .no_path_retry = 10,
949         },
950         /*
951          * Imation/Nexsan
952          */
953         {
954                 /* E-Series */
955                 .vendor        = "NEXSAN",
956                 .product       = "NXS-B0",
957                 .pgpolicy      = GROUP_BY_PRIO,
958                 .pgfailback    = -FAILBACK_IMMEDIATE,
959                 .prio_name     = PRIO_ALUA,
960                 .no_path_retry = 15,
961         },
962         {
963                 /* SATABeast / SATABoy */
964                 .vendor        = "NEXSAN",
965                 .product       = "SATAB",
966                 .pgpolicy      = GROUP_BY_PRIO,
967                 .pgfailback    = -FAILBACK_IMMEDIATE,
968                 .prio_name     = PRIO_ALUA,
969                 .no_path_retry = 15,
970         },
971         {
972                 /* NST / UNITY */
973                 .vendor        = "Nexsan",
974                 .product       = "(NestOS|NST5000)",
975                 .hwhandler     = "1 alua",
976                 .pgpolicy      = GROUP_BY_PRIO,
977                 .pgfailback    = -FAILBACK_IMMEDIATE,
978                 .prio_name     = PRIO_ALUA,
979                 .no_path_retry = 30,
980         },
981         /*
982          * Xiotech
983          */
984         {
985                 /* Intelligent Storage Elements family */
986                 .vendor        = "(XIOTECH|XIOtech)",
987                 .product       = "ISE",
988                 .pgpolicy      = MULTIBUS,
989                 .no_path_retry = 12,
990         },
991         /*
992          * Violin Memory
993          */
994         {
995                 /* 3000 / 6000 Series */
996                 .vendor        = "VIOLIN",
997                 .product       = "SAN ARRAY$",
998                 .pgpolicy      = GROUP_BY_SERIAL,
999                 .no_path_retry = 30,
1000         },
1001         {
1002                 .vendor        = "VIOLIN",
1003                 .product       = "SAN ARRAY ALUA",
1004                 .hwhandler     = "1 alua",
1005                 .pgpolicy      = GROUP_BY_PRIO,
1006                 .pgfailback    = -FAILBACK_IMMEDIATE,
1007                 .prio_name     = PRIO_ALUA,
1008                 .no_path_retry = 30,
1009         },
1010         {
1011                 /* FSP 7000 family */
1012                 .vendor        = "VIOLIN",
1013                 .product       = "CONCERTO ARRAY",
1014                 .pgpolicy      = MULTIBUS,
1015                 .no_path_retry = 30,
1016         },
1017         /*
1018          * Promise Technology
1019          */
1020         {
1021                 .vendor        = "Promise",
1022                 .product       = "VTrak",
1023                 .bl_product    = "VTrak V-LUN",
1024                 .hwhandler     = "1 alua",
1025                 .pgpolicy      = GROUP_BY_PRIO,
1026                 .pgfailback    = -FAILBACK_IMMEDIATE,
1027                 .prio_name     = PRIO_ALUA,
1028                 .no_path_retry = 30,
1029         },
1030         {
1031                 .vendor        = "Promise",
1032                 .product       = "Vess",
1033                 .bl_product    = "Vess V-LUN",
1034                 .hwhandler     = "1 alua",
1035                 .pgpolicy      = GROUP_BY_PRIO,
1036                 .pgfailback    = -FAILBACK_IMMEDIATE,
1037                 .prio_name     = PRIO_ALUA,
1038                 .no_path_retry = 30,
1039         },
1040         /*
1041          * Infortrend Technology
1042          */
1043         {
1044                 /* EonStor / ESVA */
1045                 .vendor        = "^IFT",
1046                 .product       = ".*",
1047                 .pgpolicy      = GROUP_BY_PRIO,
1048                 .pgfailback    = -FAILBACK_IMMEDIATE,
1049                 .prio_name     = PRIO_ALUA,
1050                 .no_path_retry = 30,
1051         },
1052         /*
1053          * Generic NVMe devices
1054          */
1055         {
1056                 .vendor        = "NVME",
1057                 .product       = ".*",
1058                 .uid_attribute = "ID_WWN",
1059                 .checker_name  = DIRECTIO,
1060                 .retain_hwhandler = RETAIN_HWHANDLER_OFF,
1061         },
1062 #if 0
1063         /*
1064          * Copy this TEMPLATE to add new hardware.
1065          *
1066          * Keep only mandatory(.vendor and .product) and modified attributes.
1067          * Attributes with default values must be removed.
1068          * .vendor, .product, .revision and .bl_product are POSIX Extended regex.
1069          *
1070          * COMPANY_NAME
1071          *
1072          * Maintainer : XXX
1073          * Mail : XXX
1074          */
1075         {
1076                 /* If product-ID is different from marketing name add a comment */
1077                 .vendor        = "VENDOR",
1078                 .product       = "PRODUCT",
1079                 .revision      = "REVISION",
1080                 .bl_product    = "BL_PRODUCT",
1081                 .pgpolicy      = FAILOVER,
1082                 .uid_attribute = "ID_SERIAL",
1083                 .selector      = "service-time 0",
1084                 .checker_name  = TUR,
1085                 .alias_prefix  = "mpath",
1086                 .features      = "0",
1087                 .hwhandler     = "0",
1088                 .prio_name     = PRIO_CONST,
1089                 .prio_args     = "",
1090                 .pgfailback    = -FAILBACK_MANUAL,
1091                 .rr_weight     = RR_WEIGHT_NONE,
1092                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1093                 .minio         = 1000,
1094                 .minio_rq      = 1,
1095                 .flush_on_last_del = FLUSH_DISABLED,
1096                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
1097                 .fast_io_fail  = 5,
1098                 .dev_loss      = 600,
1099                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
1100                 .detect_prio   = DETECT_PRIO_ON,
1101                 .detect_checker = DETECT_CHECKER_ON,
1102                 .deferred_remove = DEFERRED_REMOVE_OFF,
1103                 .delay_watch_checks = DELAY_CHECKS_OFF,
1104                 .delay_wait_checks = DELAY_CHECKS_OFF,
1105                 .skip_kpartx = SKIP_KPARTX_OFF,
1106                 .max_sectors_kb = MAX_SECTORS_KB_UNDEF,
1107         },
1108 #endif
1109         /*
1110          * EOL
1111          */
1112         {
1113                 .vendor        = NULL,
1114                 .product       = NULL,
1115         },
1116 };
1117
1118 int setup_default_hwtable(vector hw)
1119 {
1120         int r = 0;
1121         struct hwentry * hwe = default_hw;
1122
1123         while (hwe->vendor) {
1124                 r += store_hwe(hw, hwe);
1125                 hwe++;
1126         }
1127         return r;
1128 }