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