2 * Copyright (c) 2005 Christophe Varoqui
7 #include <structs_vec.h>
8 #include <libdevmapper.h>
11 #include <configure.h>
12 #include <blacklist.h>
18 cli_list_paths (void * v, char ** reply, int * len, void * data)
20 struct vectors * vecs = (struct vectors *)data;
22 return show_paths(reply, len, vecs);
26 cli_list_maps (void * v, char ** reply, int * len, void * data)
28 struct vectors * vecs = (struct vectors *)data;
30 return show_maps(reply, len, vecs);
34 cli_add_path (void * v, char ** reply, int * len, void * data)
36 struct vectors * vecs = (struct vectors *)data;
37 char * param = get_keyparam(v, PATH);
39 if (blacklist(conf->blist, param)) {
40 *reply = strdup("blacklisted");
41 *len = strlen(*reply) + 1;
44 return uev_add_path(param, vecs);
48 cli_del_path (void * v, char ** reply, int * len, void * data)
50 struct vectors * vecs = (struct vectors *)data;
51 char * param = get_keyparam(v, PATH);
53 return uev_remove_path(param, vecs);
57 cli_add_map (void * v, char ** reply, int * len, void * data)
59 struct vectors * vecs = (struct vectors *)data;
60 char * param = get_keyparam(v, MAP);
62 return uev_add_map(param, vecs);
66 cli_del_map (void * v, char ** reply, int * len, void * data)
68 struct vectors * vecs = (struct vectors *)data;
69 char * param = get_keyparam(v, MAP);
71 return uev_remove_map(param, vecs);
75 cli_switch_group(void * v, char ** reply, int * len, void * data)
77 char * mapname = get_keyparam(v, MAP);
78 int groupnum = atoi(get_keyparam(v, GROUP));
80 return dm_switchgroup(mapname, groupnum);
84 cli_dump_pathvec(void * v, char ** reply, int * len, void * data)
86 struct vectors * vecs = (struct vectors *)data;
88 return dump_pathvec(reply, len, vecs);
92 cli_reconfigure(void * v, char ** reply, int * len, void * data)
94 struct vectors * vecs = (struct vectors *)data;
96 return reconfigure(vecs);
100 cli_suspend(void * v, char ** reply, int * len, void * data)
102 struct vectors * vecs = (struct vectors *)data;
103 char * param = get_keyparam(v, MAP);
104 int r = dm_simplecmd(DM_DEVICE_SUSPEND, param);
109 struct multipath * mpp = find_mp_by_alias(vecs->mpvec, param);
114 dm_get_info(param, &mpp->dmi);
119 cli_resume(void * v, char ** reply, int * len, void * data)
121 struct vectors * vecs = (struct vectors *)data;
122 char * param = get_keyparam(v, MAP);
123 int r = dm_simplecmd(DM_DEVICE_RESUME, param);
128 struct multipath * mpp = find_mp_by_alias(vecs->mpvec, param);
133 dm_get_info(param, &mpp->dmi);
138 cli_reinstate(void * v, char ** reply, int * len, void * data)
140 struct vectors * vecs = (struct vectors *)data;
141 char * param = get_keyparam(v, PATH);
144 pp = find_path_by_dev(vecs->pathvec, param);
147 pp = find_path_by_devt(vecs->pathvec, param);
149 if (!pp || !pp->mpp || !pp->mpp->alias)
152 return dm_reinstate_path(pp->mpp->alias, pp->dev_t);
156 cli_fail(void * v, char ** reply, int * len, void * data)
158 struct vectors * vecs = (struct vectors *)data;
159 char * param = get_keyparam(v, PATH);
162 pp = find_path_by_dev(vecs->pathvec, param);
165 pp = find_path_by_devt(vecs->pathvec, param);
167 if (!pp || !pp->mpp || !pp->mpp->alias)
170 return dm_fail_path(pp->mpp->alias, pp->dev_t);