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