multipath-tools: identify more arrays in hwtable
[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 D280",
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                 .vendor        = "STK",
741                 .product       = "FLEXLINE 380",
742                 .bl_product    = "Universal Xport",
743                 .pgpolicy      = GROUP_BY_PRIO,
744                 .checker_name  = RDAC,
745                 .features      = "2 pg_init_retries 50",
746                 .hwhandler     = "1 rdac",
747                 .prio_name     = PRIO_RDAC,
748                 .pgfailback    = -FAILBACK_IMMEDIATE,
749                 .no_path_retry = 30,
750         },
751         {
752                 .vendor        = "SUN",
753                 .product       = "(StorEdge 3510|T4)",
754                 .pgpolicy      = MULTIBUS,
755         },
756         {
757                 .vendor        = "SUN",
758                 .product       = "STK6580_6780",
759                 .bl_product    = "Universal Xport",
760                 .pgpolicy      = GROUP_BY_PRIO,
761                 .checker_name  = RDAC,
762                 .features      = "2 pg_init_retries 50",
763                 .hwhandler     = "1 rdac",
764                 .prio_name     = PRIO_RDAC,
765                 .pgfailback    = -FAILBACK_IMMEDIATE,
766                 .no_path_retry = 30,
767         },
768         {
769                 /* 6130 / 6140 */
770                 .vendor        = "SUN",
771                 .product       = "CSM[12]00_R",
772                 .bl_product    = "Universal Xport",
773                 .pgpolicy      = GROUP_BY_PRIO,
774                 .checker_name  = RDAC,
775                 .features      = "2 pg_init_retries 50",
776                 .hwhandler     = "1 rdac",
777                 .prio_name     = PRIO_RDAC,
778                 .pgfailback    = -FAILBACK_IMMEDIATE,
779                 .no_path_retry = 30,
780         },
781         {
782                 /* 2500 / 2510 / 2530 / 2540 */
783                 .vendor        = "SUN",
784                 .product       = "LCSM100_[IEFS]",
785                 .bl_product    = "Universal Xport",
786                 .pgpolicy      = GROUP_BY_PRIO,
787                 .checker_name  = RDAC,
788                 .features      = "2 pg_init_retries 50",
789                 .hwhandler     = "1 rdac",
790                 .prio_name     = PRIO_RDAC,
791                 .pgfailback    = -FAILBACK_IMMEDIATE,
792                 .no_path_retry = 30,
793         },
794         {
795                 .vendor        = "SUN",
796                 .product       = "SUN_6180",
797                 .bl_product    = "Universal Xport",
798                 .pgpolicy      = GROUP_BY_PRIO,
799                 .checker_name  = RDAC,
800                 .features      = "2 pg_init_retries 50",
801                 .hwhandler     = "1 rdac",
802                 .prio_name     = PRIO_RDAC,
803                 .pgfailback    = -FAILBACK_IMMEDIATE,
804                 .no_path_retry = 30,
805         },
806         /*
807          * Pivot3
808          *
809          * Maintainer : Bart Brooks
810          * Mail : bartb@pivot3.com
811          */
812         {
813                 .vendor        = "PIVOT3",
814                 .product       = "RAIGE VOLUME",
815                 .no_path_retry = NO_PATH_RETRY_QUEUE,
816                 .pgpolicy      = MULTIBUS,
817         },
818         {
819                 .vendor        = "(NexGen|Pivot3)",
820                 .product       = "(TierStore|vSTAC)",
821                 .pgpolicy      = GROUP_BY_PRIO,
822                 .pgfailback    = -FAILBACK_IMMEDIATE,
823                 .prio_name     = PRIO_ALUA,
824                 .no_path_retry = NO_PATH_RETRY_QUEUE,
825         },
826         /*
827          * Intel
828          */
829         {
830                 .vendor        = "(Intel|INTEL)",
831                 .product       = "Multi-Flex",
832                 .bl_product    = "VTrak V-LUN",
833                 .hwhandler     = "1 alua",
834                 .pgpolicy      = GROUP_BY_PRIO,
835                 .pgfailback    = -FAILBACK_IMMEDIATE,
836                 .no_path_retry = NO_PATH_RETRY_QUEUE,
837                 .prio_name     = PRIO_ALUA,
838         },
839         /*
840          * Linux-IO Target
841          */
842         {
843                 .vendor        = "(LIO-ORG|SUSE)",
844                 .product       = "RBD",
845                 .hwhandler     = "1 alua",
846                 .pgpolicy      = GROUP_BY_PRIO,
847                 .pgfailback    = -FAILBACK_IMMEDIATE,
848                 .no_path_retry = 12,
849                 .prio_name     = PRIO_ALUA,
850         },
851         /*
852          * DataCore
853          */
854         {
855                 .vendor        = "DataCore",
856                 .product       = "SANmelody",
857                 .pgpolicy      = GROUP_BY_PRIO,
858                 .pgfailback    = -FAILBACK_IMMEDIATE,
859                 .no_path_retry = NO_PATH_RETRY_QUEUE,
860                 .prio_name     = PRIO_ALUA,
861         },
862         {
863                 .vendor        = "DataCore",
864                 .product       = "Virtual Disk",
865                 .pgpolicy      = GROUP_BY_PRIO,
866                 .pgfailback    = -FAILBACK_IMMEDIATE,
867                 .no_path_retry = NO_PATH_RETRY_QUEUE,
868                 .prio_name     = PRIO_ALUA,
869         },
870         /*
871          * Pure Storage
872          */
873         {
874                 .vendor        = "PURE",
875                 .product       = "FlashArray",
876                 .pgpolicy      = MULTIBUS,
877                 .fast_io_fail  = 10,
878                 .dev_loss      = 60,
879         },
880         /*
881          * Huawei
882          */
883         {
884                 /* OceanStor V3 */
885                 .vendor        = "(HUAWEI|HUASY)",
886                 .product       = "XSG1",
887                 .pgpolicy      = MULTIBUS,
888         },
889         /*
890          * Red Hat
891          *
892          * Maintainer: Mike Christie
893          * Mail: mchristi@redhat.com
894          */
895         {
896                 .vendor        = "Ceph",
897                 .product       = "RBD",
898                 .no_path_retry = NO_PATH_RETRY_FAIL,
899                 .checker_name  = RBD,
900                 .deferred_remove = DEFERRED_REMOVE_ON,
901         },
902         /*
903          * Kove
904          */
905         {
906                 .vendor        = "KOVE",
907                 .product       = "XPD",
908                 .pgpolicy      = MULTIBUS,
909         },
910         /*
911          * Infinidat
912          */
913         {
914                 .vendor        = "NFINIDAT",
915                 .product       = "InfiniBox",
916                 .pgpolicy      = GROUP_BY_PRIO,
917                 .pgfailback    = -FAILBACK_IMMEDIATE,
918                 .prio_name     = PRIO_ALUA,
919         },
920         /*
921          * Nimble Storage
922          */
923         {
924                 .vendor        = "Nimble",
925                 .product       = "Server",
926                 .hwhandler     = "1 alua",
927                 .pgpolicy      = GROUP_BY_PRIO,
928                 .pgfailback    = -FAILBACK_IMMEDIATE,
929                 .prio_name     = PRIO_ALUA,
930                 .no_path_retry = NO_PATH_RETRY_QUEUE,
931         },
932         /*
933          * Kaminario
934          */
935         {
936                 .vendor        = "KMNRIO",
937                 .product       = "K2",
938                 .pgpolicy      = MULTIBUS,
939         },
940         /*
941          * Tegile Systems
942          */
943         {
944                 .vendor        = "TEGILE",
945                 .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
946                 .hwhandler     = "1 alua",
947                 .pgpolicy      = GROUP_BY_PRIO,
948                 .pgfailback    = -FAILBACK_IMMEDIATE,
949                 .prio_name     = PRIO_ALUA,
950                 .no_path_retry = 10,
951         },
952         /*
953          * Imation/Nexsan
954          */
955         {
956                 /* E-Series */
957                 .vendor        = "NEXSAN",
958                 .product       = "NXS-B0",
959                 .pgpolicy      = GROUP_BY_PRIO,
960                 .pgfailback    = -FAILBACK_IMMEDIATE,
961                 .prio_name     = PRIO_ALUA,
962                 .no_path_retry = 15,
963         },
964         {
965                 /* SATABeast / SATABoy */
966                 .vendor        = "NEXSAN",
967                 .product       = "SATAB",
968                 .pgpolicy      = GROUP_BY_PRIO,
969                 .pgfailback    = -FAILBACK_IMMEDIATE,
970                 .prio_name     = PRIO_ALUA,
971                 .no_path_retry = 15,
972         },
973         /*
974          * Xiotech
975          */
976         {
977                 /* Intelligent Storage Elements family */
978                 .vendor        = "(XIOTECH|XIOtech)",
979                 .product       = "ISE",
980                 .pgpolicy      = MULTIBUS,
981                 .no_path_retry = 12,
982         },
983         /*
984          * Violin Memory
985          */
986         {
987                 /* 3000 / 6000 Series */
988                 .vendor        = "VIOLIN",
989                 .product       = "SAN ARRAY$",
990                 .pgpolicy      = GROUP_BY_SERIAL,
991                 .no_path_retry = 30,
992         },
993         {
994                 .vendor        = "VIOLIN",
995                 .product       = "SAN ARRAY ALUA",
996                 .hwhandler     = "1 alua",
997                 .pgpolicy      = GROUP_BY_PRIO,
998                 .pgfailback    = -FAILBACK_IMMEDIATE,
999                 .prio_name     = PRIO_ALUA,
1000                 .no_path_retry = 30,
1001         },
1002         {
1003                 /* FSP 7000 family */
1004                 .vendor        = "VIOLIN",
1005                 .product       = "CONCERTO ARRAY",
1006                 .pgpolicy      = MULTIBUS,
1007                 .no_path_retry = 30,
1008         },
1009         /*
1010          * Promise Technology
1011          */
1012         {
1013                 .vendor        = "Promise",
1014                 .product       = "VTrak",
1015                 .bl_product    = "VTrak V-LUN",
1016                 .pgpolicy      = MULTIBUS,
1017                 .no_path_retry = 30,
1018         },
1019         /*
1020          * Infortrend Technology
1021          */
1022         {
1023                 /* EonStor / ESVA */
1024                 .vendor        = "^IFT",
1025                 .product       = ".*",
1026                 .pgpolicy      = GROUP_BY_PRIO,
1027                 .pgfailback    = -FAILBACK_IMMEDIATE,
1028                 .prio_name     = PRIO_ALUA,
1029                 .no_path_retry = 30,
1030         },
1031 #if 0
1032         /*
1033          * Copy this TEMPLATE to add new hardware.
1034          *
1035          * Keep only mandatory(.vendor and .product) and modified attributes.
1036          * Attributes with default values must be removed.
1037          * .vendor, .product, .revision and .bl_product are POSIX Extended regex.
1038          *
1039          * COMPANY_NAME
1040          *
1041          * Maintainer : XXX
1042          * Mail : XXX
1043          */
1044         {
1045                 /* If product-ID is different from marketing name add a comment */
1046                 .vendor        = "VENDOR",
1047                 .product       = "PRODUCT",
1048                 .revision      = "REVISION",
1049                 .bl_product    = "BL_PRODUCT",
1050                 .pgpolicy      = FAILOVER,
1051                 .uid_attribute = "ID_SERIAL",
1052                 .selector      = "service-time 0",
1053                 .checker_name  = TUR,
1054                 .alias_prefix  = "mpath",
1055                 .features      = "0",
1056                 .hwhandler     = "0",
1057                 .prio_name     = PRIO_CONST,
1058                 .prio_args     = "",
1059                 .pgfailback    = -FAILBACK_MANUAL,
1060                 .rr_weight     = RR_WEIGHT_NONE,
1061                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1062                 .minio         = 1000,
1063                 .minio_rq      = 1,
1064                 .flush_on_last_del = FLUSH_DISABLED,
1065                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
1066                 .fast_io_fail  = 5,
1067                 .dev_loss      = 600,
1068                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
1069                 .detect_prio   = DETECT_PRIO_ON,
1070                 .deferred_remove = DEFERRED_REMOVE_OFF,
1071                 .delay_watch_checks = DELAY_CHECKS_OFF,
1072                 .delay_wait_checks = DELAY_CHECKS_OFF,
1073         },
1074 #endif
1075         /*
1076          * EOL
1077          */
1078         {
1079                 .vendor        = NULL,
1080                 .product       = NULL,
1081         },
1082 };
1083
1084 extern int
1085 setup_default_hwtable (vector hw)
1086 {
1087         int r = 0;
1088         struct hwentry * hwe = default_hw;
1089
1090         while (hwe->vendor) {
1091                 r += store_hwe(hw, hwe);
1092                 hwe++;
1093         }
1094         return r;
1095 }