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