[build] legacy files update
[platform/upstream/multipath-tools.git] / multipathd / cli_handlers.c
1 /*
2  * Copyright (c) 2005 Christophe Varoqui
3  */
4 #include <memory.h>
5 #include <vector.h>
6 #include <structs.h>
7 #include <structs_vec.h>
8 #include <libdevmapper.h>
9 #include <devmapper.h>
10 #include <config.h>
11 #include <configure.h>
12 #include <blacklist.h>
13
14 #include "main.h"
15 #include "cli.h"
16
17 int
18 cli_list_paths (void * v, char ** reply, int * len, void * data)
19 {
20         struct vectors * vecs = (struct vectors *)data;
21
22         return show_paths(reply, len, vecs);
23 }
24
25 int
26 cli_list_maps (void * v, char ** reply, int * len, void * data)
27 {
28         struct vectors * vecs = (struct vectors *)data;
29
30         return show_maps(reply, len, vecs);
31 }
32
33 int
34 cli_add_path (void * v, char ** reply, int * len, void * data)
35 {
36         struct vectors * vecs = (struct vectors *)data;
37         char * param = get_keyparam(v, PATH);
38
39         if (blacklist(conf->blist, param)) {
40                 *reply = strdup("blacklisted");
41                 *len = strlen(*reply) + 1;
42                 return 0;
43         }
44         return uev_add_path(param, vecs);
45 }
46
47 int
48 cli_del_path (void * v, char ** reply, int * len, void * data)
49 {
50         struct vectors * vecs = (struct vectors *)data;
51         char * param = get_keyparam(v, PATH);
52
53         return uev_remove_path(param, vecs);
54 }
55
56 int
57 cli_add_map (void * v, char ** reply, int * len, void * data)
58 {
59         struct vectors * vecs = (struct vectors *)data;
60         char * param = get_keyparam(v, MAP);
61
62         return uev_add_map(param, vecs);
63 }
64
65 int
66 cli_del_map (void * v, char ** reply, int * len, void * data)
67 {
68         struct vectors * vecs = (struct vectors *)data;
69         char * param = get_keyparam(v, MAP);
70
71         return uev_remove_map(param, vecs);
72 }
73
74 int
75 cli_switch_group(void * v, char ** reply, int * len, void * data)
76 {
77         char * mapname = get_keyparam(v, MAP);
78         int groupnum = atoi(get_keyparam(v, GROUP));
79         
80         return dm_switchgroup(mapname, groupnum);
81 }
82
83 int
84 cli_dump_pathvec(void * v, char ** reply, int * len, void * data)
85 {
86         struct vectors * vecs = (struct vectors *)data;
87                         
88         return dump_pathvec(reply, len, vecs);
89 }
90
91 int
92 cli_reconfigure(void * v, char ** reply, int * len, void * data)
93 {
94         struct vectors * vecs = (struct vectors *)data;
95                         
96         return reconfigure(vecs);
97 }
98
99 int
100 cli_suspend(void * v, char ** reply, int * len, void * data)
101 {
102         struct vectors * vecs = (struct vectors *)data;
103         char * param = get_keyparam(v, MAP);
104         int r = dm_simplecmd(DM_DEVICE_SUSPEND, param);
105
106         if (!r) /* error */
107                 return 1;
108         
109         struct multipath * mpp = find_mp_by_alias(vecs->mpvec, param);
110
111         if (!mpp)
112                 return 1;
113         
114         dm_get_info(param, &mpp->dmi);
115         return 0;
116 }
117
118 int
119 cli_resume(void * v, char ** reply, int * len, void * data)
120 {
121         struct vectors * vecs = (struct vectors *)data;
122         char * param = get_keyparam(v, MAP);
123         int r = dm_simplecmd(DM_DEVICE_RESUME, param);
124
125         if (!r) /* error */
126                 return 1;
127         
128         struct multipath * mpp = find_mp_by_alias(vecs->mpvec, param);
129
130         if (!mpp)
131                 return 1;
132         
133         dm_get_info(param, &mpp->dmi);
134         return 0;
135 }
136
137 int
138 cli_reinstate(void * v, char ** reply, int * len, void * data)
139 {
140         struct vectors * vecs = (struct vectors *)data;
141         char * param = get_keyparam(v, PATH);
142         struct path * pp;
143         
144         pp = find_path_by_dev(vecs->pathvec, param);
145
146         if (!pp)
147                  pp = find_path_by_devt(vecs->pathvec, param);
148
149         if (!pp || !pp->mpp || !pp->mpp->alias)
150                 return 1;
151
152         return dm_reinstate_path(pp->mpp->alias, pp->dev_t);
153 }
154
155 int
156 cli_fail(void * v, char ** reply, int * len, void * data)
157 {
158         struct vectors * vecs = (struct vectors *)data;
159         char * param = get_keyparam(v, PATH);
160         struct path * pp;
161         
162         pp = find_path_by_dev(vecs->pathvec, param);
163
164         if (!pp)
165                  pp = find_path_by_devt(vecs->pathvec, param);
166
167         if (!pp || !pp->mpp || !pp->mpp->alias)
168                 return 1;
169
170         return dm_fail_path(pp->mpp->alias, pp->dev_t);
171 }