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