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