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