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