Change tr_mon_ prefix to mon_, no functional changes
[trust_router.git] / include / mon_internal.h
1 /*
2  * Copyright (c) 2018, JANET(UK)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. Neither the name of JANET(UK) nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34
35
36 #ifndef TRUST_ROUTER_MON_REQ_H
37 #define TRUST_ROUTER_MON_REQ_H
38
39 #include <talloc.h>
40 #include <jansson.h>
41 #include <gmodule.h>
42 #include <tr_name_internal.h>
43
44 /* Typedefs */
45 typedef struct mon_req MON_REQ;
46 typedef struct mon_resp MON_RESP;
47
48 typedef enum mon_cmd MON_CMD;
49 typedef enum mon_resp_code MON_RESP_CODE;
50
51 typedef struct mon_opt MON_OPT;
52 typedef enum mon_opt_type MON_OPT_TYPE;
53
54 typedef enum mon_rc MON_RC;
55
56
57 /* Struct and enum definitions */
58 enum mon_rc {
59   MON_SUCCESS=0,
60   MON_ERROR, /* generic error */
61   MON_BADARG, /* problem with the arguments */
62   MON_NOMEM, /* out of memory */
63   MON_NOPARSE, /* parsing failed */
64 };
65
66 enum mon_cmd {
67   MON_CMD_UNKNOWN=0,
68   MON_CMD_RECONFIGURE,
69   MON_CMD_SHOW
70 };
71
72 /* These should be explicitly numbered because they form part of the public API */
73 enum mon_resp_code {
74   MON_RESP_SUCCESS=0,
75   MON_RESP_ERROR=1, // generic error
76 };
77
78 enum mon_opt_type {
79   OPT_TYPE_UNKNOWN=0,
80
81   // System information
82   OPT_TYPE_SHOW_VERSION,
83   OPT_TYPE_SHOW_SERIAL,
84
85   // System statistics
86   OPT_TYPE_SHOW_UPTIME,
87   OPT_TYPE_SHOW_TID_REQ_COUNT,
88   OPT_TYPE_SHOW_TID_REQ_PENDING,
89
90   // Dynamic trust router state
91   OPT_TYPE_SHOW_ROUTES,
92   OPT_TYPE_SHOW_COMMUNITIES
93 };
94
95 struct mon_opt {
96   MON_OPT_TYPE type;
97 };
98
99 struct mon_req {
100   MON_CMD command;
101   GArray *options;
102 };
103
104 struct mon_resp {
105   MON_REQ *req; // request this responds to
106   MON_RESP_CODE code;
107   TR_NAME *message;
108   json_t *payload;
109 };
110
111 /* Prototypes */
112 /* tr_mon.c */
113 const char *mon_cmd_to_string(MON_CMD cmd);
114 MON_CMD mon_cmd_from_string(const char *s);
115 const char *mon_opt_type_to_string(MON_OPT_TYPE opt_type);
116 MON_OPT_TYPE mon_opt_type_from_string(const char *s);
117
118 /* mon_req.c */
119 MON_REQ *mon_req_new(TALLOC_CTX *mem_ctx, MON_CMD cmd);
120 void mon_req_free(MON_REQ *req);
121 MON_RC mon_req_add_option(MON_REQ *req, MON_OPT_TYPE opt_type);
122 size_t mon_req_opt_count(MON_REQ *req);
123 MON_OPT *mon_req_opt_index(MON_REQ *req, size_t index);
124
125 /* mon_req_encode.c */
126 json_t *mon_req_encode(MON_REQ *req);
127
128 /* mon_req_decode.c */
129 MON_REQ *mon_req_decode(TALLOC_CTX *mem_ctx, const char *req_json);
130
131 /* mon_resp.c */
132 MON_RESP *mon_resp_new(TALLOC_CTX *mem_ctx,
133                           MON_REQ *req,
134                           MON_RESP_CODE code,
135                           const char *msg,
136                           json_t *payload);
137 void mon_resp_free(MON_RESP *resp);
138
139 /* mon_resp_encode.c */
140 json_t *mon_resp_encode(MON_RESP *resp);
141
142 #endif //TRUST_ROUTER_MON_REQ_H