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