Imported Upstream version 0.7.0
[platform/upstream/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                 .pgpolicy      = MULTIBUS,
548         },
549         {
550                 /* DDN */
551                 .vendor        = "IBM",
552                 .product       = "^(DCS9900|2851)",
553                 .pgpolicy      = GROUP_BY_PRIO,
554                 .pgfailback    = -FAILBACK_IMMEDIATE,
555                 .prio_name     = PRIO_ALUA,
556                 .no_path_retry = 30,
557         },
558                 /*
559                  * IBM Power Virtual SCSI Devices
560                  *
561                  * Maintainer : Brian King
562                  * Mail : brking@linux.vnet.ibm.com
563                  */
564         {
565                 .vendor        = "AIX",
566                 .product       = "VDASD",
567                 .pgpolicy      = MULTIBUS,
568                 .no_path_retry = (300 / DEFAULT_CHECKINT),
569         },
570         {
571                 /* 3303 NVDISK */
572                 .vendor        = "IBM",
573                 .product       = "3303[ ]+NVDISK",
574                 .no_path_retry = (300 / DEFAULT_CHECKINT),
575         },
576         {
577                 .vendor        = "AIX",
578                 .product       = "NVDISK",
579                 .hwhandler     = "1 alua",
580                 .pgpolicy      = GROUP_BY_PRIO,
581                 .pgfailback    = -FAILBACK_IMMEDIATE,
582                 .no_path_retry = (300 / DEFAULT_CHECKINT),
583                 .prio_name     = PRIO_ALUA,
584         },
585         /*
586          * NetApp
587          */
588         {
589                 /*
590                  * ONTAP family
591                  *
592                  * Maintainer : Martin George
593                  * Mail : marting@netapp.com
594                  */
595                 .vendor        = "NETAPP",
596                 .product       = "LUN",
597                 .features      = "2 pg_init_retries 50",
598                 .no_path_retry = NO_PATH_RETRY_QUEUE,
599                 .pgpolicy      = GROUP_BY_PRIO,
600                 .pgfailback    = -FAILBACK_IMMEDIATE,
601                 .flush_on_last_del = FLUSH_ENABLED,
602                 .dev_loss      = MAX_DEV_LOSS_TMO,
603                 .prio_name     = PRIO_ONTAP,
604         },
605         {
606                 /*
607                  * SANtricity(RDAC) family
608                  *
609                  * Maintainer : Sean Stewart
610                  * Mail : sean.stewart@netapp.com
611                  */
612                 .vendor        = "(NETAPP|LSI|ENGENIO)",
613                 .product       = "INF-01-00",
614                 .bl_product    = "Universal Xport",
615                 .pgpolicy      = GROUP_BY_PRIO,
616                 .checker_name  = RDAC,
617                 .features      = "2 pg_init_retries 50",
618                 .hwhandler     = "1 rdac",
619                 .prio_name     = PRIO_RDAC,
620                 .pgfailback    = -FAILBACK_IMMEDIATE,
621                 .no_path_retry = 30,
622         },
623         {
624                 /*
625                  * SolidFir family
626                  *
627                  * Maintainer : PJ Waskiewicz
628                  * Mail : pj.waskiewicz@netapp.com
629                  */
630                 .vendor        = "SolidFir",
631                 .product       = "SSD SAN",
632                 .pgpolicy      = MULTIBUS,
633                 .no_path_retry = 24,
634         },
635         /*
636          * Nexenta
637          *
638          * Maintainer : Yacine Kheddache
639          * Mail : yacine@alyseo.com
640          */
641         {
642                 .vendor        = "NEXENTA",
643                 .product       = "COMSTAR",
644                 .pgpolicy      = GROUP_BY_SERIAL,
645                 .no_path_retry = 30,
646         },
647         /*
648          * SGI
649          */
650         {
651                 .vendor        = "SGI",
652                 .product       = "TP9100",
653                 .pgpolicy      = MULTIBUS,
654         },
655         {
656                 /* Total Performance family */
657                 .vendor        = "SGI",
658                 .product       = "TP9[3457]00",
659                 .bl_product    = "Universal Xport",
660                 .pgpolicy      = GROUP_BY_PRIO,
661                 .checker_name  = RDAC,
662                 .features      = "2 pg_init_retries 50",
663                 .hwhandler     = "1 rdac",
664                 .prio_name     = PRIO_RDAC,
665                 .pgfailback    = -FAILBACK_IMMEDIATE,
666                 .no_path_retry = 30,
667         },
668         {
669                 /* InfiniteStorage family */
670                 .vendor        = "SGI",
671                 .product       = "IS",
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                 /* DDN */
683                 .vendor        = "SGI",
684                 .product       = "^DD[46]A-",
685                 .pgpolicy      = GROUP_BY_PRIO,
686                 .pgfailback    = -FAILBACK_IMMEDIATE,
687                 .prio_name     = PRIO_ALUA,
688                 .no_path_retry = 30,
689         },
690         /*
691          * NEC
692          */
693         {
694                 /* M-Series */
695                 .vendor        = "NEC",
696                 .product       = "DISK ARRAY",
697                 .hwhandler     = "1 alua",
698                 .pgpolicy      = GROUP_BY_PRIO,
699                 .pgfailback    = -FAILBACK_IMMEDIATE,
700                 .prio_name     = PRIO_ALUA,
701         },
702         /*
703          * Oracle
704          */
705                 /*
706                  * Pillar Data / Oracle FS
707                  *
708                  * Maintainer : Srinivasan Ramani
709                  * Mail : srinivas.ramani@oracle.com
710                  */
711         {
712                 .vendor        = "^Pillar",
713                 .product       = "^Axiom",
714                 .pgpolicy      = GROUP_BY_PRIO,
715                 .pgfailback    = -FAILBACK_IMMEDIATE,
716                 .prio_name     = PRIO_ALUA,
717         },
718         {
719                 .vendor        = "^Oracle",
720                 .product       = "^Oracle FS",
721                 .pgpolicy      = GROUP_BY_PRIO,
722                 .pgfailback    = -FAILBACK_IMMEDIATE,
723                 .prio_name     = PRIO_ALUA,
724         },
725                 /* Sun - StorageTek */
726         {
727                 /* B210, B220, B240 and B280 */
728                 .vendor        = "STK",
729                 .product       = "BladeCtlr",
730                 .bl_product    = "Universal Xport",
731                 .pgpolicy      = GROUP_BY_PRIO,
732                 .checker_name  = RDAC,
733                 .features      = "2 pg_init_retries 50",
734                 .hwhandler     = "1 rdac",
735                 .prio_name     = PRIO_RDAC,
736                 .pgfailback    = -FAILBACK_IMMEDIATE,
737                 .no_path_retry = 30,
738         },
739         {
740                 /* 9176, D173, D178, D210, D220, D240 and D280 */
741                 .vendor        = "STK",
742                 .product       = "OPENstorage",
743                 .bl_product    = "Universal Xport",
744                 .pgpolicy      = GROUP_BY_PRIO,
745                 .checker_name  = RDAC,
746                 .features      = "2 pg_init_retries 50",
747                 .hwhandler     = "1 rdac",
748                 .prio_name     = PRIO_RDAC,
749                 .pgfailback    = -FAILBACK_IMMEDIATE,
750                 .no_path_retry = 30,
751         },
752         {
753                 /* 6540 */
754                 .vendor        = "STK",
755                 .product       = "FLEXLINE 380",
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                 /* 3510 / 6020 and 6120 */
767                 .vendor        = "SUN",
768                 .product       = "(StorEdge 3510|T4)",
769                 .pgpolicy      = MULTIBUS,
770         },
771         {
772                 .vendor        = "SUN",
773                 .product       = "STK6580_6780",
774                 .bl_product    = "Universal Xport",
775                 .pgpolicy      = GROUP_BY_PRIO,
776                 .checker_name  = RDAC,
777                 .features      = "2 pg_init_retries 50",
778                 .hwhandler     = "1 rdac",
779                 .prio_name     = PRIO_RDAC,
780                 .pgfailback    = -FAILBACK_IMMEDIATE,
781                 .no_path_retry = 30,
782         },
783         {
784                 /* 6130 / 6140 */
785                 .vendor        = "SUN",
786                 .product       = "CSM[12]00_R",
787                 .bl_product    = "Universal Xport",
788                 .pgpolicy      = GROUP_BY_PRIO,
789                 .checker_name  = RDAC,
790                 .features      = "2 pg_init_retries 50",
791                 .hwhandler     = "1 rdac",
792                 .prio_name     = PRIO_RDAC,
793                 .pgfailback    = -FAILBACK_IMMEDIATE,
794                 .no_path_retry = 30,
795         },
796         {
797                 /* 2500 / 2510 / 2530 / 2540 */
798                 .vendor        = "SUN",
799                 .product       = "LCSM100_[IEFS]",
800                 .bl_product    = "Universal Xport",
801                 .pgpolicy      = GROUP_BY_PRIO,
802                 .checker_name  = RDAC,
803                 .features      = "2 pg_init_retries 50",
804                 .hwhandler     = "1 rdac",
805                 .prio_name     = PRIO_RDAC,
806                 .pgfailback    = -FAILBACK_IMMEDIATE,
807                 .no_path_retry = 30,
808         },
809         {
810                 .vendor        = "SUN",
811                 .product       = "SUN_6180",
812                 .bl_product    = "Universal Xport",
813                 .pgpolicy      = GROUP_BY_PRIO,
814                 .checker_name  = RDAC,
815                 .features      = "2 pg_init_retries 50",
816                 .hwhandler     = "1 rdac",
817                 .prio_name     = PRIO_RDAC,
818                 .pgfailback    = -FAILBACK_IMMEDIATE,
819                 .no_path_retry = 30,
820         },
821         {
822                 /* ZFS Storage Appliances */
823                 .vendor        = "SUN",
824                 .product       = "(Sun Storage|ZFS Storage|COMSTAR)",
825                 .pgpolicy      = GROUP_BY_PRIO,
826                 .pgfailback    = -FAILBACK_IMMEDIATE,
827                 .prio_name     = PRIO_ALUA,
828                 .no_path_retry = 30,
829         },
830         /*
831          * Pivot3
832          *
833          * Maintainer : Bart Brooks
834          * Mail : bartb@pivot3.com
835          */
836         {
837                 .vendor        = "PIVOT3",
838                 .product       = "RAIGE VOLUME",
839                 .no_path_retry = NO_PATH_RETRY_QUEUE,
840                 .pgpolicy      = MULTIBUS,
841         },
842         {
843                 .vendor        = "(NexGen|Pivot3)",
844                 .product       = "(TierStore|vSTAC)",
845                 .pgpolicy      = GROUP_BY_PRIO,
846                 .pgfailback    = -FAILBACK_IMMEDIATE,
847                 .prio_name     = PRIO_ALUA,
848                 .no_path_retry = NO_PATH_RETRY_QUEUE,
849         },
850         /*
851          * Intel
852          */
853         {
854                 .vendor        = "(Intel|INTEL)",
855                 .product       = "Multi-Flex",
856                 .bl_product    = "VTrak V-LUN",
857                 .hwhandler     = "1 alua",
858                 .pgpolicy      = GROUP_BY_PRIO,
859                 .pgfailback    = -FAILBACK_IMMEDIATE,
860                 .no_path_retry = NO_PATH_RETRY_QUEUE,
861                 .prio_name     = PRIO_ALUA,
862         },
863         /*
864          * Linux-IO Target
865          */
866         {
867                 .vendor        = "(LIO-ORG|SUSE)",
868                 .product       = "RBD",
869                 .hwhandler     = "1 alua",
870                 .pgpolicy      = GROUP_BY_PRIO,
871                 .pgfailback    = -FAILBACK_IMMEDIATE,
872                 .no_path_retry = 12,
873                 .prio_name     = PRIO_ALUA,
874         },
875         /*
876          * DataCore
877          */
878         {
879                 .vendor        = "DataCore",
880                 .product       = "SANmelody",
881                 .pgpolicy      = GROUP_BY_PRIO,
882                 .pgfailback    = -FAILBACK_IMMEDIATE,
883                 .no_path_retry = NO_PATH_RETRY_QUEUE,
884                 .prio_name     = PRIO_ALUA,
885         },
886         {
887                 /* SANsymphony */
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                 .checker_name  = RBD,
922                 .deferred_remove = DEFERRED_REMOVE_ON,
923         },
924         /*
925          * Kove
926          */
927         {
928                 .vendor        = "KOVE",
929                 .product       = "XPD",
930                 .pgpolicy      = MULTIBUS,
931         },
932         /*
933          * Infinidat
934          */
935         {
936                 .vendor        = "NFINIDAT",
937                 .product       = "InfiniBox",
938                 .pgpolicy      = GROUP_BY_PRIO,
939                 .pgfailback    = -FAILBACK_IMMEDIATE,
940                 .prio_name     = PRIO_ALUA,
941         },
942         /*
943          * Nimble Storage
944          */
945         {
946                 .vendor        = "Nimble",
947                 .product       = "Server",
948                 .hwhandler     = "1 alua",
949                 .pgpolicy      = GROUP_BY_PRIO,
950                 .pgfailback    = -FAILBACK_IMMEDIATE,
951                 .prio_name     = PRIO_ALUA,
952                 .no_path_retry = NO_PATH_RETRY_QUEUE,
953         },
954         /*
955          * Kaminario
956          */
957         {
958                 .vendor        = "KMNRIO",
959                 .product       = "K2",
960                 .pgpolicy      = MULTIBUS,
961         },
962         /*
963          * Tegile Systems
964          */
965         {
966                 .vendor        = "TEGILE",
967                 .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
968                 .hwhandler     = "1 alua",
969                 .pgpolicy      = GROUP_BY_PRIO,
970                 .pgfailback    = -FAILBACK_IMMEDIATE,
971                 .prio_name     = PRIO_ALUA,
972                 .no_path_retry = 10,
973         },
974         /*
975          * Imation/Nexsan
976          */
977         {
978                 /* E-Series */
979                 .vendor        = "NEXSAN",
980                 .product       = "NXS-B0",
981                 .pgpolicy      = GROUP_BY_PRIO,
982                 .pgfailback    = -FAILBACK_IMMEDIATE,
983                 .prio_name     = PRIO_ALUA,
984                 .no_path_retry = 15,
985         },
986         {
987                 /* SATABeast / SATABoy */
988                 .vendor        = "NEXSAN",
989                 .product       = "SATAB",
990                 .pgpolicy      = GROUP_BY_PRIO,
991                 .pgfailback    = -FAILBACK_IMMEDIATE,
992                 .prio_name     = PRIO_ALUA,
993                 .no_path_retry = 15,
994         },
995         {
996                 /* NST / UNITY */
997                 .vendor        = "Nexsan",
998                 .product       = "(NestOS|NST5000)",
999                 .hwhandler     = "1 alua",
1000                 .pgpolicy      = GROUP_BY_PRIO,
1001                 .pgfailback    = -FAILBACK_IMMEDIATE,
1002                 .prio_name     = PRIO_ALUA,
1003                 .no_path_retry = 30,
1004         },
1005         /*
1006          * Xiotech
1007          */
1008         {
1009                 /* Intelligent Storage Elements family */
1010                 .vendor        = "(XIOTECH|XIOtech)",
1011                 .product       = "ISE",
1012                 .pgpolicy      = MULTIBUS,
1013                 .no_path_retry = 12,
1014         },
1015         /*
1016          * Violin Memory
1017          */
1018         {
1019                 /* 3000 / 6000 Series */
1020                 .vendor        = "VIOLIN",
1021                 .product       = "SAN ARRAY$",
1022                 .pgpolicy      = GROUP_BY_SERIAL,
1023                 .no_path_retry = 30,
1024         },
1025         {
1026                 .vendor        = "VIOLIN",
1027                 .product       = "SAN ARRAY ALUA",
1028                 .hwhandler     = "1 alua",
1029                 .pgpolicy      = GROUP_BY_PRIO,
1030                 .pgfailback    = -FAILBACK_IMMEDIATE,
1031                 .prio_name     = PRIO_ALUA,
1032                 .no_path_retry = 30,
1033         },
1034         {
1035                 /* FSP 7000 family */
1036                 .vendor        = "VIOLIN",
1037                 .product       = "CONCERTO ARRAY",
1038                 .pgpolicy      = MULTIBUS,
1039                 .no_path_retry = 30,
1040         },
1041         /*
1042          * Promise Technology
1043          */
1044         {
1045                 .vendor        = "Promise",
1046                 .product       = "VTrak",
1047                 .bl_product    = "VTrak V-LUN",
1048                 .hwhandler     = "1 alua",
1049                 .pgpolicy      = GROUP_BY_PRIO,
1050                 .pgfailback    = -FAILBACK_IMMEDIATE,
1051                 .prio_name     = PRIO_ALUA,
1052                 .no_path_retry = 30,
1053         },
1054         {
1055                 .vendor        = "Promise",
1056                 .product       = "Vess",
1057                 .bl_product    = "Vess V-LUN",
1058                 .hwhandler     = "1 alua",
1059                 .pgpolicy      = GROUP_BY_PRIO,
1060                 .pgfailback    = -FAILBACK_IMMEDIATE,
1061                 .prio_name     = PRIO_ALUA,
1062                 .no_path_retry = 30,
1063         },
1064         /*
1065          * Infortrend Technology
1066          */
1067         {
1068                 /* EonStor / ESVA */
1069                 .vendor        = "^IFT",
1070                 .product       = ".*",
1071                 .pgpolicy      = GROUP_BY_PRIO,
1072                 .pgfailback    = -FAILBACK_IMMEDIATE,
1073                 .prio_name     = PRIO_ALUA,
1074                 .no_path_retry = 30,
1075         },
1076         /*
1077          * Generic NVMe devices
1078          */
1079         {
1080                 .vendor        = "NVME",
1081                 .product       = ".*",
1082                 .uid_attribute = "ID_WWN",
1083                 .checker_name  = DIRECTIO,
1084                 .retain_hwhandler = RETAIN_HWHANDLER_OFF,
1085         },
1086 #if 0
1087         /*
1088          * Copy this TEMPLATE to add new hardware.
1089          *
1090          * Keep only mandatory(.vendor and .product) and modified attributes.
1091          * Attributes with default values must be removed.
1092          * .vendor, .product, .revision and .bl_product are POSIX Extended regex.
1093          *
1094          * COMPANY_NAME
1095          *
1096          * Maintainer : XXX
1097          * Mail : XXX
1098          */
1099         {
1100                 /* If product-ID is different from marketing name add a comment */
1101                 .vendor        = "VENDOR",
1102                 .product       = "PRODUCT",
1103                 .revision      = "REVISION",
1104                 .bl_product    = "BL_PRODUCT",
1105                 .pgpolicy      = FAILOVER,
1106                 .uid_attribute = "ID_SERIAL",
1107                 .selector      = "service-time 0",
1108                 .checker_name  = TUR,
1109                 .alias_prefix  = "mpath",
1110                 .features      = "0",
1111                 .hwhandler     = "0",
1112                 .prio_name     = PRIO_CONST,
1113                 .prio_args     = "",
1114                 .pgfailback    = -FAILBACK_MANUAL,
1115                 .rr_weight     = RR_WEIGHT_NONE,
1116                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1117                 .minio         = 1000,
1118                 .minio_rq      = 1,
1119                 .flush_on_last_del = FLUSH_DISABLED,
1120                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
1121                 .fast_io_fail  = 5,
1122                 .dev_loss      = 600,
1123                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
1124                 .detect_prio   = DETECT_PRIO_ON,
1125                 .detect_checker = DETECT_CHECKER_ON,
1126                 .deferred_remove = DEFERRED_REMOVE_OFF,
1127                 .delay_watch_checks = DELAY_CHECKS_OFF,
1128                 .delay_wait_checks = DELAY_CHECKS_OFF,
1129                 .skip_kpartx = SKIP_KPARTX_OFF,
1130                 .max_sectors_kb = MAX_SECTORS_KB_UNDEF,
1131         },
1132 #endif
1133         /*
1134          * EOL
1135          */
1136         {
1137                 .vendor        = NULL,
1138                 .product       = NULL,
1139         },
1140 };
1141
1142 int setup_default_hwtable(vector hw)
1143 {
1144         int r = 0;
1145         struct hwentry * hwe = default_hw;
1146
1147         while (hwe->vendor) {
1148                 r += store_hwe(hw, hwe);
1149                 hwe++;
1150         }
1151         return r;
1152 }