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