2aa19d57ee363b966db0eefe13e66e706ac8c8ff
[multipath-tools/.git] / multipathd / cli.h
1 #include <stdint.h>
2
3 enum {
4         __LIST,
5         __ADD,
6         __DEL,
7         __SWITCH,
8         __SUSPEND,
9         __RESUME,
10         __REINSTATE,
11         __FAIL,
12         __RESIZE,
13         __RESET,
14         __RELOAD,
15         __FORCEQ,
16         __DISABLEQ,
17         __RESTOREQ,
18         __PATHS,
19         __MAPS,
20         __PATH,
21         __MAP,
22         __GROUP,
23         __RECONFIGURE,
24         __DAEMON,
25         __STATUS,
26         __STATS,
27         __TOPOLOGY,
28         __CONFIG,
29         __BLACKLIST,
30         __DEVICES,
31         __RAW,
32         __WILDCARDS,
33         __QUIT,
34         __SHUTDOWN,
35         __GETPRSTATUS,
36         __SETPRSTATUS,
37         __UNSETPRSTATUS,
38         __FMT,
39 };
40
41 #define LIST            (1 << __LIST)
42 #define ADD             (1 << __ADD)
43 #define DEL             (1 << __DEL)
44 #define SWITCH          (1 << __SWITCH)
45 #define SUSPEND         (1 << __SUSPEND)
46 #define RESUME          (1 << __RESUME)
47 #define REINSTATE       (1 << __REINSTATE)
48 #define FAIL            (1 << __FAIL)
49 #define RESIZE          (1 << __RESIZE)
50 #define RESET           (1 << __RESET)
51 #define RELOAD          (1 << __RELOAD)
52 #define FORCEQ          (1 << __FORCEQ)
53 #define DISABLEQ        (1 << __DISABLEQ)
54 #define RESTOREQ        (1 << __RESTOREQ)
55 #define PATHS           (1 << __PATHS)
56 #define MAPS            (1 << __MAPS)
57 #define PATH            (1 << __PATH)
58 #define MAP             (1 << __MAP)
59 #define GROUP           (1 << __GROUP)
60 #define RECONFIGURE     (1 << __RECONFIGURE)
61 #define DAEMON          (1 << __DAEMON)
62 #define STATUS          (1 << __STATUS)
63 #define STATS           (1 << __STATS)
64 #define TOPOLOGY        (1 << __TOPOLOGY)
65 #define CONFIG          (1 << __CONFIG)
66 #define BLACKLIST       (1 << __BLACKLIST)
67 #define DEVICES         (1 << __DEVICES)
68 #define RAW             (1 << __RAW)
69 #define COUNT           (1 << __COUNT)
70 #define WILDCARDS       (1 << __WILDCARDS)
71 #define QUIT            (1 << __QUIT)
72 #define SHUTDOWN        (1 << __SHUTDOWN)
73 #define GETPRSTATUS     (1ULL << __GETPRSTATUS)
74 #define SETPRSTATUS     (1ULL << __SETPRSTATUS)
75 #define UNSETPRSTATUS   (1ULL << __UNSETPRSTATUS)
76 #define FMT             (1ULL << __FMT)
77
78 #define INITIAL_REPLY_LEN       1200
79
80 #define REALLOC_REPLY(r, a, m)                                  \
81         do {                                                    \
82                 if ((a)) {                                      \
83                         char *tmp = (r);                        \
84                         (r) = REALLOC((r), (m) * 2);            \
85                         if ((r)) {                              \
86                                 memset((r) + (m), 0, (m));      \
87                                 (m) *= 2;                       \
88                         }                                       \
89                         else                                    \
90                                 free(tmp);                      \
91                 }                                               \
92         } while (0)
93
94 struct key {
95         char * str;
96         char * param;
97         uint64_t code;
98         int has_param;
99 };
100
101 struct handler {
102         uint64_t fingerprint;
103         int (*fn)(void *, char **, int *, void *);
104 };
105
106 int alloc_handlers (void);
107 int add_handler (uint64_t fp, int (*fn)(void *, char **, int *, void *));
108 int set_handler_callback (uint64_t fp, int (*fn)(void *, char **, int *, void *));
109 int parse_cmd (char * cmd, char ** reply, int * len, void *);
110 int load_keys (void);
111 char * get_keyparam (vector v, uint64_t code);
112 void free_keys (vector vec);
113 void free_handlers (void);
114 int cli_init (void);
115 void cli_exit(void);
116 char * key_generator (const char * str, int state);