eda30f632a12f6862c2a7d34efb7906f85ccbf5c
[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                 .features      = "2 pg_init_retries 50",
228                 .hwhandler     = "1 rdac",
229                 .pgpolicy      = GROUP_BY_PRIO,
230                 .pgfailback    = -FAILBACK_IMMEDIATE,
231                 .no_path_retry = 15,
232                 .checker_name  = RDAC,
233                 .prio_name     = PRIO_RDAC,
234         },
235         {
236                 .vendor        = "DELL",
237                 .product       = "(MD32xx|MD36xx)",
238                 .bl_product    = "Universal Xport",
239                 .features      = "2 pg_init_retries 50",
240                 .hwhandler     = "1 rdac",
241                 .pgpolicy      = GROUP_BY_PRIO,
242                 .pgfailback    = -FAILBACK_IMMEDIATE,
243                 .no_path_retry = 15,
244                 .checker_name  = RDAC,
245                 .prio_name     = PRIO_RDAC,
246         },
247         {
248                 .vendor        = "DELL",
249                 .product       = "(MD34xx|MD38xx)",
250                 .bl_product    = "Universal Xport",
251                 .features      = "2 pg_init_retries 50",
252                 .hwhandler     = "1 rdac",
253                 .pgpolicy      = GROUP_BY_PRIO,
254                 .pgfailback    = -FAILBACK_IMMEDIATE,
255                 .no_path_retry = 15,
256                 .checker_name  = RDAC,
257                 .prio_name     = PRIO_RDAC,
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                 .features      = "1 queue_if_no_path",
324                 .hwhandler     = "1 rdac",
325                 .pgpolicy      = GROUP_BY_PRIO,
326                 .pgfailback    = -FAILBACK_IMMEDIATE,
327                 .no_path_retry = 300,
328                 .checker_name  = RDAC,
329                 .prio_name     = PRIO_RDAC,
330         },
331         {
332                 /* DS4100 / FAStT100 */
333                 .vendor        = "IBM",
334                 .product       = "^1724",
335                 .bl_product    = "Universal Xport",
336                 .features      = "1 queue_if_no_path",
337                 .hwhandler     = "1 rdac",
338                 .pgpolicy      = GROUP_BY_PRIO,
339                 .pgfailback    = -FAILBACK_IMMEDIATE,
340                 .no_path_retry = 300,
341                 .checker_name  = RDAC,
342                 .prio_name     = PRIO_RDAC,
343         },
344         {
345                 /* DS3200 / DS3300 / DS3400 / Boot DS */
346                 .vendor        = "IBM",
347                 .product       = "^1726",
348                 .bl_product    = "Universal Xport",
349                 .features      = "1 queue_if_no_path",
350                 .hwhandler     = "1 rdac",
351                 .pgpolicy      = GROUP_BY_PRIO,
352                 .pgfailback    = -FAILBACK_IMMEDIATE,
353                 .no_path_retry = 300,
354                 .checker_name  = RDAC,
355                 .prio_name     = PRIO_RDAC,
356         },
357         {
358                 /* DS4400 / DS4500 / FAStT700 / FAStT900 */
359                 .vendor        = "IBM",
360                 .product       = "^1742",
361                 .bl_product    = "Universal Xport",
362                 .hwhandler     = "1 rdac",
363                 .pgpolicy      = GROUP_BY_PRIO,
364                 .pgfailback    = -FAILBACK_IMMEDIATE,
365                 .no_path_retry = NO_PATH_RETRY_QUEUE,
366                 .checker_name  = RDAC,
367                 .prio_name     = PRIO_RDAC,
368         },
369         {
370                 /* DS3500 / DS3512 / DS3524 */
371                 .vendor        = "IBM",
372                 .product       = "^(1745|1746)",
373                 .bl_product    = "Universal Xport",
374                 .features      = "2 pg_init_retries 50",
375                 .hwhandler     = "1 rdac",
376                 .pgpolicy      = GROUP_BY_PRIO,
377                 .pgfailback    = -FAILBACK_IMMEDIATE,
378                 .no_path_retry = 15,
379                 .checker_name  = RDAC,
380                 .prio_name     = PRIO_RDAC,
381         },
382         {
383                 /* DS3950 / DS4200 / DS4700 / DS5020 */
384                 .vendor        = "IBM",
385                 .product       = "^1814",
386                 .bl_product    = "Universal Xport",
387                 .hwhandler     = "1 rdac",
388                 .pgpolicy      = GROUP_BY_PRIO,
389                 .pgfailback    = -FAILBACK_IMMEDIATE,
390                 .no_path_retry = NO_PATH_RETRY_QUEUE,
391                 .checker_name  = RDAC,
392                 .prio_name     = PRIO_RDAC,
393         },
394         {
395                 /* DS4800 */
396                 .vendor        = "IBM",
397                 .product       = "^1815",
398                 .bl_product    = "Universal Xport",
399                 .hwhandler     = "1 rdac",
400                 .pgpolicy      = GROUP_BY_PRIO,
401                 .pgfailback    = -FAILBACK_IMMEDIATE,
402                 .no_path_retry = NO_PATH_RETRY_QUEUE,
403                 .checker_name  = RDAC,
404                 .prio_name     = PRIO_RDAC,
405         },
406         {
407                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
408                 .vendor        = "IBM",
409                 .product       = "^1818",
410                 .bl_product    = "Universal Xport",
411                 .hwhandler     = "1 rdac",
412                 .pgpolicy      = GROUP_BY_PRIO,
413                 .pgfailback    = -FAILBACK_IMMEDIATE,
414                 .no_path_retry = NO_PATH_RETRY_QUEUE,
415                 .checker_name  = RDAC,
416                 .prio_name     = PRIO_RDAC,
417         },
418         {
419                 /* Netfinity Fibre Channel RAID Controller Unit */
420                 .vendor        = "IBM",
421                 .product       = "^3526",
422                 .bl_product    = "Universal Xport",
423                 .hwhandler     = "1 rdac",
424                 .pgpolicy      = GROUP_BY_PRIO,
425                 .pgfailback    = -FAILBACK_IMMEDIATE,
426                 .no_path_retry = NO_PATH_RETRY_QUEUE,
427                 .checker_name  = RDAC,
428                 .prio_name     = PRIO_RDAC,
429         },
430         {
431                 /* DS4200 / FAStT200 */
432                 .vendor        = "IBM",
433                 .product       = "^3542",
434                 .pgpolicy      = GROUP_BY_SERIAL,
435                 .pgfailback    = FAILBACK_UNDEF,
436         },
437         {
438                 /* Enterprise Storage Server / Shark family */
439                 .vendor        = "IBM",
440                 .product       = "^2105",
441                 .features      = "1 queue_if_no_path",
442                 .pgpolicy      = GROUP_BY_SERIAL,
443                 .pgfailback    = FAILBACK_UNDEF,
444         },
445         {
446                 /* DS6000 */
447                 .vendor        = "IBM",
448                 .product       = "^1750500",
449                 .features      = "1 queue_if_no_path",
450                 .pgpolicy      = GROUP_BY_PRIO,
451                 .pgfailback    = -FAILBACK_IMMEDIATE,
452                 .prio_name     = PRIO_ALUA,
453         },
454         {
455                 /* DS8000 */
456                 .vendor        = "IBM",
457                 .product       = "^2107900",
458                 .features      = "1 queue_if_no_path",
459                 .pgpolicy      = MULTIBUS,
460                 .pgfailback    = FAILBACK_UNDEF,
461         },
462         {
463                 /* Storwize family / SAN Volume Controller / Flex System V7000 */
464                 .vendor        = "IBM",
465                 .product       = "^2145",
466                 .features      = "1 queue_if_no_path",
467                 .pgpolicy      = GROUP_BY_PRIO,
468                 .pgfailback    = -FAILBACK_IMMEDIATE,
469                 .prio_name     = PRIO_ALUA,
470         },
471         {
472                 .vendor        = "IBM",
473                 .product       = "S/390 DASD ECKD",
474                 .bl_product    = "S/390",
475                 .uid_attribute = "ID_UID",
476                 .features      = "1 queue_if_no_path",
477                 .pgpolicy      = MULTIBUS,
478                 .pgfailback    = FAILBACK_UNDEF,
479         },
480         {
481                 .vendor        = "IBM",
482                 .product       = "S/390 DASD FBA",
483                 .bl_product    = "S/390",
484                 .uid_attribute = "ID_UID",
485                 .features      = "1 queue_if_no_path",
486                 .pgpolicy      = MULTIBUS,
487                 .pgfailback    = FAILBACK_UNDEF,
488         },
489         {
490                 /* Power RAID */
491                 .vendor        = "IBM",
492                 .product       = "^IPR",
493                 .features      = "1 queue_if_no_path",
494                 .hwhandler     = "1 alua",
495                 .pgpolicy      = GROUP_BY_PRIO,
496                 .pgfailback    = -FAILBACK_IMMEDIATE,
497                 .prio_name     = PRIO_ALUA,
498         },
499         {
500                 /* SAS RAID Controller Module (RSSM) */
501                 .vendor        = "IBM",
502                 .product       = "1820N00",
503                 .pgpolicy      = GROUP_BY_PRIO,
504                 .pgfailback    = -FAILBACK_IMMEDIATE,
505                 .no_path_retry = NO_PATH_RETRY_QUEUE,
506                 .minio         = 100,
507                 .prio_name     = PRIO_ALUA,
508         },
509         {
510                 /* XIV Storage System */
511                 .vendor        = "IBM",
512                 .product       = "2810XIV",
513                 .features      = "1 queue_if_no_path",
514                 .pgpolicy      = MULTIBUS,
515                 .pgfailback    = 15,
516                 .minio         = 15,
517         },
518                 /*
519                  * IBM Power Virtual SCSI Devices
520                  *
521                  * Maintainer : Brian King
522                  * Mail : brking@linux.vnet.ibm.com
523                  */
524         {
525                 .vendor        = "AIX",
526                 .product       = "VDASD",
527                 .pgpolicy      = MULTIBUS,
528                 .pgfailback    = FAILBACK_UNDEF,
529                 .no_path_retry = (300 / DEFAULT_CHECKINT),
530         },
531         {
532                 /* 3303 NVDISK */
533                 .vendor        = "IBM",
534                 .product       = "3303[ ]+NVDISK",
535                 .pgfailback    = FAILBACK_UNDEF,
536                 .no_path_retry = (300 / DEFAULT_CHECKINT),
537         },
538         {
539                 .vendor        = "AIX",
540                 .product       = "NVDISK",
541                 .hwhandler     = "1 alua",
542                 .pgpolicy      = GROUP_BY_PRIO,
543                 .pgfailback    = -FAILBACK_IMMEDIATE,
544                 .no_path_retry = (300 / DEFAULT_CHECKINT),
545                 .prio_name     = PRIO_ALUA,
546         },
547         /*
548          * NetApp
549          */
550         {
551                 /*
552                  * ONTAP family
553                  *
554                  * Maintainer : Martin George
555                  * Mail : marting@netapp.com
556                  */
557                 .vendor        = "NETAPP",
558                 .product       = "LUN",
559                 .features      = "3 queue_if_no_path pg_init_retries 50",
560                 .pgpolicy      = GROUP_BY_PRIO,
561                 .pgfailback    = -FAILBACK_IMMEDIATE,
562                 .flush_on_last_del = FLUSH_ENABLED,
563                 .minio         = 128,
564                 .dev_loss      = MAX_DEV_LOSS_TMO,
565                 .prio_name     = PRIO_ONTAP,
566         },
567         {
568                 /*
569                  * SANtricity(RDAC) family
570                  *
571                  * Maintainer : Sean Stewart
572                  * Mail : sean.stewart@netapp.com
573                  */
574                 .vendor        = "(NETAPP|LSI|ENGENIO)",
575                 .product       = "INF-01-00",
576                 .bl_product    = "Universal Xport",
577                 .features      = "2 pg_init_retries 50",
578                 .hwhandler     = "1 rdac",
579                 .pgpolicy      = GROUP_BY_PRIO,
580                 .pgfailback    = -FAILBACK_IMMEDIATE,
581                 .no_path_retry = 30,
582                 .checker_name  = RDAC,
583                 .prio_name     = PRIO_RDAC,
584         },
585         /*
586          * Nexenta
587          *
588          * Maintainer : Yacine Kheddache
589          * Mail : yacine@alyseo.com
590          */
591         {
592                 .vendor        = "NEXENTA",
593                 .product       = "COMSTAR",
594                 .features      = "1 queue_if_no_path",
595                 .pgpolicy      = GROUP_BY_SERIAL,
596                 .pgfailback    = FAILBACK_UNDEF,
597                 .no_path_retry = 30,
598                 .minio         = 128,
599         },
600         /*
601          * SGI
602          */
603         {
604                 .vendor        = "SGI",
605                 .product       = "TP9[13]00",
606                 .pgpolicy      = MULTIBUS,
607                 .pgfailback    = FAILBACK_UNDEF,
608         },
609         {
610                 .vendor        = "SGI",
611                 .product       = "TP9[45]00",
612                 .bl_product    = "Universal Xport",
613                 .hwhandler     = "1 rdac",
614                 .pgpolicy      = GROUP_BY_PRIO,
615                 .pgfailback    = -FAILBACK_IMMEDIATE,
616                 .no_path_retry = NO_PATH_RETRY_QUEUE,
617                 .checker_name  = RDAC,
618                 .prio_name     = PRIO_RDAC,
619         },
620         {
621                 /* InfiniteStorage ??? */
622                 .vendor        = "SGI",
623                 .product       = "IS",
624                 .bl_product    = "Universal Xport",
625                 .features      = "2 pg_init_retries 50",
626                 .hwhandler     = "1 rdac",
627                 .pgpolicy      = GROUP_BY_PRIO,
628                 .pgfailback    = -FAILBACK_IMMEDIATE,
629                 .no_path_retry = 15,
630                 .checker_name  = RDAC,
631                 .prio_name     = PRIO_RDAC,
632         },
633         /*
634          * NEC
635          */
636         {
637                 /* M-Series */
638                 .vendor        = "NEC",
639                 .product       = "DISK ARRAY",
640                 .hwhandler     = "1 alua",
641                 .pgpolicy      = GROUP_BY_PRIO,
642                 .pgfailback    = -FAILBACK_IMMEDIATE,
643                 .prio_name     = PRIO_ALUA,
644         },
645         /*
646          * Oracle
647          */
648         {
649                 /*
650                  * Pillar Data
651                  *
652                  * Maintainer : Srinivasan Ramani
653                  * Mail : srinivas.ramani@oracle.com
654                  */
655                 .vendor        = "Pillar",
656                 .product       = "Axiom",
657                 .pgpolicy      = GROUP_BY_PRIO,
658                 .pgfailback    = -FAILBACK_IMMEDIATE,
659                 .prio_name     = PRIO_ALUA,
660         },
661         {
662                 .vendor        = "STK",
663                 .product       = "OPENstorage D280",
664                 .bl_product    = "Universal Xport",
665                 .hwhandler     = "1 rdac",
666                 .pgpolicy      = GROUP_BY_PRIO,
667                 .pgfailback    = -FAILBACK_IMMEDIATE,
668                 .checker_name  = RDAC,
669                 .prio_name     = PRIO_RDAC,
670         },
671         {
672                 .vendor        = "STK",
673                 .product       = "FLEXLINE 380",
674                 .bl_product    = "Universal Xport",
675                 .hwhandler     = "1 rdac",
676                 .pgpolicy      = GROUP_BY_PRIO,
677                 .pgfailback    = -FAILBACK_IMMEDIATE,
678                 .no_path_retry = NO_PATH_RETRY_QUEUE,
679                 .checker_name  = RDAC,
680                 .prio_name     = PRIO_RDAC,
681         },
682         {
683                 .vendor        = "SUN",
684                 .product       = "(StorEdge 3510|T4)",
685                 .pgpolicy      = MULTIBUS,
686                 .pgfailback    = FAILBACK_UNDEF,
687         },
688         {
689                 .vendor        = "SUN",
690                 .product       = "STK6580_6780",
691                 .bl_product    = "Universal Xport",
692                 .hwhandler     = "1 rdac",
693                 .pgpolicy      = GROUP_BY_PRIO,
694                 .pgfailback    = -FAILBACK_IMMEDIATE,
695                 .checker_name  = RDAC,
696                 .prio_name     = PRIO_RDAC,
697         },
698         {
699                 /* 6140 */
700                 .vendor        = "SUN",
701                 .product       = "CSM200_R",
702                 .bl_product    = "Universal Xport",
703                 .hwhandler     = "1 rdac",
704                 .pgpolicy      = GROUP_BY_PRIO,
705                 .pgfailback    = -FAILBACK_IMMEDIATE,
706                 .no_path_retry = NO_PATH_RETRY_QUEUE,
707                 .checker_name  = RDAC,
708                 .prio_name     = PRIO_RDAC,
709         },
710         {
711                 /* 2510 / 2530 / 2540 */
712                 .vendor        = "SUN",
713                 .product       = "LCSM100_[IEFS]",
714                 .bl_product    = "Universal Xport",
715                 .hwhandler     = "1 rdac",
716                 .pgpolicy      = GROUP_BY_PRIO,
717                 .pgfailback    = -FAILBACK_IMMEDIATE,
718                 .no_path_retry = NO_PATH_RETRY_QUEUE,
719                 .checker_name  = RDAC,
720                 .prio_name     = PRIO_RDAC,
721         },
722         {
723                 .vendor        = "SUN",
724                 .product       = "SUN_6180",
725                 .bl_product    = "Universal Xport",
726                 .hwhandler     = "1 rdac",
727                 .pgpolicy      = GROUP_BY_PRIO,
728                 .pgfailback    = -FAILBACK_IMMEDIATE,
729                 .no_path_retry = NO_PATH_RETRY_QUEUE,
730                 .checker_name  = RDAC,
731                 .prio_name     = PRIO_RDAC,
732         },
733         /*
734          * Pivot3
735          *
736          * Maintainer : Bart Brooks
737          * Mail : bartb@pivot3.com
738          */
739         {
740                 .vendor        = "PIVOT3",
741                 .product       = "RAIGE VOLUME",
742                 .features      = "1 queue_if_no_path",
743                 .pgpolicy      = MULTIBUS,
744                 .pgfailback    = FAILBACK_UNDEF,
745                 .minio         = 100,
746         },
747         /*
748          * Intel
749          */
750         {
751                 .vendor        = "(Intel|INTEL)",
752                 .product       = "Multi-Flex",
753                 .hwhandler     = "1 alua",
754                 .pgpolicy      = GROUP_BY_PRIO,
755                 .pgfailback    = -FAILBACK_IMMEDIATE,
756                 .no_path_retry = NO_PATH_RETRY_QUEUE,
757                 .prio_name     = PRIO_ALUA,
758         },
759         /*
760          * Linux-IO Target
761          */
762         {
763                 .vendor        = "(LIO-ORG|SUSE)",
764                 .product       = "RBD",
765                 .hwhandler     = "1 alua",
766                 .pgpolicy      = GROUP_BY_PRIO,
767                 .pgfailback    = -FAILBACK_IMMEDIATE,
768                 .no_path_retry = 12,
769                 .minio         = 100,
770                 .prio_name     = PRIO_ALUA,
771         },
772         /*
773          * DataCore
774          */
775         {
776                 .vendor        = "DataCore",
777                 .product       = "SANmelody",
778                 .pgpolicy      = GROUP_BY_PRIO,
779                 .pgfailback    = -FAILBACK_IMMEDIATE,
780                 .no_path_retry = NO_PATH_RETRY_QUEUE,
781                 .prio_name     = PRIO_ALUA,
782         },
783         {
784                 .vendor        = "DataCore",
785                 .product       = "Virtual Disk",
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          * Pure Storage
793          */
794         {
795                 .vendor        = "PURE",
796                 .product       = "FlashArray",
797                 .selector      = "queue-length 0",
798                 .pgpolicy      = MULTIBUS,
799                 .pgfailback    = FAILBACK_UNDEF,
800                 .fast_io_fail  = 10,
801                 .dev_loss      = 60,
802         },
803         /*
804          * Huawei
805          */
806         {
807                 /* OceanStor V3 */
808                 .vendor        = "(HUAWEI|HUASY)",
809                 .product       = "XSG1",
810                 .pgpolicy      = MULTIBUS,
811                 .pgfailback    = FAILBACK_UNDEF,
812         },
813         /*
814          * Red Hat
815          *
816          * Maintainer: Mike Christie
817          * Mail: mchristi@redhat.com
818          */
819         {
820                 .vendor        = "Ceph",
821                 .product       = "RBD",
822                 .no_path_retry = NO_PATH_RETRY_FAIL,
823                 .checker_name  = RBD,
824                 .deferred_remove = DEFERRED_REMOVE_ON,
825         },
826 #if 0
827         /*
828          * Copy this TEMPLATE to add new hardware.
829          *
830          * Keep only mandatory and modified attributes.
831          * Attributes with default values must be removed.
832          * .vendor and .product are mandatory, all other are optional.
833          * POSIX Extended regex can be used in .vendor, .product, .revision and .bl_product
834          *
835          * COMPANY_NAME
836          *
837          * Maintainer : XXX
838          * Mail : XXX
839          */
840         {
841                 /* If product-ID is different from marketing name add a comment */
842                 .vendor        = "VENDOR",
843                 .product       = "PRODUCT",
844                 .revision      = "REVISION",
845                 .bl_product    = "BL_PRODUCT",
846                 .pgpolicy      = FAILOVER,
847                 .uid_attribute = "ID_SERIAL",
848                 .selector      = "service-time 0",
849                 .checker_name  = TUR,
850                 .features      = "0",
851                 .hwhandler     = "0",
852                 .prio_name     = "const",
853                 .prio_args     = "",
854                 .pgfailback    = -FAILBACK_MANUAL,
855                 .rr_weight     = RR_WEIGHT_NONE,
856                 .no_path_retry = NO_PATH_RETRY_UNDEF,
857                 .minio         = 1000,
858                 .minio_rq      = 1,
859                 .flush_on_last_del = FLUSH_DISABLED,
860                 .fast_io_fail  = 5,
861                 .dev_loss      = 600,
862                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
863                 .detect_prio   = DETECT_PRIO_ON,
864                 .deferred_remove = DEFERRED_REMOVE_OFF,
865                 .delay_watch_checks = DELAY_CHECKS_OFF,
866                 .delay_wait_checks = DELAY_CHECKS_OFF,
867         },
868 #endif
869         /*
870          * EOL
871          */
872         {
873                 .vendor        = NULL,
874                 .product       = NULL,
875         },
876 };
877
878 extern int
879 setup_default_hwtable (vector hw)
880 {
881         int r = 0;
882         struct hwentry * hwe = default_hw;
883
884         while (hwe->vendor) {
885                 r += store_hwe(hw, hwe);
886                 hwe++;
887         }
888         return r;
889 }