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