2 * Based on Alexandre Cassen template for keepalived
3 * Copyright (c) 2004, 2005, 2006 Christophe Varoqui
4 * Copyright (c) 2005 Benjamin Marzinski, Redhat
5 * Copyright (c) 2005 Kiyoshi Ueda, NEC
15 #include "pgpolicies.h"
16 #include "blacklist.h"
21 * default block handlers
24 polling_interval_handler(vector strvec)
28 buff = VECTOR_SLOT(strvec, 1);
29 conf->checkint = atoi(buff);
30 conf->max_checkint = MAX_CHECKINT(conf->checkint);
36 udev_dir_handler(vector strvec)
38 conf->udev_dir = set_value(strvec);
47 multipath_dir_handler(vector strvec)
49 conf->multipath_dir = set_value(strvec);
51 if (!conf->multipath_dir)
58 def_selector_handler(vector strvec)
60 conf->selector = set_value(strvec);
69 def_pgpolicy_handler(vector strvec)
73 buff = set_value(strvec);
78 conf->pgpolicy = get_pgpolicy_id(buff);
85 def_getuid_callout_handler(vector strvec)
87 conf->getuid = set_value(strvec);
96 def_prio_handler(vector strvec)
100 buff = set_value(strvec);
104 conf->prio = prio_lookup(buff);
110 def_features_handler(vector strvec)
112 conf->features = set_value(strvec);
121 def_path_checker_handler(vector strvec)
123 conf->checker_name = set_value(strvec);
125 if (!conf->checker_name)
132 def_minio_handler(vector strvec)
136 buff = set_value(strvec);
141 conf->minio = atoi(buff);
148 max_fds_handler(vector strvec)
152 buff = set_value(strvec);
157 if (strlen(buff) == 9 &&
158 !strcmp(buff, "unlimited"))
159 conf->max_fds = MAX_FDS_UNLIMITED;
161 conf->max_fds = atoi(buff);
168 def_weight_handler(vector strvec)
172 buff = set_value(strvec);
177 if (strlen(buff) == 10 &&
178 !strcmp(buff, "priorities"))
179 conf->rr_weight = RR_WEIGHT_PRIO;
187 default_failback_handler(vector strvec)
191 buff = set_value(strvec);
193 if (strlen(buff) == 6 && !strcmp(buff, "manual"))
194 conf->pgfailback = -FAILBACK_MANUAL;
195 else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
196 conf->pgfailback = -FAILBACK_IMMEDIATE;
198 conf->pgfailback = atoi(buff);
206 def_no_path_retry_handler(vector strvec)
210 buff = set_value(strvec);
214 if ((strlen(buff) == 4 && !strcmp(buff, "fail")) ||
215 (strlen(buff) == 1 && !strcmp(buff, "0")))
216 conf->no_path_retry = NO_PATH_RETRY_FAIL;
217 else if (strlen(buff) == 5 && !strcmp(buff, "queue"))
218 conf->no_path_retry = NO_PATH_RETRY_QUEUE;
219 else if ((conf->no_path_retry = atoi(buff)) < 1)
220 conf->no_path_retry = NO_PATH_RETRY_UNDEF;
227 def_pg_timeout_handler(vector strvec)
232 buff = set_value(strvec);
237 if (strlen(buff) == 4 && !strcmp(buff, "none"))
238 conf->pg_timeout = -PGTIMEOUT_NONE;
239 else if (sscanf(buff, "%d", &pg_timeout) == 1 && pg_timeout >= 0) {
241 conf->pg_timeout = -PGTIMEOUT_NONE;
243 conf->pg_timeout = pg_timeout;
246 conf->pg_timeout = PGTIMEOUT_UNDEF;
253 names_handler(vector strvec)
257 buff = set_value(strvec);
262 if ((strlen(buff) == 2 && !strcmp(buff, "no")) ||
263 (strlen(buff) == 1 && !strcmp(buff, "0")))
264 conf->user_friendly_names = 0;
265 else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
266 (strlen(buff) == 1 && !strcmp(buff, "1")))
267 conf->user_friendly_names = 1;
274 * blacklist block handlers
277 blacklist_handler(vector strvec)
279 conf->blist_devnode = vector_alloc();
280 conf->blist_wwid = vector_alloc();
281 conf->blist_device = vector_alloc();
283 if (!conf->blist_devnode || !conf->blist_wwid || !conf->blist_device)
290 blacklist_exceptions_handler(vector strvec)
292 conf->elist_devnode = vector_alloc();
293 conf->elist_wwid = vector_alloc();
294 conf->elist_device = vector_alloc();
296 if (!conf->elist_devnode || !conf->elist_wwid || !conf->elist_device)
303 ble_devnode_handler(vector strvec)
307 buff = set_value(strvec);
312 return store_ble(conf->blist_devnode, buff, ORIGIN_CONFIG);
316 ble_except_devnode_handler(vector strvec)
320 buff = set_value(strvec);
325 return store_ble(conf->elist_devnode, buff, ORIGIN_CONFIG);
329 ble_wwid_handler(vector strvec)
333 buff = set_value(strvec);
338 return store_ble(conf->blist_wwid, buff, ORIGIN_CONFIG);
342 ble_except_wwid_handler(vector strvec)
346 buff = set_value(strvec);
351 return store_ble(conf->elist_wwid, buff, ORIGIN_CONFIG);
355 ble_device_handler(vector strvec)
357 return alloc_ble_device(conf->blist_device);
361 ble_except_device_handler(vector strvec)
363 return alloc_ble_device(conf->elist_device);
367 ble_vendor_handler(vector strvec)
371 buff = set_value(strvec);
376 return set_ble_device(conf->blist_device, buff, NULL, ORIGIN_CONFIG);
380 ble_except_vendor_handler(vector strvec)
384 buff = set_value(strvec);
389 return set_ble_device(conf->elist_device, buff, NULL, ORIGIN_CONFIG);
393 ble_product_handler(vector strvec)
397 buff = set_value(strvec);
402 return set_ble_device(conf->blist_device, NULL, buff, ORIGIN_CONFIG);
406 ble_except_product_handler(vector strvec)
410 buff = set_value(strvec);
415 return set_ble_device(conf->elist_device, NULL, buff, ORIGIN_CONFIG);
419 * devices block handlers
422 devices_handler(vector strvec)
424 conf->hwtable = vector_alloc();
433 device_handler(vector strvec)
435 struct hwentry * hwe;
437 hwe = (struct hwentry *)MALLOC(sizeof(struct hwentry));
442 if (!vector_alloc_slot(conf->hwtable)) {
446 vector_set_slot(conf->hwtable, hwe);
452 vendor_handler(vector strvec)
454 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
459 hwe->vendor = set_value(strvec);
468 product_handler(vector strvec)
470 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
475 hwe->product = set_value(strvec);
484 bl_product_handler(vector strvec)
486 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
491 hwe->bl_product = set_value(strvec);
492 if (!hwe->bl_product)
499 hw_pgpolicy_handler(vector strvec)
502 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
504 buff = set_value(strvec);
509 hwe->pgpolicy = get_pgpolicy_id(buff);
516 hw_getuid_callout_handler(vector strvec)
518 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
520 hwe->getuid = set_value(strvec);
529 hw_selector_handler(vector strvec)
531 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
536 hwe->selector = set_value(strvec);
545 hw_path_checker_handler(vector strvec)
547 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
552 hwe->checker_name = set_value(strvec);
554 if (!hwe->checker_name)
561 hw_features_handler(vector strvec)
563 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
568 hwe->features = set_value(strvec);
577 hw_handler_handler(vector strvec)
579 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
584 hwe->hwhandler = set_value(strvec);
593 hw_prio_handler(vector strvec)
595 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
601 buff = set_value(strvec);
605 hwe->prio = prio_lookup(buff);
611 hw_failback_handler(vector strvec)
613 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
619 buff = set_value(strvec);
621 if (strlen(buff) == 6 && !strcmp(buff, "manual"))
622 hwe->pgfailback = -FAILBACK_MANUAL;
623 else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
624 hwe->pgfailback = -FAILBACK_IMMEDIATE;
626 hwe->pgfailback = atoi(buff);
634 hw_weight_handler(vector strvec)
636 struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
642 buff = set_value(strvec);
647 if (strlen(buff) == 10 &&
648 !strcmp(buff, "priorities"))
649 hwe->rr_weight = RR_WEIGHT_PRIO;
657 hw_no_path_retry_handler(vector strvec)
659 struct hwentry *hwe = VECTOR_LAST_SLOT(conf->hwtable);
665 buff = set_value(strvec);
669 if ((strlen(buff) == 4 && !strcmp(buff, "fail")) ||
670 (strlen(buff) == 1 && !strcmp(buff, "0")))
671 hwe->no_path_retry = NO_PATH_RETRY_FAIL;
672 else if (strlen(buff) == 5 && !strcmp(buff, "queue"))
673 hwe->no_path_retry = NO_PATH_RETRY_QUEUE;
674 else if ((hwe->no_path_retry = atoi(buff)) < 1)
675 hwe->no_path_retry = NO_PATH_RETRY_UNDEF;
682 hw_minio_handler(vector strvec)
684 struct hwentry *hwe = VECTOR_LAST_SLOT(conf->hwtable);
690 buff = set_value(strvec);
695 hwe->minio = atoi(buff);
702 hw_pg_timeout_handler(vector strvec)
705 struct hwentry *hwe = VECTOR_LAST_SLOT(conf->hwtable);
711 buff = set_value(strvec);
716 if (strlen(buff) == 4 && !strcmp(buff, "none"))
717 hwe->pg_timeout = -PGTIMEOUT_NONE;
718 else if (sscanf(buff, "%d", &pg_timeout) == 1 && pg_timeout >= 0) {
720 hwe->pg_timeout = -PGTIMEOUT_NONE;
722 hwe->pg_timeout = pg_timeout;
725 hwe->pg_timeout = PGTIMEOUT_UNDEF;
732 * multipaths block handlers
735 multipaths_handler(vector strvec)
737 conf->mptable = vector_alloc();
746 multipath_handler(vector strvec)
748 struct mpentry * mpe;
750 mpe = (struct mpentry *)MALLOC(sizeof(struct mpentry));
755 if (!vector_alloc_slot(conf->mptable)) {
759 vector_set_slot(conf->mptable, mpe);
765 wwid_handler(vector strvec)
767 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
772 mpe->wwid = set_value(strvec);
781 alias_handler(vector strvec)
783 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
788 mpe->alias = set_value(strvec);
797 mp_pgpolicy_handler(vector strvec)
800 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
805 buff = set_value(strvec);
810 mpe->pgpolicy = get_pgpolicy_id(buff);
817 mp_selector_handler(vector strvec)
819 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
824 mpe->selector = set_value(strvec);
833 mp_failback_handler(vector strvec)
835 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
841 buff = set_value(strvec);
843 if (strlen(buff) == 6 && !strcmp(buff, "manual"))
844 mpe->pgfailback = -FAILBACK_MANUAL;
845 else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
846 mpe->pgfailback = -FAILBACK_IMMEDIATE;
848 mpe->pgfailback = atoi(buff);
856 mp_weight_handler(vector strvec)
858 struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);
864 buff = set_value(strvec);
869 if (strlen(buff) == 10 &&
870 !strcmp(buff, "priorities"))
871 mpe->rr_weight = RR_WEIGHT_PRIO;
879 mp_no_path_retry_handler(vector strvec)
881 struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
887 buff = set_value(strvec);
891 if ((strlen(buff) == 4 && !strcmp(buff, "fail")) ||
892 (strlen(buff) == 1 && !strcmp(buff, "0")))
893 mpe->no_path_retry = NO_PATH_RETRY_FAIL;
894 else if (strlen(buff) == 5 && !strcmp(buff, "queue"))
895 mpe->no_path_retry = NO_PATH_RETRY_QUEUE;
896 else if ((mpe->no_path_retry = atoi(buff)) < 1)
897 mpe->no_path_retry = NO_PATH_RETRY_UNDEF;
904 mp_minio_handler(vector strvec)
906 struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
912 buff = set_value(strvec);
917 mpe->minio = atoi(buff);
924 mp_pg_timeout_handler(vector strvec)
927 struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
933 buff = set_value(strvec);
937 if (strlen(buff) == 4 && !strcmp(buff, "none"))
938 mpe->pg_timeout = -PGTIMEOUT_NONE;
939 else if (sscanf(buff, "%d", &pg_timeout) == 1 && pg_timeout >= 0) {
941 mpe->pg_timeout = -PGTIMEOUT_NONE;
943 mpe->pg_timeout = pg_timeout;
946 mpe->pg_timeout = PGTIMEOUT_UNDEF;
953 * config file keywords printing
956 snprint_mp_wwid (char * buff, int len, void * data)
958 struct mpentry * mpe = (struct mpentry *)data;
960 return snprintf(buff, len, "%s", mpe->wwid);
964 snprint_mp_alias (char * buff, int len, void * data)
966 struct mpentry * mpe = (struct mpentry *)data;
971 if (conf->user_friendly_names &&
972 (strlen(mpe->alias) == strlen("mpath")) &&
973 !strcmp(mpe->alias, "mpath"))
976 return snprintf(buff, len, "%s", mpe->alias);
980 snprint_mp_path_grouping_policy (char * buff, int len, void * data)
982 struct mpentry * mpe = (struct mpentry *)data;
983 char str[POLICY_NAME_SIZE];
987 get_pgpolicy_name(str, POLICY_NAME_SIZE, mpe->pgpolicy);
989 return snprintf(buff, len, "%s", str);
993 snprint_mp_selector (char * buff, int len, void * data)
995 struct mpentry * mpe = (struct mpentry *)data;
1000 return snprintf(buff, len, "%s", mpe->selector);
1004 snprint_mp_failback (char * buff, int len, void * data)
1006 struct mpentry * mpe = (struct mpentry *)data;
1008 if (!mpe->pgfailback)
1011 switch(mpe->pgfailback) {
1012 case FAILBACK_UNDEF:
1014 case -FAILBACK_MANUAL:
1015 return snprintf(buff, len, "manual");
1016 case -FAILBACK_IMMEDIATE:
1017 return snprintf(buff, len, "immediate");
1019 return snprintf(buff, len, "%i", mpe->pgfailback);
1025 snprint_mp_rr_weight (char * buff, int len, void * data)
1027 struct mpentry * mpe = (struct mpentry *)data;
1029 if (!mpe->rr_weight)
1031 if (mpe->rr_weight == RR_WEIGHT_PRIO)
1032 return snprintf(buff, len, "priorities");
1038 snprint_mp_no_path_retry (char * buff, int len, void * data)
1040 struct mpentry * mpe = (struct mpentry *)data;
1042 if (!mpe->no_path_retry)
1045 switch(mpe->no_path_retry) {
1046 case NO_PATH_RETRY_UNDEF:
1048 case NO_PATH_RETRY_FAIL:
1049 return snprintf(buff, len, "fail");
1050 case NO_PATH_RETRY_QUEUE:
1051 return snprintf(buff, len, "queue");
1053 return snprintf(buff, len, "%i",
1054 mpe->no_path_retry);
1060 snprint_mp_rr_min_io (char * buff, int len, void * data)
1062 struct mpentry * mpe = (struct mpentry *)data;
1067 return snprintf(buff, len, "%u", mpe->minio);
1071 snprint_mp_pg_timeout (char * buff, int len, void * data)
1073 struct mpentry * mpe = (struct mpentry *)data;
1075 switch (mpe->pg_timeout) {
1076 case PGTIMEOUT_UNDEF:
1078 case -PGTIMEOUT_NONE:
1079 return snprintf(buff, len, "none");
1081 return snprintf(buff, len, "%i", mpe->pg_timeout);
1087 snprint_hw_vendor (char * buff, int len, void * data)
1089 struct hwentry * hwe = (struct hwentry *)data;
1094 return snprintf(buff, len, "\"%s\"", hwe->vendor);
1098 snprint_hw_product (char * buff, int len, void * data)
1100 struct hwentry * hwe = (struct hwentry *)data;
1105 return snprintf(buff, len, "\"%s\"", hwe->product);
1109 snprint_hw_bl_product (char * buff, int len, void * data)
1111 struct hwentry * hwe = (struct hwentry *)data;
1113 if (!hwe->bl_product)
1116 return snprintf(buff, len, "\"%s\"", hwe->bl_product);
1120 snprint_hw_getuid_callout (char * buff, int len, void * data)
1122 struct hwentry * hwe = (struct hwentry *)data;
1126 if (strlen(hwe->getuid) == strlen(conf->getuid) &&
1127 !strcmp(hwe->getuid, conf->getuid))
1130 return snprintf(buff, len, "\"%s\"", hwe->getuid);
1134 snprint_hw_prio (char * buff, int len, void * data)
1136 struct hwentry * hwe = (struct hwentry *)data;
1140 if (hwe->prio == conf->prio)
1143 return snprintf(buff, len, "%s", prio_name(hwe->prio));
1147 snprint_hw_features (char * buff, int len, void * data)
1149 struct hwentry * hwe = (struct hwentry *)data;
1153 if (strlen(hwe->features) == strlen(conf->features) &&
1154 !strcmp(hwe->features, conf->features))
1157 return snprintf(buff, len, "\"%s\"", hwe->features);
1161 snprint_hw_hardware_handler (char * buff, int len, void * data)
1163 struct hwentry * hwe = (struct hwentry *)data;
1165 if (!hwe->hwhandler)
1167 if (strlen(hwe->hwhandler) == strlen(conf->hwhandler) &&
1168 !strcmp(hwe->hwhandler, conf->hwhandler))
1171 return snprintf(buff, len, "\"%s\"", hwe->hwhandler);
1175 snprint_hw_selector (char * buff, int len, void * data)
1177 struct hwentry * hwe = (struct hwentry *)data;
1181 if (strlen(hwe->selector) == strlen(conf->selector) &&
1182 !strcmp(hwe->selector, conf->selector))
1185 return snprintf(buff, len, "%s", hwe->selector);
1189 snprint_hw_path_grouping_policy (char * buff, int len, void * data)
1191 struct hwentry * hwe = (struct hwentry *)data;
1193 char str[POLICY_NAME_SIZE];
1197 if (hwe->pgpolicy == conf->pgpolicy)
1200 get_pgpolicy_name(str, POLICY_NAME_SIZE, hwe->pgpolicy);
1202 return snprintf(buff, len, "%s", str);
1206 snprint_hw_failback (char * buff, int len, void * data)
1208 struct hwentry * hwe = (struct hwentry *)data;
1210 if (!hwe->pgfailback)
1212 if (hwe->pgfailback == conf->pgfailback)
1215 switch(hwe->pgfailback) {
1216 case FAILBACK_UNDEF:
1218 case -FAILBACK_MANUAL:
1219 return snprintf(buff, len, "manual");
1220 case -FAILBACK_IMMEDIATE:
1221 return snprintf(buff, len, "immediate");
1223 return snprintf(buff, len, "%i", hwe->pgfailback);
1229 snprint_hw_rr_weight (char * buff, int len, void * data)
1231 struct hwentry * hwe = (struct hwentry *)data;
1233 if (!hwe->rr_weight)
1235 if (hwe->rr_weight == conf->rr_weight)
1237 if (hwe->rr_weight == RR_WEIGHT_PRIO)
1238 return snprintf(buff, len, "priorities");
1244 snprint_hw_no_path_retry (char * buff, int len, void * data)
1246 struct hwentry * hwe = (struct hwentry *)data;
1248 if (!hwe->no_path_retry)
1250 if (hwe->no_path_retry == conf->no_path_retry)
1253 switch(hwe->no_path_retry) {
1254 case NO_PATH_RETRY_UNDEF:
1256 case NO_PATH_RETRY_FAIL:
1257 return snprintf(buff, len, "fail");
1258 case NO_PATH_RETRY_QUEUE:
1259 return snprintf(buff, len, "queue");
1261 return snprintf(buff, len, "%i",
1262 hwe->no_path_retry);
1268 snprint_hw_rr_min_io (char * buff, int len, void * data)
1270 struct hwentry * hwe = (struct hwentry *)data;
1274 if (hwe->minio == conf->minio)
1277 return snprintf(buff, len, "%u", hwe->minio);
1281 snprint_hw_pg_timeout (char * buff, int len, void * data)
1283 struct hwentry * hwe = (struct hwentry *)data;
1285 if (!hwe->pg_timeout)
1287 if (hwe->pg_timeout == conf->pg_timeout)
1290 switch (hwe->pg_timeout) {
1291 case PGTIMEOUT_UNDEF:
1293 case -PGTIMEOUT_NONE:
1294 return snprintf(buff, len, "none");
1296 return snprintf(buff, len, "%i", hwe->pg_timeout);
1302 snprint_hw_path_checker (char * buff, int len, void * data)
1304 struct hwentry * hwe = (struct hwentry *)data;
1306 if (!hwe->checker_name)
1308 if (!strcmp(hwe->checker_name, conf->checker_name))
1311 return snprintf(buff, len, "%s", hwe->checker_name);
1315 snprint_def_polling_interval (char * buff, int len, void * data)
1317 if (conf->checkint == DEFAULT_CHECKINT)
1319 return snprintf(buff, len, "%i", conf->checkint);
1323 snprint_def_udev_dir (char * buff, int len, void * data)
1325 if (!conf->udev_dir)
1327 if (strlen(DEFAULT_UDEVDIR) == strlen(conf->udev_dir) &&
1328 !strcmp(conf->udev_dir, DEFAULT_UDEVDIR))
1331 return snprintf(buff, len, "\"%s\"", conf->udev_dir);
1335 snprint_def_multipath_dir (char * buff, int len, void * data)
1337 if (!conf->udev_dir)
1339 if (strlen(DEFAULT_MULTIPATHDIR) == strlen(conf->multipath_dir) &&
1340 !strcmp(conf->multipath_dir, DEFAULT_MULTIPATHDIR))
1343 return snprintf(buff, len, "\"%s\"", conf->multipath_dir);
1347 snprint_def_selector (char * buff, int len, void * data)
1349 if (!conf->selector)
1351 if (strlen(conf->selector) == strlen(DEFAULT_SELECTOR) &&
1352 !strcmp(conf->selector, DEFAULT_SELECTOR))
1355 return snprintf(buff, len, "%s", conf->selector);
1359 snprint_def_path_grouping_policy (char * buff, int len, void * data)
1361 char str[POLICY_NAME_SIZE];
1363 if (!conf->pgpolicy)
1365 if (conf->pgpolicy == DEFAULT_PGPOLICY)
1368 get_pgpolicy_name(str, POLICY_NAME_SIZE, conf->pgpolicy);
1370 return snprintf(buff, len, "%s", str);
1374 snprint_def_getuid_callout (char * buff, int len, void * data)
1378 if (strlen(conf->getuid) == strlen(DEFAULT_GETUID) &&
1379 !strcmp(conf->getuid, DEFAULT_GETUID))
1382 return snprintf(buff, len, "\"%s\"", conf->getuid);
1386 snprint_def_prio (char * buff, int len, void * data)
1391 return snprintf(buff, len, "%s", prio_name(conf->prio));
1395 snprint_def_features (char * buff, int len, void * data)
1397 if (!conf->features)
1399 if (strlen(conf->features) == strlen(DEFAULT_FEATURES) &&
1400 !strcmp(conf->features, DEFAULT_FEATURES))
1403 return snprintf(buff, len, "\"%s\"", conf->features);
1407 snprint_def_path_checker (char * buff, int len, void * data)
1409 if (!conf->checker_name)
1411 if (strlen(conf->checker_name) == strlen(DEFAULT_CHECKER) &&
1412 !strcmp(conf->checker_name, DEFAULT_CHECKER))
1415 return snprintf(buff, len, "%s", conf->checker_name);
1419 snprint_def_failback (char * buff, int len, void * data)
1421 if (!conf->pgfailback)
1423 if (conf->pgfailback == DEFAULT_FAILBACK)
1426 switch(conf->pgfailback) {
1427 case FAILBACK_UNDEF:
1429 case -FAILBACK_MANUAL:
1430 return snprintf(buff, len, "manual");
1431 case -FAILBACK_IMMEDIATE:
1432 return snprintf(buff, len, "immediate");
1434 return snprintf(buff, len, "%i", conf->pgfailback);
1440 snprint_def_rr_min_io (char * buff, int len, void * data)
1444 if (conf->minio == DEFAULT_MINIO)
1447 return snprintf(buff, len, "%u", conf->minio);
1451 snprint_max_fds (char * buff, int len, void * data)
1456 if (conf->max_fds < 0)
1457 return snprintf(buff, len, "unlimited");
1458 return snprintf(buff, len, "%d", conf->max_fds);
1462 snprint_def_rr_weight (char * buff, int len, void * data)
1464 if (!conf->rr_weight)
1466 if (conf->rr_weight == DEFAULT_RR_WEIGHT)
1468 if (conf->rr_weight == RR_WEIGHT_PRIO)
1469 return snprintf(buff, len, "priorities");
1475 snprint_def_no_path_retry (char * buff, int len, void * data)
1477 if (conf->no_path_retry == DEFAULT_NO_PATH_RETRY)
1480 switch(conf->no_path_retry) {
1481 case NO_PATH_RETRY_UNDEF:
1483 case NO_PATH_RETRY_FAIL:
1484 return snprintf(buff, len, "fail");
1485 case NO_PATH_RETRY_QUEUE:
1486 return snprintf(buff, len, "queue");
1488 return snprintf(buff, len, "%i",
1489 conf->no_path_retry);
1495 snprint_def_pg_timeout (char * buff, int len, void * data)
1497 if (conf->pg_timeout == DEFAULT_PGTIMEOUT)
1500 switch (conf->pg_timeout) {
1501 case PGTIMEOUT_UNDEF:
1503 case -PGTIMEOUT_NONE:
1504 return snprintf(buff, len, "none");
1506 return snprintf(buff, len, "%i", conf->pg_timeout);
1512 snprint_def_user_friendly_names (char * buff, int len, void * data)
1514 if (conf->user_friendly_names == DEFAULT_USER_FRIENDLY_NAMES)
1516 if (!conf->user_friendly_names)
1517 return snprintf(buff, len, "no");
1519 return snprintf(buff, len, "yes");
1523 snprint_ble_simple (char * buff, int len, void * data)
1525 struct blentry * ble = (struct blentry *)data;
1527 return snprintf(buff, len, "\"%s\"", ble->str);
1531 snprint_bled_vendor (char * buff, int len, void * data)
1533 struct blentry_device * bled = (struct blentry_device *)data;
1535 return snprintf(buff, len, "\"%s\"", bled->vendor);
1539 snprint_bled_product (char * buff, int len, void * data)
1541 struct blentry_device * bled = (struct blentry_device *)data;
1543 return snprintf(buff, len, "\"%s\"", bled->product);
1546 #define __deprecated
1551 install_keyword_root("defaults", NULL);
1552 install_keyword("polling_interval", &polling_interval_handler, &snprint_def_polling_interval);
1553 install_keyword("udev_dir", &udev_dir_handler, &snprint_def_udev_dir);
1554 install_keyword("multipath_dir", &multipath_dir_handler, &snprint_def_multipath_dir);
1555 install_keyword("selector", &def_selector_handler, &snprint_def_selector);
1556 install_keyword("path_grouping_policy", &def_pgpolicy_handler, &snprint_def_path_grouping_policy);
1557 install_keyword("getuid_callout", &def_getuid_callout_handler, &snprint_def_getuid_callout);
1558 install_keyword("prio", &def_prio_handler, &snprint_def_prio);
1559 install_keyword("features", &def_features_handler, &snprint_def_features);
1560 install_keyword("path_checker", &def_path_checker_handler, &snprint_def_path_checker);
1561 install_keyword("checker", &def_path_checker_handler, &snprint_def_path_checker);
1562 install_keyword("failback", &default_failback_handler, &snprint_def_failback);
1563 install_keyword("rr_min_io", &def_minio_handler, &snprint_def_rr_min_io);
1564 install_keyword("max_fds", &max_fds_handler, &snprint_max_fds);
1565 install_keyword("rr_weight", &def_weight_handler, &snprint_def_rr_weight);
1566 install_keyword("no_path_retry", &def_no_path_retry_handler, &snprint_def_no_path_retry);
1567 install_keyword("pg_timeout", &def_pg_timeout_handler, &snprint_def_pg_timeout);
1568 install_keyword("user_friendly_names", &names_handler, &snprint_def_user_friendly_names);
1569 __deprecated install_keyword("default_selector", &def_selector_handler, NULL);
1570 __deprecated install_keyword("default_path_grouping_policy", &def_pgpolicy_handler, NULL);
1571 __deprecated install_keyword("default_getuid_callout", &def_getuid_callout_handler, NULL);
1572 __deprecated install_keyword("default_features", &def_features_handler, NULL);
1573 __deprecated install_keyword("default_path_checker", &def_path_checker_handler, NULL);
1575 install_keyword_root("blacklist", &blacklist_handler);
1576 install_keyword("devnode", &ble_devnode_handler, &snprint_ble_simple);
1577 install_keyword("wwid", &ble_wwid_handler, &snprint_ble_simple);
1578 install_keyword("device", &ble_device_handler, NULL);
1580 install_keyword("vendor", &ble_vendor_handler, &snprint_bled_vendor);
1581 install_keyword("product", &ble_product_handler, &snprint_bled_product);
1582 install_sublevel_end();
1583 install_keyword_root("blacklist_exceptions", &blacklist_exceptions_handler);
1584 install_keyword("devnode", &ble_except_devnode_handler, &snprint_ble_simple);
1585 install_keyword("wwid", &ble_except_wwid_handler, &snprint_ble_simple);
1586 install_keyword("device", &ble_except_device_handler, NULL);
1588 install_keyword("vendor", &ble_except_vendor_handler, &snprint_bled_vendor);
1589 install_keyword("product", &ble_except_product_handler, &snprint_bled_product);
1590 install_sublevel_end();
1593 __deprecated install_keyword_root("devnode_blacklist", &blacklist_handler);
1594 __deprecated install_keyword("devnode", &ble_devnode_handler, &snprint_ble_simple);
1595 __deprecated install_keyword("wwid", &ble_wwid_handler, &snprint_ble_simple);
1596 __deprecated install_keyword("device", &ble_device_handler, NULL);
1597 __deprecated install_sublevel();
1598 __deprecated install_keyword("vendor", &ble_vendor_handler, &snprint_bled_vendor);
1599 __deprecated install_keyword("product", &ble_product_handler, &snprint_bled_product);
1600 __deprecated install_sublevel_end();
1603 install_keyword_root("devices", &devices_handler);
1604 install_keyword("device", &device_handler, NULL);
1606 install_keyword("vendor", &vendor_handler, &snprint_hw_vendor);
1607 install_keyword("product", &product_handler, &snprint_hw_product);
1608 install_keyword("product_blacklist", &bl_product_handler, &snprint_hw_bl_product);
1609 install_keyword("path_grouping_policy", &hw_pgpolicy_handler, &snprint_hw_path_grouping_policy);
1610 install_keyword("getuid_callout", &hw_getuid_callout_handler, &snprint_hw_getuid_callout);
1611 install_keyword("path_selector", &hw_selector_handler, &snprint_hw_selector);
1612 install_keyword("path_checker", &hw_path_checker_handler, &snprint_hw_path_checker);
1613 install_keyword("checker", &hw_path_checker_handler, &snprint_hw_path_checker);
1614 install_keyword("features", &hw_features_handler, &snprint_hw_features);
1615 install_keyword("hardware_handler", &hw_handler_handler, &snprint_hw_hardware_handler);
1616 install_keyword("prio", &hw_prio_handler, &snprint_hw_prio);
1617 install_keyword("failback", &hw_failback_handler, &snprint_hw_failback);
1618 install_keyword("rr_weight", &hw_weight_handler, &snprint_hw_rr_weight);
1619 install_keyword("no_path_retry", &hw_no_path_retry_handler, &snprint_hw_no_path_retry);
1620 install_keyword("rr_min_io", &hw_minio_handler, &snprint_hw_rr_min_io);
1621 install_keyword("pg_timeout", &hw_pg_timeout_handler, &snprint_hw_pg_timeout);
1622 install_sublevel_end();
1624 install_keyword_root("multipaths", &multipaths_handler);
1625 install_keyword("multipath", &multipath_handler, NULL);
1627 install_keyword("wwid", &wwid_handler, &snprint_mp_wwid);
1628 install_keyword("alias", &alias_handler, &snprint_mp_alias);
1629 install_keyword("path_grouping_policy", &mp_pgpolicy_handler, &snprint_mp_path_grouping_policy);
1630 install_keyword("path_selector", &mp_selector_handler, &snprint_mp_selector);
1631 install_keyword("failback", &mp_failback_handler, &snprint_mp_failback);
1632 install_keyword("rr_weight", &mp_weight_handler, &snprint_mp_rr_weight);
1633 install_keyword("no_path_retry", &mp_no_path_retry_handler, &snprint_mp_no_path_retry);
1634 install_keyword("rr_min_io", &mp_minio_handler, &snprint_mp_rr_min_io);
1635 install_keyword("pg_timeout", &mp_pg_timeout_handler, &snprint_mp_pg_timeout);
1636 install_sublevel_end();