multipath-tools: standardize all RDAC devices
[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                 /* DS3950 / DS4200 / DS4700 / DS5020 */
385                 .vendor        = "IBM",
386                 .product       = "^1814",
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                 /* DS4800 */
398                 .vendor        = "IBM",
399                 .product       = "^1815",
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                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
411                 .vendor        = "IBM",
412                 .product       = "^1818",
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                 /* Netfinity Fibre Channel RAID Controller Unit */
424                 .vendor        = "IBM",
425                 .product       = "^3526",
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                 /* DS4200 / FAStT200 */
437                 .vendor        = "IBM",
438                 .product       = "^3542",
439                 .pgpolicy      = GROUP_BY_SERIAL,
440                 .pgfailback    = FAILBACK_UNDEF,
441         },
442         {
443                 /* Enterprise Storage Server / Shark family */
444                 .vendor        = "IBM",
445                 .product       = "^2105",
446                 .features      = "1 queue_if_no_path",
447                 .pgpolicy      = GROUP_BY_SERIAL,
448                 .pgfailback    = FAILBACK_UNDEF,
449         },
450         {
451                 /* DS6000 */
452                 .vendor        = "IBM",
453                 .product       = "^1750500",
454                 .features      = "1 queue_if_no_path",
455                 .pgpolicy      = GROUP_BY_PRIO,
456                 .pgfailback    = -FAILBACK_IMMEDIATE,
457                 .prio_name     = PRIO_ALUA,
458         },
459         {
460                 /* DS8000 */
461                 .vendor        = "IBM",
462                 .product       = "^2107900",
463                 .features      = "1 queue_if_no_path",
464                 .pgpolicy      = MULTIBUS,
465                 .pgfailback    = FAILBACK_UNDEF,
466         },
467         {
468                 /* Storwize family / SAN Volume Controller / Flex System V7000 */
469                 .vendor        = "IBM",
470                 .product       = "^2145",
471                 .features      = "1 queue_if_no_path",
472                 .pgpolicy      = GROUP_BY_PRIO,
473                 .pgfailback    = -FAILBACK_IMMEDIATE,
474                 .prio_name     = PRIO_ALUA,
475         },
476         {
477                 .vendor        = "IBM",
478                 .product       = "S/390 DASD ECKD",
479                 .bl_product    = "S/390",
480                 .uid_attribute = "ID_UID",
481                 .features      = "1 queue_if_no_path",
482                 .pgpolicy      = MULTIBUS,
483                 .pgfailback    = FAILBACK_UNDEF,
484         },
485         {
486                 .vendor        = "IBM",
487                 .product       = "S/390 DASD FBA",
488                 .bl_product    = "S/390",
489                 .uid_attribute = "ID_UID",
490                 .features      = "1 queue_if_no_path",
491                 .pgpolicy      = MULTIBUS,
492                 .pgfailback    = FAILBACK_UNDEF,
493         },
494         {
495                 /* Power RAID */
496                 .vendor        = "IBM",
497                 .product       = "^IPR",
498                 .features      = "1 queue_if_no_path",
499                 .hwhandler     = "1 alua",
500                 .pgpolicy      = GROUP_BY_PRIO,
501                 .pgfailback    = -FAILBACK_IMMEDIATE,
502                 .prio_name     = PRIO_ALUA,
503         },
504         {
505                 /* SAS RAID Controller Module (RSSM) */
506                 .vendor        = "IBM",
507                 .product       = "1820N00",
508                 .pgpolicy      = GROUP_BY_PRIO,
509                 .pgfailback    = -FAILBACK_IMMEDIATE,
510                 .no_path_retry = NO_PATH_RETRY_QUEUE,
511                 .minio         = 100,
512                 .prio_name     = PRIO_ALUA,
513         },
514         {
515                 /* XIV Storage System */
516                 .vendor        = "IBM",
517                 .product       = "2810XIV",
518                 .features      = "1 queue_if_no_path",
519                 .pgpolicy      = MULTIBUS,
520                 .pgfailback    = 15,
521                 .minio         = 15,
522         },
523                 /*
524                  * IBM Power Virtual SCSI Devices
525                  *
526                  * Maintainer : Brian King
527                  * Mail : brking@linux.vnet.ibm.com
528                  */
529         {
530                 .vendor        = "AIX",
531                 .product       = "VDASD",
532                 .pgpolicy      = MULTIBUS,
533                 .pgfailback    = FAILBACK_UNDEF,
534                 .no_path_retry = (300 / DEFAULT_CHECKINT),
535         },
536         {
537                 /* 3303 NVDISK */
538                 .vendor        = "IBM",
539                 .product       = "3303[ ]+NVDISK",
540                 .pgfailback    = FAILBACK_UNDEF,
541                 .no_path_retry = (300 / DEFAULT_CHECKINT),
542         },
543         {
544                 .vendor        = "AIX",
545                 .product       = "NVDISK",
546                 .hwhandler     = "1 alua",
547                 .pgpolicy      = GROUP_BY_PRIO,
548                 .pgfailback    = -FAILBACK_IMMEDIATE,
549                 .no_path_retry = (300 / DEFAULT_CHECKINT),
550                 .prio_name     = PRIO_ALUA,
551         },
552         /*
553          * NetApp
554          */
555         {
556                 /*
557                  * ONTAP family
558                  *
559                  * Maintainer : Martin George
560                  * Mail : marting@netapp.com
561                  */
562                 .vendor        = "NETAPP",
563                 .product       = "LUN",
564                 .features      = "3 queue_if_no_path pg_init_retries 50",
565                 .pgpolicy      = GROUP_BY_PRIO,
566                 .pgfailback    = -FAILBACK_IMMEDIATE,
567                 .flush_on_last_del = FLUSH_ENABLED,
568                 .minio         = 128,
569                 .dev_loss      = MAX_DEV_LOSS_TMO,
570                 .prio_name     = PRIO_ONTAP,
571         },
572         {
573                 /*
574                  * SANtricity(RDAC) family
575                  *
576                  * Maintainer : Sean Stewart
577                  * Mail : sean.stewart@netapp.com
578                  */
579                 .vendor        = "(NETAPP|LSI|ENGENIO)",
580                 .product       = "INF-01-00",
581                 .bl_product    = "Universal Xport",
582                 .pgpolicy      = GROUP_BY_PRIO,
583                 .checker_name  = RDAC,
584                 .features      = "2 pg_init_retries 50",
585                 .hwhandler     = "1 rdac",
586                 .prio_name     = PRIO_RDAC,
587                 .pgfailback    = -FAILBACK_IMMEDIATE,
588                 .no_path_retry = 30,
589         },
590         /*
591          * Nexenta
592          *
593          * Maintainer : Yacine Kheddache
594          * Mail : yacine@alyseo.com
595          */
596         {
597                 .vendor        = "NEXENTA",
598                 .product       = "COMSTAR",
599                 .features      = "1 queue_if_no_path",
600                 .pgpolicy      = GROUP_BY_SERIAL,
601                 .pgfailback    = FAILBACK_UNDEF,
602                 .no_path_retry = 30,
603                 .minio         = 128,
604         },
605         /*
606          * SGI
607          */
608         {
609                 .vendor        = "SGI",
610                 .product       = "TP9100",
611                 .pgpolicy      = MULTIBUS,
612                 .pgfailback    = FAILBACK_UNDEF,
613         },
614         {
615                 .vendor        = "SGI",
616                 .product       = "TP9[345]00",
617                 .bl_product    = "Universal Xport",
618                 .pgpolicy      = GROUP_BY_PRIO,
619                 .checker_name  = RDAC,
620                 .features      = "2 pg_init_retries 50",
621                 .hwhandler     = "1 rdac",
622                 .prio_name     = PRIO_RDAC,
623                 .pgfailback    = -FAILBACK_IMMEDIATE,
624                 .no_path_retry = 30,
625         },
626         {
627                 /* InfiniteStorage ??? */
628                 .vendor        = "SGI",
629                 .product       = "IS",
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          * NEC
641          */
642         {
643                 /* M-Series */
644                 .vendor        = "NEC",
645                 .product       = "DISK ARRAY",
646                 .hwhandler     = "1 alua",
647                 .pgpolicy      = GROUP_BY_PRIO,
648                 .pgfailback    = -FAILBACK_IMMEDIATE,
649                 .prio_name     = PRIO_ALUA,
650         },
651         /*
652          * Oracle
653          */
654                 /*
655                  * Pillar Data / Oracle FS
656                  *
657                  * Maintainer : Srinivasan Ramani
658                  * Mail : srinivas.ramani@oracle.com
659                  */
660         {
661                 .vendor        = "^Pillar",
662                 .product       = "^Axiom",
663                 .pgpolicy      = GROUP_BY_PRIO,
664                 .pgfailback    = -FAILBACK_IMMEDIATE,
665                 .prio_name     = PRIO_ALUA,
666         },
667         {
668                 .vendor        = "^Oracle",
669                 .product       = "^Oracle FS",
670                 .pgpolicy      = GROUP_BY_PRIO,
671                 .pgfailback    = -FAILBACK_IMMEDIATE,
672                 .prio_name     = PRIO_ALUA,
673         },
674                 /* Sun - StorageTek */
675         {
676                 .vendor        = "STK",
677                 .product       = "OPENstorage D280",
678                 .bl_product    = "Universal Xport",
679                 .pgpolicy      = GROUP_BY_PRIO,
680                 .checker_name  = RDAC,
681                 .features      = "2 pg_init_retries 50",
682                 .hwhandler     = "1 rdac",
683                 .prio_name     = PRIO_RDAC,
684                 .pgfailback    = -FAILBACK_IMMEDIATE,
685                 .no_path_retry = 30,
686         },
687         {
688                 .vendor        = "STK",
689                 .product       = "FLEXLINE 380",
690                 .bl_product    = "Universal Xport",
691                 .pgpolicy      = GROUP_BY_PRIO,
692                 .checker_name  = RDAC,
693                 .features      = "2 pg_init_retries 50",
694                 .hwhandler     = "1 rdac",
695                 .prio_name     = PRIO_RDAC,
696                 .pgfailback    = -FAILBACK_IMMEDIATE,
697                 .no_path_retry = 30,
698         },
699         {
700                 .vendor        = "SUN",
701                 .product       = "(StorEdge 3510|T4)",
702                 .pgpolicy      = MULTIBUS,
703                 .pgfailback    = FAILBACK_UNDEF,
704         },
705         {
706                 .vendor        = "SUN",
707                 .product       = "STK6580_6780",
708                 .bl_product    = "Universal Xport",
709                 .pgpolicy      = GROUP_BY_PRIO,
710                 .checker_name  = RDAC,
711                 .features      = "2 pg_init_retries 50",
712                 .hwhandler     = "1 rdac",
713                 .prio_name     = PRIO_RDAC,
714                 .pgfailback    = -FAILBACK_IMMEDIATE,
715                 .no_path_retry = 30,
716         },
717         {
718                 /* 6140 */
719                 .vendor        = "SUN",
720                 .product       = "CSM200_R",
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                 /* 2510 / 2530 / 2540 */
732                 .vendor        = "SUN",
733                 .product       = "LCSM100_[IEFS]",
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                 .vendor        = "SUN",
745                 .product       = "SUN_6180",
746                 .bl_product    = "Universal Xport",
747                 .pgpolicy      = GROUP_BY_PRIO,
748                 .checker_name  = RDAC,
749                 .features      = "2 pg_init_retries 50",
750                 .hwhandler     = "1 rdac",
751                 .prio_name     = PRIO_RDAC,
752                 .pgfailback    = -FAILBACK_IMMEDIATE,
753                 .no_path_retry = 30,
754         },
755         /*
756          * Pivot3
757          *
758          * Maintainer : Bart Brooks
759          * Mail : bartb@pivot3.com
760          */
761         {
762                 .vendor        = "PIVOT3",
763                 .product       = "RAIGE VOLUME",
764                 .features      = "1 queue_if_no_path",
765                 .pgpolicy      = MULTIBUS,
766                 .pgfailback    = FAILBACK_UNDEF,
767                 .minio         = 100,
768         },
769         /*
770          * Intel
771          */
772         {
773                 .vendor        = "(Intel|INTEL)",
774                 .product       = "Multi-Flex",
775                 .hwhandler     = "1 alua",
776                 .pgpolicy      = GROUP_BY_PRIO,
777                 .pgfailback    = -FAILBACK_IMMEDIATE,
778                 .no_path_retry = NO_PATH_RETRY_QUEUE,
779                 .prio_name     = PRIO_ALUA,
780         },
781         /*
782          * Linux-IO Target
783          */
784         {
785                 .vendor        = "(LIO-ORG|SUSE)",
786                 .product       = "RBD",
787                 .hwhandler     = "1 alua",
788                 .pgpolicy      = GROUP_BY_PRIO,
789                 .pgfailback    = -FAILBACK_IMMEDIATE,
790                 .no_path_retry = 12,
791                 .minio         = 100,
792                 .prio_name     = PRIO_ALUA,
793         },
794         /*
795          * DataCore
796          */
797         {
798                 .vendor        = "DataCore",
799                 .product       = "SANmelody",
800                 .pgpolicy      = GROUP_BY_PRIO,
801                 .pgfailback    = -FAILBACK_IMMEDIATE,
802                 .no_path_retry = NO_PATH_RETRY_QUEUE,
803                 .prio_name     = PRIO_ALUA,
804         },
805         {
806                 .vendor        = "DataCore",
807                 .product       = "Virtual Disk",
808                 .pgpolicy      = GROUP_BY_PRIO,
809                 .pgfailback    = -FAILBACK_IMMEDIATE,
810                 .no_path_retry = NO_PATH_RETRY_QUEUE,
811                 .prio_name     = PRIO_ALUA,
812         },
813         /*
814          * Pure Storage
815          */
816         {
817                 .vendor        = "PURE",
818                 .product       = "FlashArray",
819                 .selector      = "queue-length 0",
820                 .pgpolicy      = MULTIBUS,
821                 .pgfailback    = FAILBACK_UNDEF,
822                 .fast_io_fail  = 10,
823                 .dev_loss      = 60,
824         },
825         /*
826          * Huawei
827          */
828         {
829                 /* OceanStor V3 */
830                 .vendor        = "(HUAWEI|HUASY)",
831                 .product       = "XSG1",
832                 .pgpolicy      = MULTIBUS,
833                 .pgfailback    = FAILBACK_UNDEF,
834         },
835         /*
836          * Red Hat
837          *
838          * Maintainer: Mike Christie
839          * Mail: mchristi@redhat.com
840          */
841         {
842                 .vendor        = "Ceph",
843                 .product       = "RBD",
844                 .no_path_retry = NO_PATH_RETRY_FAIL,
845                 .checker_name  = RBD,
846                 .deferred_remove = DEFERRED_REMOVE_ON,
847         },
848 #if 0
849         /*
850          * Copy this TEMPLATE to add new hardware.
851          *
852          * Keep only mandatory and modified attributes.
853          * Attributes with default values must be removed.
854          * .vendor and .product are mandatory, all other are optional.
855          * POSIX Extended regex can be used in .vendor, .product, .revision and .bl_product
856          *
857          * COMPANY_NAME
858          *
859          * Maintainer : XXX
860          * Mail : XXX
861          */
862         {
863                 /* If product-ID is different from marketing name add a comment */
864                 .vendor        = "VENDOR",
865                 .product       = "PRODUCT",
866                 .revision      = "REVISION",
867                 .bl_product    = "BL_PRODUCT",
868                 .pgpolicy      = FAILOVER,
869                 .uid_attribute = "ID_SERIAL",
870                 .selector      = "service-time 0",
871                 .checker_name  = TUR,
872                 .features      = "0",
873                 .hwhandler     = "0",
874                 .prio_name     = "const",
875                 .prio_args     = "",
876                 .pgfailback    = -FAILBACK_MANUAL,
877                 .rr_weight     = RR_WEIGHT_NONE,
878                 .no_path_retry = NO_PATH_RETRY_UNDEF,
879                 .minio         = 1000,
880                 .minio_rq      = 1,
881                 .flush_on_last_del = FLUSH_DISABLED,
882                 .fast_io_fail  = 5,
883                 .dev_loss      = 600,
884                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
885                 .detect_prio   = DETECT_PRIO_ON,
886                 .deferred_remove = DEFERRED_REMOVE_OFF,
887                 .delay_watch_checks = DELAY_CHECKS_OFF,
888                 .delay_wait_checks = DELAY_CHECKS_OFF,
889         },
890 #endif
891         /*
892          * EOL
893          */
894         {
895                 .vendor        = NULL,
896                 .product       = NULL,
897         },
898 };
899
900 extern int
901 setup_default_hwtable (vector hw)
902 {
903         int r = 0;
904         struct hwentry * hwe = default_hw;
905
906         while (hwe->vendor) {
907                 r += store_hwe(hw, hwe);
908                 hwe++;
909         }
910         return r;
911 }