9 #include "pgpolicies.h"
12 * Tuning suggestions on these parameters should go to
15 * You are welcome to claim maintainership over a controller
16 * family. Please mail the currently enlisted maintainer and
17 * the upstream package maintainer.
19 static struct hwentry default_hw[] = {
21 * Apple controller family
23 * Maintainer : Shyam Sundar
24 * Mail : g.shyamsundar@yahoo.co.in
28 .product = "Xserve RAID ",
29 .getuid = DEFAULT_GETUID,
31 .features = DEFAULT_FEATURES,
32 .hwhandler = DEFAULT_HWHANDLER,
33 .selector = DEFAULT_SELECTOR,
35 .pgfailback = FAILBACK_UNDEF,
36 .rr_weight = RR_WEIGHT_NONE,
37 .no_path_retry = NO_PATH_RETRY_UNDEF,
38 .minio = DEFAULT_MINIO,
39 .checker_name = DEFAULT_CHECKER,
42 * StorageWorks controller family
44 * Maintainer : Christophe Varoqui
45 * Mail : christophe.varoqui@free.fr
50 .getuid = DEFAULT_GETUID,
52 .features = DEFAULT_FEATURES,
53 .hwhandler = DEFAULT_HWHANDLER,
54 .selector = DEFAULT_SELECTOR,
56 .pgfailback = FAILBACK_UNDEF,
57 .rr_weight = RR_WEIGHT_NONE,
58 .no_path_retry = NO_PATH_RETRY_UNDEF,
59 .minio = DEFAULT_MINIO,
60 .checker_name = DEFAULT_CHECKER,
65 .getuid = DEFAULT_GETUID,
66 .getprio = "/sbin/mpath_prio_hp_sw /dev/%n",
67 .features = "1 queue_if_no_path",
68 .hwhandler = "1 hp-sw",
69 .selector = DEFAULT_SELECTOR,
70 .pgpolicy = GROUP_BY_PRIO,
71 .pgfailback = FAILBACK_UNDEF,
72 .rr_weight = RR_WEIGHT_NONE,
73 .no_path_retry = NO_PATH_RETRY_UNDEF,
74 .minio = DEFAULT_MINIO,
75 .checker_name = HP_SW,
80 .getuid = DEFAULT_GETUID,
82 .features = DEFAULT_FEATURES,
83 .hwhandler = DEFAULT_HWHANDLER,
84 .selector = DEFAULT_SELECTOR,
86 .pgfailback = FAILBACK_UNDEF,
87 .rr_weight = RR_WEIGHT_NONE,
88 .no_path_retry = NO_PATH_RETRY_UNDEF,
89 .minio = DEFAULT_MINIO,
90 .checker_name = READSECTOR0,
93 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
94 .vendor = "(COMPAQ|HP)",
95 .product = "(MSA|HSV)1.0.*",
96 .getuid = DEFAULT_GETUID,
97 .getprio = "/sbin/mpath_prio_hp_sw /dev/%n",
98 .features = "1 queue_if_no_path",
99 .hwhandler = "1 hp-sw",
100 .selector = DEFAULT_SELECTOR,
101 .pgpolicy = GROUP_BY_PRIO,
102 .pgfailback = FAILBACK_UNDEF,
103 .rr_weight = RR_WEIGHT_NONE,
104 .no_path_retry = NO_PATH_RETRY_UNDEF,
105 .minio = DEFAULT_MINIO,
106 .checker_name = HP_SW,
109 /* MSA 1000/1500 with new firmware */
111 .product = "MSA VOLUME",
112 .getuid = DEFAULT_GETUID,
113 .getprio = "/sbin/mpath_prio_alua /dev/%n",
114 .features = DEFAULT_FEATURES,
115 .hwhandler = DEFAULT_HWHANDLER,
116 .selector = DEFAULT_SELECTOR,
117 .pgpolicy = GROUP_BY_PRIO,
118 .pgfailback = -FAILBACK_IMMEDIATE,
119 .rr_weight = RR_WEIGHT_NONE,
120 .no_path_retry = NO_PATH_RETRY_UNDEF,
121 .minio = DEFAULT_MINIO,
126 .product = "MSA2000s*",
127 .getuid = "/sbin/cciss_id %n",
129 .features = DEFAULT_FEATURES,
130 .hwhandler = DEFAULT_HWHANDLER,
131 .selector = DEFAULT_SELECTOR,
132 .pgpolicy = MULTIBUS,
133 .pgfailback = FAILBACK_UNDEF,
134 .rr_weight = RR_WEIGHT_NONE,
136 .minio = DEFAULT_MINIO,
140 /* EVA 3000/5000 with new firmware */
141 .vendor = "(COMPAQ|HP)",
142 .product = "(MSA|HSV)1.1.*",
143 .getuid = DEFAULT_GETUID,
144 .getprio = "/sbin/mpath_prio_alua /dev/%n",
145 .features = DEFAULT_FEATURES,
146 .hwhandler = DEFAULT_HWHANDLER,
147 .selector = DEFAULT_SELECTOR,
148 .pgpolicy = GROUP_BY_PRIO,
149 .pgfailback = -FAILBACK_IMMEDIATE,
150 .rr_weight = RR_WEIGHT_NONE,
151 .no_path_retry = NO_PATH_RETRY_UNDEF,
152 .minio = DEFAULT_MINIO,
156 /* EVA 4000/6000/8000 */
159 .getuid = DEFAULT_GETUID,
160 .getprio = "/sbin/mpath_prio_alua /dev/%n",
161 .features = DEFAULT_FEATURES,
162 .hwhandler = DEFAULT_HWHANDLER,
163 .selector = DEFAULT_SELECTOR,
164 .pgpolicy = GROUP_BY_PRIO,
165 .pgfailback = -FAILBACK_IMMEDIATE,
166 .rr_weight = RR_WEIGHT_NONE,
167 .no_path_retry = NO_PATH_RETRY_UNDEF,
168 .minio = DEFAULT_MINIO,
174 .product = "LOGICAL VOLUME.*",
175 .getuid = "/lib/udev/scsi_id -n -g -u -s /block/%n",
177 .features = DEFAULT_FEATURES,
178 .hwhandler = DEFAULT_HWHANDLER,
179 .selector = DEFAULT_SELECTOR,
180 .pgpolicy = MULTIBUS,
181 .pgfailback = FAILBACK_UNDEF,
182 .rr_weight = RR_WEIGHT_NONE,
183 .no_path_retry = NO_PATH_RETRY_UNDEF,
184 .minio = DEFAULT_MINIO,
188 * DDN controller family
190 * Maintainer : Christophe Varoqui
191 * Mail : christophe.varoqui@free.fr
195 .product = "SAN DataDirector",
196 .getuid = DEFAULT_GETUID,
198 .features = DEFAULT_FEATURES,
199 .hwhandler = DEFAULT_HWHANDLER,
200 .selector = DEFAULT_SELECTOR,
201 .pgpolicy = MULTIBUS,
202 .pgfailback = FAILBACK_UNDEF,
203 .rr_weight = RR_WEIGHT_NONE,
204 .no_path_retry = NO_PATH_RETRY_UNDEF,
205 .minio = DEFAULT_MINIO,
206 .checker_name = DIRECTIO,
209 * EMC / Clariion controller family
211 * Maintainer : Edward Goggin, EMC
212 * Mail : egoggin@emc.com
216 .product = "SYMMETRIX",
217 .getuid = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n",
219 .features = DEFAULT_FEATURES,
220 .hwhandler = DEFAULT_HWHANDLER,
221 .selector = DEFAULT_SELECTOR,
222 .pgpolicy = MULTIBUS,
223 .pgfailback = FAILBACK_UNDEF,
224 .rr_weight = RR_WEIGHT_NONE,
225 .no_path_retry = NO_PATH_RETRY_UNDEF,
226 .minio = DEFAULT_MINIO,
227 .checker_name = READSECTOR0,
232 .bl_product = "LUNZ",
233 .getuid = DEFAULT_GETUID,
234 .getprio = "/sbin/mpath_prio_emc /dev/%n",
235 .features = "1 queue_if_no_path",
236 .hwhandler = "1 emc",
237 .selector = DEFAULT_SELECTOR,
238 .pgpolicy = GROUP_BY_PRIO,
239 .pgfailback = -FAILBACK_IMMEDIATE,
240 .rr_weight = RR_WEIGHT_NONE,
241 .no_path_retry = (300 / DEFAULT_CHECKINT),
242 .minio = DEFAULT_MINIO,
243 .checker_name = EMC_CLARIION,
246 * Fujitsu controller family
248 * Maintainer : Christophe Varoqui
249 * Mail : christophe.varoqui@free.fr
253 .product = "CentricStor",
254 .getuid = DEFAULT_GETUID,
256 .features = DEFAULT_FEATURES,
257 .hwhandler = DEFAULT_HWHANDLER,
258 .selector = DEFAULT_SELECTOR,
259 .pgpolicy = GROUP_BY_SERIAL,
260 .pgfailback = FAILBACK_UNDEF,
261 .rr_weight = RR_WEIGHT_NONE,
262 .no_path_retry = NO_PATH_RETRY_UNDEF,
263 .minio = DEFAULT_MINIO,
264 .checker_name = READSECTOR0,
267 * Hitachi controller family
269 * Maintainer : Matthias Rudolph
270 * Mail : matthias.rudolph@hds.com
273 .vendor = "(HITACHI|HP)",
274 .product = "OPEN-.*",
275 .getuid = DEFAULT_GETUID,
277 .features = "1 queue_if_no_path",
278 .hwhandler = DEFAULT_HWHANDLER,
279 .selector = DEFAULT_SELECTOR,
280 .pgpolicy = MULTIBUS,
281 .pgfailback = FAILBACK_UNDEF,
282 .rr_weight = RR_WEIGHT_NONE,
283 .no_path_retry = NO_PATH_RETRY_UNDEF,
284 .minio = DEFAULT_MINIO,
290 .getuid = DEFAULT_GETUID,
291 .getprio = "/sbin/mpath_prio_hds_modular /dev/%n",
292 .features = "1 queue_if_no_path",
293 .hwhandler = DEFAULT_HWHANDLER,
294 .selector = DEFAULT_SELECTOR,
295 .pgpolicy = GROUP_BY_PRIO,
296 .pgfailback = -FAILBACK_IMMEDIATE,
297 .rr_weight = RR_WEIGHT_NONE,
298 .no_path_retry = NO_PATH_RETRY_UNDEF,
299 .minio = DEFAULT_MINIO,
303 * IBM controller family
305 * Maintainer : Hannes Reinecke, SuSE
306 * Mail : hare@suse.de
310 .product = "ProFibre 4000R",
311 .getuid = DEFAULT_GETUID,
313 .features = DEFAULT_FEATURES,
314 .hwhandler = DEFAULT_HWHANDLER,
315 .selector = DEFAULT_SELECTOR,
316 .pgpolicy = MULTIBUS,
317 .pgfailback = FAILBACK_UNDEF,
318 .rr_weight = RR_WEIGHT_NONE,
319 .no_path_retry = NO_PATH_RETRY_UNDEF,
320 .minio = DEFAULT_MINIO,
321 .checker_name = READSECTOR0,
324 /* IBM DS4100 / FAStT100 */
327 .getuid = DEFAULT_GETUID,
328 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
329 .features = DEFAULT_FEATURES,
330 .hwhandler = DEFAULT_HWHANDLER,
331 .selector = DEFAULT_SELECTOR,
332 .pgpolicy = GROUP_BY_PRIO,
333 .pgfailback = -FAILBACK_IMMEDIATE,
334 .rr_weight = RR_WEIGHT_NONE,
335 .no_path_retry = NO_PATH_RETRY_UNDEF,
336 .minio = DEFAULT_MINIO,
340 /* IBM Netfinity Fibre Channel RAID Controller Unit */
343 .getuid = DEFAULT_GETUID,
344 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
345 .features = DEFAULT_FEATURES,
346 .hwhandler = DEFAULT_HWHANDLER,
347 .selector = DEFAULT_SELECTOR,
348 .pgpolicy = GROUP_BY_PRIO,
349 .pgfailback = -FAILBACK_IMMEDIATE,
350 .rr_weight = RR_WEIGHT_NONE,
351 .no_path_retry = NO_PATH_RETRY_UNDEF,
352 .minio = DEFAULT_MINIO,
356 /* IBM DS4200 / FAStT200 */
359 .getuid = DEFAULT_GETUID,
361 .features = DEFAULT_FEATURES,
362 .hwhandler = DEFAULT_HWHANDLER,
363 .selector = DEFAULT_SELECTOR,
364 .pgpolicy = GROUP_BY_SERIAL,
365 .pgfailback = FAILBACK_UNDEF,
366 .rr_weight = RR_WEIGHT_NONE,
367 .no_path_retry = NO_PATH_RETRY_UNDEF,
368 .minio = DEFAULT_MINIO,
372 /* IBM ESS F20 aka Shark */
374 .product = "2105(800|F20)",
375 .getuid = DEFAULT_GETUID,
377 .features = "1 queue_if_no_path",
378 .hwhandler = DEFAULT_HWHANDLER,
379 .selector = DEFAULT_SELECTOR,
380 .pgpolicy = GROUP_BY_SERIAL,
381 .pgfailback = FAILBACK_UNDEF,
382 .rr_weight = RR_WEIGHT_NONE,
383 .no_path_retry = NO_PATH_RETRY_UNDEF,
384 .minio = DEFAULT_MINIO,
390 .product = "1750500",
391 .getuid = DEFAULT_GETUID,
392 .getprio = "/sbin/mpath_prio_alua /dev/%n",
393 .features = "1 queue_if_no_path",
394 .hwhandler = DEFAULT_HWHANDLER,
395 .selector = DEFAULT_SELECTOR,
396 .pgpolicy = GROUP_BY_PRIO,
397 .pgfailback = -FAILBACK_IMMEDIATE,
398 .rr_weight = RR_WEIGHT_NONE,
399 .no_path_retry = NO_PATH_RETRY_UNDEF,
400 .minio = DEFAULT_MINIO,
406 .product = "2107900",
407 .getuid = DEFAULT_GETUID,
409 .features = "1 queue_if_no_path",
410 .hwhandler = DEFAULT_HWHANDLER,
411 .selector = DEFAULT_SELECTOR,
412 .pgpolicy = MULTIBUS,
413 .pgfailback = FAILBACK_UNDEF,
414 .rr_weight = RR_WEIGHT_NONE,
415 .no_path_retry = NO_PATH_RETRY_UNDEF,
416 .minio = DEFAULT_MINIO,
420 /* IBM SAN Volume Controller */
423 .getuid = DEFAULT_GETUID,
424 .getprio = "/sbin/mpath_prio_alua /dev/%n",
425 .features = "1 queue_if_no_path",
426 .hwhandler = DEFAULT_HWHANDLER,
427 .selector = DEFAULT_SELECTOR,
428 .pgpolicy = GROUP_BY_PRIO,
429 .pgfailback = -FAILBACK_IMMEDIATE,
430 .rr_weight = RR_WEIGHT_NONE,
431 .no_path_retry = NO_PATH_RETRY_UNDEF,
432 .minio = DEFAULT_MINIO,
436 /* IBM S/390 ECKD DASD */
438 .product = "S/390 DASD ECKD",
439 .bl_product = "S/390.*",
440 .getuid = "/sbin/dasdinfo -u -b %n",
442 .features = "1 queue_if_no_path",
443 .hwhandler = DEFAULT_HWHANDLER,
444 .selector = DEFAULT_SELECTOR,
445 .pgpolicy = MULTIBUS,
446 .pgfailback = FAILBACK_UNDEF,
447 .rr_weight = RR_WEIGHT_NONE,
448 .no_path_retry = NO_PATH_RETRY_UNDEF,
449 .minio = DEFAULT_MINIO,
450 .checker_name = DIRECTIO,
453 * NETAPP controller family
455 * Maintainer : Dave Wysochanski
456 * Mail : davidw@netapp.com
461 .getuid = DEFAULT_GETUID,
462 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
463 .features = "1 queue_if_no_path",
464 .hwhandler = DEFAULT_HWHANDLER,
465 .selector = DEFAULT_SELECTOR,
466 .pgpolicy = GROUP_BY_PRIO,
467 .pgfailback = -FAILBACK_IMMEDIATE,
468 .rr_weight = RR_WEIGHT_NONE,
469 .no_path_retry = NO_PATH_RETRY_UNDEF,
471 .checker_name = READSECTOR0,
474 * IBM NSeries (NETAPP) controller family
476 * Maintainer : Dave Wysochanski
477 * Mail : davidw@netapp.com
481 .product = "Nseries.*",
482 .getuid = DEFAULT_GETUID,
483 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
484 .features = "1 queue_if_no_path",
485 .hwhandler = DEFAULT_HWHANDLER,
486 .selector = DEFAULT_SELECTOR,
487 .pgpolicy = GROUP_BY_PRIO,
488 .pgfailback = -FAILBACK_IMMEDIATE,
489 .rr_weight = RR_WEIGHT_NONE,
490 .no_path_retry = NO_PATH_RETRY_UNDEF,
492 .checker_name = READSECTOR0,
495 * Pillar Data controller family
497 * Maintainer : Srinivasan Ramani
498 * Mail : sramani@pillardata.com
502 .product = "Axiom.*",
503 .getuid = DEFAULT_GETUID,
504 .getprio = "/sbin/mpath_prio_alua %n",
505 .features = DEFAULT_FEATURES,
506 .hwhandler = DEFAULT_HWHANDLER,
507 .selector = DEFAULT_SELECTOR,
508 .pgpolicy = GROUP_BY_PRIO,
509 .pgfailback = FAILBACK_UNDEF,
510 .rr_weight = RR_WEIGHT_NONE,
511 .no_path_retry = NO_PATH_RETRY_UNDEF,
512 .minio = DEFAULT_MINIO,
518 * Maintainer : Christophe Varoqui
519 * Mail : christophe.varoqui@free.fr
523 .product = "TP9[13]00",
524 .getuid = DEFAULT_GETUID,
526 .features = DEFAULT_FEATURES,
527 .hwhandler = DEFAULT_HWHANDLER,
528 .selector = DEFAULT_SELECTOR,
529 .pgpolicy = MULTIBUS,
530 .pgfailback = FAILBACK_UNDEF,
531 .rr_weight = RR_WEIGHT_NONE,
532 .no_path_retry = NO_PATH_RETRY_UNDEF,
533 .minio = DEFAULT_MINIO,
534 .checker_name = READSECTOR0,
538 .product = "TP9[45]00",
539 .getuid = DEFAULT_GETUID,
540 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
541 .features = DEFAULT_FEATURES,
542 .hwhandler = DEFAULT_HWHANDLER,
543 .selector = DEFAULT_SELECTOR,
544 .pgpolicy = GROUP_BY_PRIO,
545 .pgfailback = -FAILBACK_IMMEDIATE,
546 .rr_weight = RR_WEIGHT_NONE,
547 .no_path_retry = NO_PATH_RETRY_QUEUE,
548 .minio = DEFAULT_MINIO,
549 .checker_name = RDAC,
554 .getuid = DEFAULT_GETUID,
555 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
556 .features = DEFAULT_FEATURES,
557 .hwhandler = DEFAULT_HWHANDLER,
558 .selector = DEFAULT_SELECTOR,
559 .pgpolicy = GROUP_BY_PRIO,
560 .pgfailback = -FAILBACK_IMMEDIATE,
561 .rr_weight = RR_WEIGHT_NONE,
562 .no_path_retry = NO_PATH_RETRY_QUEUE,
563 .minio = DEFAULT_MINIO,
564 .checker_name = RDAC,
569 * Maintainer : Christophe Varoqui
570 * Mail : christophe.varoqui@free.fr
574 .product = "OPENstorage D280",
575 .getuid = DEFAULT_GETUID,
576 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
577 .features = DEFAULT_FEATURES,
578 .hwhandler = DEFAULT_HWHANDLER,
579 .selector = DEFAULT_SELECTOR,
580 .pgpolicy = GROUP_BY_PRIO,
581 .pgfailback = -FAILBACK_IMMEDIATE,
582 .rr_weight = RR_WEIGHT_NONE,
583 .no_path_retry = NO_PATH_RETRY_UNDEF,
584 .minio = DEFAULT_MINIO,
590 * Maintainer : Christophe Varoqui
591 * Mail : christophe.varoqui@free.fr
595 .product = "(StorEdge 3510|T4)",
596 .getuid = DEFAULT_GETUID,
598 .features = DEFAULT_FEATURES,
599 .hwhandler = DEFAULT_HWHANDLER,
600 .selector = DEFAULT_SELECTOR,
601 .pgpolicy = MULTIBUS,
602 .pgfailback = FAILBACK_UNDEF,
603 .rr_weight = RR_WEIGHT_NONE,
604 .no_path_retry = NO_PATH_RETRY_UNDEF,
605 .minio = DEFAULT_MINIO,
606 .checker_name = READSECTOR0,
611 * Maintainer : Bart Brooks, Pivot3
612 * Mail : bartb@pivot3.com
616 .product = "RAIGE VOLUME",
617 .getuid = "/sbin/scsi_id -p 0x80 -g -u -s /block/%n",
619 .features = "1 queue_if_no_path",
620 .hwhandler = DEFAULT_HWHANDLER,
621 .selector = DEFAULT_SELECTOR,
622 .pgpolicy = MULTIBUS,
623 .pgfailback = FAILBACK_UNDEF,
624 .rr_weight = RR_WEIGHT_NONE,
625 .no_path_retry = NO_PATH_RETRY_UNDEF,
645 .checker_name = NULL,
650 setup_default_hwtable (vector hw)
653 struct hwentry * hwe = default_hw;
655 while (hwe->vendor) {
656 hwe->checker = checker_lookup(hwe->checker_name);
657 r += store_hwe(hw, hwe);