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