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