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