multipath-tools: merge emc and dell
[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          * DataDirect Networks
151          */
152         {
153                 .vendor        = "DDN",
154                 .product       = "SAN DataDirector",
155                 .pgpolicy      = MULTIBUS,
156         },
157         /*
158          * Dell EMC
159          */
160         {
161                 /* Symmetrix / DMX / VMAX */
162                 .vendor        = "EMC",
163                 .product       = "SYMMETRIX",
164                 .pgpolicy      = MULTIBUS,
165                 .no_path_retry = 6,
166         },
167         {
168                 /* DGC CLARiiON CX/AX / EMC VNX and Unity */
169                 .vendor        = "^DGC",
170                 .product       = "^(RAID|DISK|VRAID)",
171                 .bl_product    = "LUNZ",
172                 .hwhandler     = "1 emc",
173                 .pgpolicy      = GROUP_BY_PRIO,
174                 .pgfailback    = -FAILBACK_IMMEDIATE,
175                 .no_path_retry = (300 / DEFAULT_CHECKINT),
176                 .checker_name  = EMC_CLARIION,
177                 .prio_name     = PRIO_EMC,
178         },
179         {
180                 /* Invista / VPLEX */
181                 .vendor        = "EMC",
182                 .product       = "Invista",
183                 .bl_product    = "LUNZ",
184                 .pgpolicy      = MULTIBUS,
185                 .no_path_retry = 5,
186         },
187         {
188                 .vendor        = "XtremIO",
189                 .product       = "XtremApp",
190                 .pgpolicy      = MULTIBUS,
191         },
192         {
193                 /*
194                  * Dell SC Series, formerly Compellent
195                  *
196                  * Maintainer : Sean McGinnis
197                  * Mail : sean_mcginnis@dell.com
198                  */
199                 .vendor        = "COMPELNT",
200                 .product       = "Compellent Vol",
201                 .pgpolicy      = MULTIBUS,
202                 .no_path_retry = NO_PATH_RETRY_QUEUE,
203         },
204         {
205                 .vendor        = "DELL",
206                 .product       = "MD3000",
207                 .bl_product    = "Universal Xport",
208                 .pgpolicy      = GROUP_BY_PRIO,
209                 .checker_name  = RDAC,
210                 .features      = "2 pg_init_retries 50",
211                 .hwhandler     = "1 rdac",
212                 .prio_name     = PRIO_RDAC,
213                 .pgfailback    = -FAILBACK_IMMEDIATE,
214                 .no_path_retry = 30,
215         },
216         {
217                 .vendor        = "DELL",
218                 .product       = "(MD32xx|MD36xx)",
219                 .bl_product    = "Universal Xport",
220                 .pgpolicy      = GROUP_BY_PRIO,
221                 .checker_name  = RDAC,
222                 .features      = "2 pg_init_retries 50",
223                 .hwhandler     = "1 rdac",
224                 .prio_name     = PRIO_RDAC,
225                 .pgfailback    = -FAILBACK_IMMEDIATE,
226                 .no_path_retry = 30,
227         },
228         {
229                 .vendor        = "DELL",
230                 .product       = "(MD34xx|MD38xx)",
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          * Fujitsu
242          */
243         {
244                 .vendor        = "FSC",
245                 .product       = "CentricStor",
246                 .pgpolicy      = GROUP_BY_SERIAL,
247         },
248         {
249                 .vendor        = "FUJITSU",
250                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
251                 .pgpolicy      = GROUP_BY_PRIO,
252                 .pgfailback    = -FAILBACK_IMMEDIATE,
253                 .no_path_retry = 10,
254                 .prio_name     = PRIO_ALUA,
255         },
256         {
257                 /* FibreCAT S80 */
258                 .vendor        = "(EUROLOGC|EuroLogc)",
259                 .product       = "FC2502",
260                 .pgpolicy      = MULTIBUS,
261         },
262         /*
263          * Hitachi
264          *
265          * Maintainer : Matthias Rudolph
266          * Mail : matthias.rudolph@hds.com
267          */
268         {
269                 /* USP-V, HUS VM, VSP, VSP G1000 and VSP GX00 families */
270                 .vendor        = "(HITACHI|HP)",
271                 .product       = "^OPEN-",
272                 .pgpolicy      = MULTIBUS,
273         },
274         {
275                 /* AMS 2000 and HUS 100 families */
276                 .vendor        = "HITACHI",
277                 .product       = "^DF",
278                 .no_path_retry = NO_PATH_RETRY_QUEUE,
279                 .pgpolicy      = GROUP_BY_PRIO,
280                 .pgfailback    = -FAILBACK_IMMEDIATE,
281                 .prio_name     = PRIO_HDS,
282         },
283         /*
284          * IBM
285          *
286          * Maintainer : Hannes Reinecke
287          * Mail : hare@suse.de
288          */
289         {
290                 .vendor        = "IBM",
291                 .product       = "ProFibre 4000R",
292                 .pgpolicy      = MULTIBUS,
293         },
294         {
295                 /* DS4300 / FAStT600 */
296                 .vendor        = "IBM",
297                 .product       = "^1722-600",
298                 .bl_product    = "Universal Xport",
299                 .pgpolicy      = GROUP_BY_PRIO,
300                 .checker_name  = RDAC,
301                 .features      = "2 pg_init_retries 50",
302                 .hwhandler     = "1 rdac",
303                 .prio_name     = PRIO_RDAC,
304                 .pgfailback    = -FAILBACK_IMMEDIATE,
305                 .no_path_retry = 30,
306         },
307         {
308                 /* DS4100 / FAStT100 */
309                 .vendor        = "IBM",
310                 .product       = "^1724",
311                 .bl_product    = "Universal Xport",
312                 .pgpolicy      = GROUP_BY_PRIO,
313                 .checker_name  = RDAC,
314                 .features      = "2 pg_init_retries 50",
315                 .hwhandler     = "1 rdac",
316                 .prio_name     = PRIO_RDAC,
317                 .pgfailback    = -FAILBACK_IMMEDIATE,
318                 .no_path_retry = 30,
319         },
320         {
321                 /* DS3200 / DS3300 / DS3400 / Boot DS */
322                 .vendor        = "IBM",
323                 .product       = "^1726",
324                 .bl_product    = "Universal Xport",
325                 .pgpolicy      = GROUP_BY_PRIO,
326                 .checker_name  = RDAC,
327                 .features      = "2 pg_init_retries 50",
328                 .hwhandler     = "1 rdac",
329                 .prio_name     = PRIO_RDAC,
330                 .pgfailback    = -FAILBACK_IMMEDIATE,
331                 .no_path_retry = 30,
332         },
333         {
334                 /* DS4400 / DS4500 / FAStT700 / FAStT900 */
335                 .vendor        = "IBM",
336                 .product       = "^1742",
337                 .bl_product    = "Universal Xport",
338                 .pgpolicy      = GROUP_BY_PRIO,
339                 .checker_name  = RDAC,
340                 .features      = "2 pg_init_retries 50",
341                 .hwhandler     = "1 rdac",
342                 .prio_name     = PRIO_RDAC,
343                 .pgfailback    = -FAILBACK_IMMEDIATE,
344                 .no_path_retry = 30,
345         },
346         {
347                 /* DS3500 / DS3512 / DS3524 */
348                 .vendor        = "IBM",
349                 .product       = "^1746",
350                 .bl_product    = "Universal Xport",
351                 .pgpolicy      = GROUP_BY_PRIO,
352                 .checker_name  = RDAC,
353                 .features      = "2 pg_init_retries 50",
354                 .hwhandler     = "1 rdac",
355                 .prio_name     = PRIO_RDAC,
356                 .pgfailback    = -FAILBACK_IMMEDIATE,
357                 .no_path_retry = 30,
358         },
359         {
360                 /* DCS3860 */
361                 .vendor        = "IBM",
362                 .product       = "^1813",
363                 .bl_product    = "Universal Xport",
364                 .pgpolicy      = GROUP_BY_PRIO,
365                 .checker_name  = RDAC,
366                 .features      = "2 pg_init_retries 50",
367                 .hwhandler     = "1 rdac",
368                 .prio_name     = PRIO_RDAC,
369                 .pgfailback    = -FAILBACK_IMMEDIATE,
370                 .no_path_retry = 30,
371         },
372         {
373                 /* DS3950 / DS4200 / DS4700 / DS5020 */
374                 .vendor        = "IBM",
375                 .product       = "^1814",
376                 .bl_product    = "Universal Xport",
377                 .pgpolicy      = GROUP_BY_PRIO,
378                 .checker_name  = RDAC,
379                 .features      = "2 pg_init_retries 50",
380                 .hwhandler     = "1 rdac",
381                 .prio_name     = PRIO_RDAC,
382                 .pgfailback    = -FAILBACK_IMMEDIATE,
383                 .no_path_retry = 30,
384         },
385         {
386                 /* DS4800 */
387                 .vendor        = "IBM",
388                 .product       = "^1815",
389                 .bl_product    = "Universal Xport",
390                 .pgpolicy      = GROUP_BY_PRIO,
391                 .checker_name  = RDAC,
392                 .features      = "2 pg_init_retries 50",
393                 .hwhandler     = "1 rdac",
394                 .prio_name     = PRIO_RDAC,
395                 .pgfailback    = -FAILBACK_IMMEDIATE,
396                 .no_path_retry = 30,
397         },
398         {
399                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
400                 .vendor        = "IBM",
401                 .product       = "^1818",
402                 .bl_product    = "Universal Xport",
403                 .pgpolicy      = GROUP_BY_PRIO,
404                 .checker_name  = RDAC,
405                 .features      = "2 pg_init_retries 50",
406                 .hwhandler     = "1 rdac",
407                 .prio_name     = PRIO_RDAC,
408                 .pgfailback    = -FAILBACK_IMMEDIATE,
409                 .no_path_retry = 30,
410         },
411         {
412                 /* Netfinity Fibre Channel RAID Controller Unit */
413                 .vendor        = "IBM",
414                 .product       = "^3526",
415                 .bl_product    = "Universal Xport",
416                 .pgpolicy      = GROUP_BY_PRIO,
417                 .checker_name  = RDAC,
418                 .features      = "2 pg_init_retries 50",
419                 .hwhandler     = "1 rdac",
420                 .prio_name     = PRIO_RDAC,
421                 .pgfailback    = -FAILBACK_IMMEDIATE,
422                 .no_path_retry = 30,
423         },
424         {
425                 /* DS4200 / FAStT200 */
426                 .vendor        = "IBM",
427                 .product       = "^3542",
428                 .bl_product    = "Universal Xport",
429                 .pgpolicy      = GROUP_BY_PRIO,
430                 .checker_name  = RDAC,
431                 .features      = "2 pg_init_retries 50",
432                 .hwhandler     = "1 rdac",
433                 .prio_name     = PRIO_RDAC,
434                 .pgfailback    = -FAILBACK_IMMEDIATE,
435                 .no_path_retry = 30,
436         },
437         {
438                 /* Enterprise Storage Server / Shark family */
439                 .vendor        = "IBM",
440                 .product       = "^2105",
441                 .no_path_retry = NO_PATH_RETRY_QUEUE,
442                 .pgpolicy      = MULTIBUS,
443         },
444         {
445                 /* DS6000 */
446                 .vendor        = "IBM",
447                 .product       = "^1750500",
448                 .no_path_retry = NO_PATH_RETRY_QUEUE,
449                 .pgpolicy      = GROUP_BY_PRIO,
450                 .pgfailback    = -FAILBACK_IMMEDIATE,
451                 .prio_name     = PRIO_ALUA,
452         },
453         {
454                 /* DS8000 */
455                 .vendor        = "IBM",
456                 .product       = "^2107900",
457                 .no_path_retry = NO_PATH_RETRY_QUEUE,
458                 .pgpolicy      = MULTIBUS,
459         },
460         {
461                 /* Storwize family / SAN Volume Controller / Flex System V7000 / FlashSystem V840/V9000 */
462                 .vendor        = "IBM",
463                 .product       = "^2145",
464                 .no_path_retry = NO_PATH_RETRY_QUEUE,
465                 .pgpolicy      = GROUP_BY_PRIO,
466                 .pgfailback    = -FAILBACK_IMMEDIATE,
467                 .prio_name     = PRIO_ALUA,
468         },
469         {
470                 .vendor        = "IBM",
471                 .product       = "S/390 DASD ECKD",
472                 .bl_product    = "S/390",
473                 .uid_attribute = "ID_UID",
474                 .no_path_retry = NO_PATH_RETRY_QUEUE,
475                 .pgpolicy      = MULTIBUS,
476         },
477         {
478                 .vendor        = "IBM",
479                 .product       = "S/390 DASD FBA",
480                 .bl_product    = "S/390",
481                 .uid_attribute = "ID_UID",
482                 .no_path_retry = NO_PATH_RETRY_QUEUE,
483                 .pgpolicy      = MULTIBUS,
484         },
485         {
486                 /* Power RAID */
487                 .vendor        = "IBM",
488                 .product       = "^IPR",
489                 .no_path_retry = NO_PATH_RETRY_QUEUE,
490                 .hwhandler     = "1 alua",
491                 .pgpolicy      = GROUP_BY_PRIO,
492                 .pgfailback    = -FAILBACK_IMMEDIATE,
493                 .prio_name     = PRIO_ALUA,
494         },
495         {
496                 /* SAS RAID Controller Module (RSSM) */
497                 .vendor        = "IBM",
498                 .product       = "1820N00",
499                 .pgpolicy      = GROUP_BY_PRIO,
500                 .pgfailback    = -FAILBACK_IMMEDIATE,
501                 .no_path_retry = NO_PATH_RETRY_QUEUE,
502                 .prio_name     = PRIO_ALUA,
503         },
504         {
505                 /* XIV Storage System / FlashSystem A9000/A9000R */
506                 .vendor        = "IBM",
507                 .product       = "2810XIV",
508                 .no_path_retry = NO_PATH_RETRY_QUEUE,
509                 .pgpolicy      = MULTIBUS,
510         },
511                 /*
512                  * IBM Power Virtual SCSI Devices
513                  *
514                  * Maintainer : Brian King
515                  * Mail : brking@linux.vnet.ibm.com
516                  */
517         {
518                 .vendor        = "AIX",
519                 .product       = "VDASD",
520                 .pgpolicy      = MULTIBUS,
521                 .no_path_retry = (300 / DEFAULT_CHECKINT),
522         },
523         {
524                 /* 3303 NVDISK */
525                 .vendor        = "IBM",
526                 .product       = "3303[ ]+NVDISK",
527                 .no_path_retry = (300 / DEFAULT_CHECKINT),
528         },
529         {
530                 .vendor        = "AIX",
531                 .product       = "NVDISK",
532                 .hwhandler     = "1 alua",
533                 .pgpolicy      = GROUP_BY_PRIO,
534                 .pgfailback    = -FAILBACK_IMMEDIATE,
535                 .no_path_retry = (300 / DEFAULT_CHECKINT),
536                 .prio_name     = PRIO_ALUA,
537         },
538         /*
539          * NetApp
540          */
541         {
542                 /*
543                  * ONTAP family
544                  *
545                  * Maintainer : Martin George
546                  * Mail : marting@netapp.com
547                  */
548                 .vendor        = "NETAPP",
549                 .product       = "LUN",
550                 .features      = "2 pg_init_retries 50",
551                 .no_path_retry = NO_PATH_RETRY_QUEUE,
552                 .pgpolicy      = GROUP_BY_PRIO,
553                 .pgfailback    = -FAILBACK_IMMEDIATE,
554                 .flush_on_last_del = FLUSH_ENABLED,
555                 .dev_loss      = MAX_DEV_LOSS_TMO,
556                 .prio_name     = PRIO_ONTAP,
557         },
558         {
559                 /*
560                  * SANtricity(RDAC) family
561                  *
562                  * Maintainer : Sean Stewart
563                  * Mail : sean.stewart@netapp.com
564                  */
565                 .vendor        = "(NETAPP|LSI|ENGENIO)",
566                 .product       = "INF-01-00",
567                 .bl_product    = "Universal Xport",
568                 .pgpolicy      = GROUP_BY_PRIO,
569                 .checker_name  = RDAC,
570                 .features      = "2 pg_init_retries 50",
571                 .hwhandler     = "1 rdac",
572                 .prio_name     = PRIO_RDAC,
573                 .pgfailback    = -FAILBACK_IMMEDIATE,
574                 .no_path_retry = 30,
575         },
576         /*
577          * Nexenta
578          *
579          * Maintainer : Yacine Kheddache
580          * Mail : yacine@alyseo.com
581          */
582         {
583                 .vendor        = "NEXENTA",
584                 .product       = "COMSTAR",
585                 .pgpolicy      = GROUP_BY_SERIAL,
586                 .no_path_retry = 30,
587         },
588         /*
589          * SGI
590          */
591         {
592                 .vendor        = "SGI",
593                 .product       = "TP9100",
594                 .pgpolicy      = MULTIBUS,
595         },
596         {
597                 .vendor        = "SGI",
598                 .product       = "TP9[3457]00",
599                 .bl_product    = "Universal Xport",
600                 .pgpolicy      = GROUP_BY_PRIO,
601                 .checker_name  = RDAC,
602                 .features      = "2 pg_init_retries 50",
603                 .hwhandler     = "1 rdac",
604                 .prio_name     = PRIO_RDAC,
605                 .pgfailback    = -FAILBACK_IMMEDIATE,
606                 .no_path_retry = 30,
607         },
608         {
609                 /* InfiniteStorage ??? */
610                 .vendor        = "SGI",
611                 .product       = "IS",
612                 .bl_product    = "Universal Xport",
613                 .pgpolicy      = GROUP_BY_PRIO,
614                 .checker_name  = RDAC,
615                 .features      = "2 pg_init_retries 50",
616                 .hwhandler     = "1 rdac",
617                 .prio_name     = PRIO_RDAC,
618                 .pgfailback    = -FAILBACK_IMMEDIATE,
619                 .no_path_retry = 30,
620         },
621         /*
622          * NEC
623          */
624         {
625                 /* M-Series */
626                 .vendor        = "NEC",
627                 .product       = "DISK ARRAY",
628                 .hwhandler     = "1 alua",
629                 .pgpolicy      = GROUP_BY_PRIO,
630                 .pgfailback    = -FAILBACK_IMMEDIATE,
631                 .prio_name     = PRIO_ALUA,
632         },
633         /*
634          * Oracle
635          */
636                 /*
637                  * Pillar Data / Oracle FS
638                  *
639                  * Maintainer : Srinivasan Ramani
640                  * Mail : srinivas.ramani@oracle.com
641                  */
642         {
643                 .vendor        = "^Pillar",
644                 .product       = "^Axiom",
645                 .pgpolicy      = GROUP_BY_PRIO,
646                 .pgfailback    = -FAILBACK_IMMEDIATE,
647                 .prio_name     = PRIO_ALUA,
648         },
649         {
650                 .vendor        = "^Oracle",
651                 .product       = "^Oracle FS",
652                 .pgpolicy      = GROUP_BY_PRIO,
653                 .pgfailback    = -FAILBACK_IMMEDIATE,
654                 .prio_name     = PRIO_ALUA,
655         },
656                 /* Sun - StorageTek */
657         {
658                 .vendor        = "STK",
659                 .product       = "OPENstorage D280",
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                 .vendor        = "STK",
671                 .product       = "FLEXLINE 380",
672                 .bl_product    = "Universal Xport",
673                 .pgpolicy      = GROUP_BY_PRIO,
674                 .checker_name  = RDAC,
675                 .features      = "2 pg_init_retries 50",
676                 .hwhandler     = "1 rdac",
677                 .prio_name     = PRIO_RDAC,
678                 .pgfailback    = -FAILBACK_IMMEDIATE,
679                 .no_path_retry = 30,
680         },
681         {
682                 .vendor        = "SUN",
683                 .product       = "(StorEdge 3510|T4)",
684                 .pgpolicy      = MULTIBUS,
685         },
686         {
687                 .vendor        = "SUN",
688                 .product       = "STK6580_6780",
689                 .bl_product    = "Universal Xport",
690                 .pgpolicy      = GROUP_BY_PRIO,
691                 .checker_name  = RDAC,
692                 .features      = "2 pg_init_retries 50",
693                 .hwhandler     = "1 rdac",
694                 .prio_name     = PRIO_RDAC,
695                 .pgfailback    = -FAILBACK_IMMEDIATE,
696                 .no_path_retry = 30,
697         },
698         {
699                 /* 6130 / 6140 */
700                 .vendor        = "SUN",
701                 .product       = "CSM[12]00_R",
702                 .bl_product    = "Universal Xport",
703                 .pgpolicy      = GROUP_BY_PRIO,
704                 .checker_name  = RDAC,
705                 .features      = "2 pg_init_retries 50",
706                 .hwhandler     = "1 rdac",
707                 .prio_name     = PRIO_RDAC,
708                 .pgfailback    = -FAILBACK_IMMEDIATE,
709                 .no_path_retry = 30,
710         },
711         {
712                 /* 2500 / 2510 / 2530 / 2540 */
713                 .vendor        = "SUN",
714                 .product       = "LCSM100_[IEFS]",
715                 .bl_product    = "Universal Xport",
716                 .pgpolicy      = GROUP_BY_PRIO,
717                 .checker_name  = RDAC,
718                 .features      = "2 pg_init_retries 50",
719                 .hwhandler     = "1 rdac",
720                 .prio_name     = PRIO_RDAC,
721                 .pgfailback    = -FAILBACK_IMMEDIATE,
722                 .no_path_retry = 30,
723         },
724         {
725                 .vendor        = "SUN",
726                 .product       = "SUN_6180",
727                 .bl_product    = "Universal Xport",
728                 .pgpolicy      = GROUP_BY_PRIO,
729                 .checker_name  = RDAC,
730                 .features      = "2 pg_init_retries 50",
731                 .hwhandler     = "1 rdac",
732                 .prio_name     = PRIO_RDAC,
733                 .pgfailback    = -FAILBACK_IMMEDIATE,
734                 .no_path_retry = 30,
735         },
736         /*
737          * Pivot3
738          *
739          * Maintainer : Bart Brooks
740          * Mail : bartb@pivot3.com
741          */
742         {
743                 .vendor        = "PIVOT3",
744                 .product       = "RAIGE VOLUME",
745                 .no_path_retry = NO_PATH_RETRY_QUEUE,
746                 .pgpolicy      = MULTIBUS,
747         },
748         /*
749          * Intel
750          */
751         {
752                 .vendor        = "(Intel|INTEL)",
753                 .product       = "Multi-Flex",
754                 .hwhandler     = "1 alua",
755                 .pgpolicy      = GROUP_BY_PRIO,
756                 .pgfailback    = -FAILBACK_IMMEDIATE,
757                 .no_path_retry = NO_PATH_RETRY_QUEUE,
758                 .prio_name     = PRIO_ALUA,
759         },
760         /*
761          * Linux-IO Target
762          */
763         {
764                 .vendor        = "(LIO-ORG|SUSE)",
765                 .product       = "RBD",
766                 .hwhandler     = "1 alua",
767                 .pgpolicy      = GROUP_BY_PRIO,
768                 .pgfailback    = -FAILBACK_IMMEDIATE,
769                 .no_path_retry = 12,
770                 .prio_name     = PRIO_ALUA,
771         },
772         /*
773          * DataCore
774          */
775         {
776                 .vendor        = "DataCore",
777                 .product       = "SANmelody",
778                 .pgpolicy      = GROUP_BY_PRIO,
779                 .pgfailback    = -FAILBACK_IMMEDIATE,
780                 .no_path_retry = NO_PATH_RETRY_QUEUE,
781                 .prio_name     = PRIO_ALUA,
782         },
783         {
784                 .vendor        = "DataCore",
785                 .product       = "Virtual Disk",
786                 .pgpolicy      = GROUP_BY_PRIO,
787                 .pgfailback    = -FAILBACK_IMMEDIATE,
788                 .no_path_retry = NO_PATH_RETRY_QUEUE,
789                 .prio_name     = PRIO_ALUA,
790         },
791         /*
792          * Pure Storage
793          */
794         {
795                 .vendor        = "PURE",
796                 .product       = "FlashArray",
797                 .pgpolicy      = MULTIBUS,
798                 .fast_io_fail  = 10,
799                 .dev_loss      = 60,
800         },
801         /*
802          * Huawei
803          */
804         {
805                 /* OceanStor V3 */
806                 .vendor        = "(HUAWEI|HUASY)",
807                 .product       = "XSG1",
808                 .pgpolicy      = MULTIBUS,
809         },
810         /*
811          * Red Hat
812          *
813          * Maintainer: Mike Christie
814          * Mail: mchristi@redhat.com
815          */
816         {
817                 .vendor        = "Ceph",
818                 .product       = "RBD",
819                 .no_path_retry = NO_PATH_RETRY_FAIL,
820                 .checker_name  = RBD,
821                 .deferred_remove = DEFERRED_REMOVE_ON,
822         },
823         /*
824          * Kove
825          */
826         {
827                 .vendor        = "KOVE",
828                 .product       = "XPD",
829                 .pgpolicy      = MULTIBUS,
830         },
831 #if 0
832         /*
833          * Copy this TEMPLATE to add new hardware.
834          *
835          * Keep only mandatory and modified attributes.
836          * Attributes with default values must be removed.
837          * Only .vendor and .product are mandatory, all other are optional.
838          * .vendor, .product, .revision and .bl_product are POSIX Extended regex
839          *
840          * COMPANY_NAME
841          *
842          * Maintainer : XXX
843          * Mail : XXX
844          */
845         {
846                 /* If product-ID is different from marketing name add a comment */
847                 .vendor        = "VENDOR",
848                 .product       = "PRODUCT",
849                 .revision      = "REVISION",
850                 .bl_product    = "BL_PRODUCT",
851                 .pgpolicy      = FAILOVER,
852                 .uid_attribute = "ID_SERIAL",
853                 .selector      = "service-time 0",
854                 .checker_name  = TUR,
855                 .features      = "0",
856                 .hwhandler     = "0",
857                 .prio_name     = "const",
858                 .prio_args     = "",
859                 .pgfailback    = -FAILBACK_MANUAL,
860                 .rr_weight     = RR_WEIGHT_NONE,
861                 .no_path_retry = NO_PATH_RETRY_UNDEF,
862                 .minio         = 1000,
863                 .minio_rq      = 1,
864                 .flush_on_last_del = FLUSH_DISABLED,
865                 .fast_io_fail  = 5,
866                 .dev_loss      = 600,
867                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
868                 .detect_prio   = DETECT_PRIO_ON,
869                 .deferred_remove = DEFERRED_REMOVE_OFF,
870                 .delay_watch_checks = DELAY_CHECKS_OFF,
871                 .delay_wait_checks = DELAY_CHECKS_OFF,
872         },
873 #endif
874         /*
875          * EOL
876          */
877         {
878                 .vendor        = NULL,
879                 .product       = NULL,
880         },
881 };
882
883 extern int
884 setup_default_hwtable (vector hw)
885 {
886         int r = 0;
887         struct hwentry * hwe = default_hw;
888
889         while (hwe->vendor) {
890                 r += store_hwe(hw, hwe);
891                 hwe++;
892         }
893         return r;
894 }