blob: 30651ba95a83ef46acf1c404a9c54e65e94f6d45 [file] [log] [blame]
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +01001/* Extra vty handling for the SS7 code */
2/*
3 * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org>
4 * (C) 2010-2011 by On-Waves
5 * All Rights Reserved
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#include <mgcp_ss7.h>
23#include <ss7_vty.h>
24
25#include <mgcp/mgcp.h>
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +020026#include <mgcp/mgcp_internal.h>
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010027
28#include <stdlib.h>
29
30extern struct mgcp_config *g_cfg;
31
Holger Hans Peter Freytherec84e3c2011-03-02 22:40:31 +010032enum node_type mgcp_go_parent(struct vty *vty);
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010033static struct vty_app_info vty_info = {
34 .name = "mgcp_ss7",
35 .version = "0.0.1",
Holger Hans Peter Freytherec84e3c2011-03-02 22:40:31 +010036 .go_parent_cb = mgcp_go_parent,
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010037};
38
39void logging_vty_add_cmds(void);
40
41DEFUN(cfg_mgcp_configure, cfg_mgcp_configure_cmd,
42 "configure-trunks (0|1)",
Holger Hans Peter Freytherb806c142011-03-25 10:46:52 +010043 "Reconfigure the Trunk Configuration\n" "Keep\n" "Reconfigure\n")
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010044{
45 g_cfg->configure_trunks = atoi(argv[0]);
46 return CMD_SUCCESS;
47}
48
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020049DEFUN(cfg_vtrunk_target_trunk, cfg_vtrunk_target_trunk_cmd,
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010050 "target-trunk-start <1-24>",
51 "Map the virtual trunk to start here\n" "Trunk Nr\n")
52{
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020053 struct mgcp_trunk_config *trunk = vty->index;
54 trunk->target_trunk_start = atoi(argv[0]);
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010055 return CMD_SUCCESS;
56}
57
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +020058#define ENDP_BLOCK_STR "Block the Endpoint/Timeslot for Audio\n"
59
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020060DEFUN(cfg_vtrunk_block_defaults, cfg_vtrunk_block_defaults_cmd,
Holger Hans Peter Freyther42e44a92011-09-14 02:03:13 +020061 "block-defaults",
62 "Block the default endpoints 0x0 and 0x1F\n")
63{
64 int i;
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020065 struct mgcp_trunk_config *trunk = vty->index;
Holger Hans Peter Freyther42e44a92011-09-14 02:03:13 +020066
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020067 for (i = 1; i < trunk->number_endpoints; ++i) {
Holger Hans Peter Freyther42e44a92011-09-14 02:03:13 +020068 int multiplex, timeslot;
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +020069 struct mgcp_endpoint *endp = &trunk->endpoints[i];
Holger Hans Peter Freyther42e44a92011-09-14 02:03:13 +020070 mgcp_endpoint_to_timeslot(ENDPOINT_NUMBER(endp), &multiplex, &timeslot);
71
72 if (timeslot == 0x0 || timeslot == 0x1F)
73 endp->blocked = 1;
74 }
75
76 return CMD_SUCCESS;
77}
78
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +010079DEFUN(cfg_trunk_vad, cfg_trunk_vad_cmd,
80 "vad (enabled|disabled)",
81 "Enable the Voice Activity Detection\n"
82 "Enable\n" "Disable\n")
83{
84 struct mgcp_trunk_config *trunk = vty->index;
85
86 if (argv[0][0] == 'e')
87 trunk->vad_enabled = 1;
88 else
89 trunk->vad_enabled = 0;
90 return CMD_SUCCESS;
91}
92
93DEFUN(cfg_trunk_realloc, cfg_trunk_realloc_cmd,
94 "force-realloc (0|1)",
95 "Force the reallocation of an endpoint\n"
96 "Disable\n" "Enable\n")
97{
98 struct mgcp_trunk_config *trunk = vty->index;
99
100 trunk->force_realloc = atoi(argv[0]);
101 return CMD_SUCCESS;
102}
103
104DEFUN(cfg_trunk_inp_dig_gain, cfg_trunk_inp_dig_gain_cmd,
105 "input-digital-gain <0-62>",
106 "Static Digital Input Gain\n"
107 "Gain value")
108{
109 struct mgcp_trunk_config *trunk = vty->index;
110
111 trunk->digital_inp_gain = atoi(argv[0]);
112 return CMD_SUCCESS;
113}
114
115DEFUN(cfg_trunk_out_dig_gain, cfg_trunk_out_dig_gain_cmd,
Holger Hans Peter Freytherd3b8d5f2011-09-14 21:45:11 +0200116 "output-digital-gain <0-62>",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100117 "Static Digital Output Gain\n"
118 "Gain value")
119{
120 struct mgcp_trunk_config *trunk = vty->index;
121
122 trunk->digital_out_gain = atoi(argv[0]);
123 return CMD_SUCCESS;
124}
125
126DEFUN(cfg_trunk_upstr_agc, cfg_trunk_upstr_agc_cmd,
127 "upstream-automatic-gain (0|1)",
128 "Enable automatic gain control on upstream\n"
129 "Disable\n" "Enabled\n")
130{
131 struct mgcp_trunk_config *trunk = vty->index;
132
133 trunk->upstr_agc_enbl = argv[0][0] == '1';
134 return CMD_SUCCESS;
135}
136
137DEFUN(cfg_trunk_upstr_adp, cfg_trunk_upstr_adp_cmd,
Holger Hans Peter Freytherd3b8d5f2011-09-14 21:45:11 +0200138 "upstream-adaptation-rate <1-128>",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100139 "Set the adaption rate in (dB/sec) * 10\n"
140 "Range\n")
141{
142 struct mgcp_trunk_config *trunk = vty->index;
143
144 trunk->upstr_adp_rate = atoi(argv[0]);
145 return CMD_SUCCESS;
146}
147
148DEFUN(cfg_trunk_upstr_max_gain, cfg_trunk_upstr_max_gain_cmd,
149 "upstream-max-applied-gain <0-49>",
150 "Maximum applied gain from -31db to 18db\n"
151 "Gain level\n")
152{
153 struct mgcp_trunk_config *trunk = vty->index;
154
155 trunk->upstr_max_gain = atoi(argv[0]);
156 return CMD_SUCCESS;
157}
158
159DEFUN(cfg_trunk_upstr_target, cfg_trunk_upstr_target_cmd,
160 "upstream-target-level <6-37>",
161 "Set the desired level in db\n"
162 "Desired lievel\n")
163{
164 struct mgcp_trunk_config *trunk = vty->index;
165
166 trunk->upstr_target_lvl = atoi(argv[0]);
167 return CMD_SUCCESS;
168}
169
170DEFUN(cfg_trunk_dwnstr_agc, cfg_trunk_dwnstr_agc_cmd,
171 "downstream-automatic-gain (0|1)",
172 "Enable automatic gain control on downstream\n"
173 "Disable\n" "Enabled\n")
174{
175 struct mgcp_trunk_config *trunk = vty->index;
176
177 trunk->dwnstr_agc_enbl = argv[0][0] == '1';
178 return CMD_SUCCESS;
179}
180
181DEFUN(cfg_trunk_dwnstr_adp, cfg_trunk_dwnstr_adp_cmd,
182 "downstream-adaptation-rate <1-128>",
183 "Set the adaption rate in (dB/sec) * 10\n"
184 "Range\n")
185{
186 struct mgcp_trunk_config *trunk = vty->index;
187
188 trunk->dwnstr_adp_rate = atoi(argv[0]);
189 return CMD_SUCCESS;
190}
191
192DEFUN(cfg_trunk_dwnstr_max_gain, cfg_trunk_dwnstr_max_gain_cmd,
193 "downstream-max-applied-gain <0-49>",
194 "Maximum applied gain from -31db to 18db\n"
195 "Gain level\n")
196{
197 struct mgcp_trunk_config *trunk = vty->index;
198
199 trunk->dwnstr_max_gain = atoi(argv[0]);
200 return CMD_SUCCESS;
201}
202
203DEFUN(cfg_trunk_dwnstr_target, cfg_trunk_dwnstr_target_cmd,
204 "downstream-target-level <6-37>",
205 "Set the desired level in db\n"
206 "Desired lievel\n")
207{
208 struct mgcp_trunk_config *trunk = vty->index;
209
210 trunk->dwnstr_target_lvl = atoi(argv[0]);
211 return CMD_SUCCESS;
212}
213
Holger Hans Peter Freythere72139a2011-09-13 22:41:48 +0200214DEFUN_DEPRECATED(cfg_trunk_endp_offset, cfg_trunk_endp_offset_cmd,
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100215 "endpoint-offset <-60-60>",
216 "Offset to the CIC map\n" "Value to set\n")
217{
Holger Hans Peter Freythere72139a2011-09-13 22:41:48 +0200218 vty_out(vty, "%%endpoint-offset is not used anymore.%s", VTY_NEWLINE);
219 return CMD_WARNING;
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100220}
221
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200222DEFUN(cfg_trunk_timeslot_block, cfg_trunk_timeslot_block_cmd,
Holger Hans Peter Freytherfd8513d2011-10-07 17:39:57 +0200223 "block-endpoint <1-1024>",
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200224 ENDP_BLOCK_STR "Endpoint number\n")
225{
226 struct mgcp_trunk_config *trunk = vty->index;
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200227 int no = atoi(argv[0]);
228
229 if (no <= 0 || no >= trunk->number_endpoints) {
230 vty_out(vty, "%%Endpoint does not fit: %d.%s", no, VTY_NEWLINE);
231 return CMD_WARNING;
232 }
233
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200234 trunk->endpoints[atoi(argv[0])].blocked = 1;
235 return CMD_SUCCESS;
236}
237
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200238void mgcp_write_extra(struct vty *vty, struct mgcp_config *cfg)
239{
240 vty_out(vty, " configure-trunks %d%s",
241 cfg->configure_trunks, VTY_NEWLINE);
242}
243
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200244static void write_blocked_endpoints(struct vty *vty,
245 struct mgcp_trunk_config *tcfg)
246{
247 int i;
248
249 for (i = 1; i < tcfg->number_endpoints; ++i) {
250 if (!tcfg->endpoints[i].blocked)
251 continue;
252
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200253 vty_out(vty, " block-endpoint %d%s", i, VTY_NEWLINE);
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200254 }
255}
256
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200257void write_trunk_extra(struct vty *vty, struct mgcp_trunk_config *trunk)
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100258{
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200259 vty_out(vty, " force-realloc %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100260 trunk->force_realloc, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200261 vty_out(vty, " vad %s%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100262 trunk->vad_enabled ? "enabled" : "disabled", VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200263 vty_out(vty, " input-digital-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100264 trunk->digital_inp_gain, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200265 vty_out(vty, " output-digital-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100266 trunk->digital_out_gain, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200267 vty_out(vty, " upstream-automatic-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100268 trunk->upstr_agc_enbl, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200269 vty_out(vty, " upstream-adaptation-rate %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100270 trunk->upstr_adp_rate, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200271 vty_out(vty, " upstream-max-applied-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100272 trunk->upstr_max_gain, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200273 vty_out(vty, " upstream-target-level %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100274 trunk->upstr_target_lvl, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200275 vty_out(vty, " downstream-automatic-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100276 trunk->dwnstr_agc_enbl, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200277 vty_out(vty, " downstream-adaptation-rate %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100278 trunk->dwnstr_adp_rate, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200279 vty_out(vty, " downstream-max-applied-gain %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100280 trunk->dwnstr_max_gain, VTY_NEWLINE);
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200281 vty_out(vty, " downstream-target-level %d%s",
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100282 trunk->dwnstr_target_lvl, VTY_NEWLINE);
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200283 write_blocked_endpoints(vty, trunk);
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100284}
285
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200286void mgcp_write_trunk_extra(struct vty *vty, struct mgcp_trunk_config *trunk)
287{
288 write_trunk_extra(vty, trunk);
289}
290
291void mgcp_write_vtrunk_extra(struct vty *vty, struct mgcp_trunk_config *trunk)
292{
Holger Hans Peter Freytherfa158052011-09-14 22:16:47 +0200293 vty_out(vty, " target-trunk-start %d%s",
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200294 trunk->target_trunk_start, VTY_NEWLINE);
295 write_trunk_extra(vty, trunk);
296}
297
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100298
299void mgcp_mgw_vty_init(void)
300{
301 cmd_init(1);
302 vty_init(&vty_info);
303 logging_vty_add_cmds();
304 mgcp_vty_init();
305
306 install_element(MGCP_NODE, &cfg_mgcp_configure_cmd);
Holger Hans Peter Freytherf574cec2011-09-14 19:14:54 +0200307
308 install_element(VTRUNK_NODE, &cfg_vtrunk_target_trunk_cmd);
309 install_element(VTRUNK_NODE, &cfg_vtrunk_block_defaults_cmd);
310 install_element(VTRUNK_NODE, &cfg_trunk_vad_cmd);
311 install_element(VTRUNK_NODE, &cfg_trunk_realloc_cmd);
312 install_element(VTRUNK_NODE, &cfg_trunk_inp_dig_gain_cmd);
313 install_element(VTRUNK_NODE, &cfg_trunk_out_dig_gain_cmd);
314 install_element(VTRUNK_NODE, &cfg_trunk_upstr_agc_cmd);
315 install_element(VTRUNK_NODE, &cfg_trunk_upstr_adp_cmd);
316 install_element(VTRUNK_NODE, &cfg_trunk_upstr_max_gain_cmd);
317 install_element(VTRUNK_NODE, &cfg_trunk_upstr_target_cmd);
318 install_element(VTRUNK_NODE, &cfg_trunk_dwnstr_agc_cmd);
319 install_element(VTRUNK_NODE, &cfg_trunk_dwnstr_adp_cmd);
320 install_element(VTRUNK_NODE, &cfg_trunk_dwnstr_max_gain_cmd);
321 install_element(VTRUNK_NODE, &cfg_trunk_dwnstr_target_cmd);
322 install_element(VTRUNK_NODE, &cfg_trunk_endp_offset_cmd);
323 install_element(VTRUNK_NODE, &cfg_trunk_timeslot_block_cmd);
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100324
325 install_element(TRUNK_NODE, &cfg_trunk_vad_cmd);
326 install_element(TRUNK_NODE, &cfg_trunk_realloc_cmd);
327 install_element(TRUNK_NODE, &cfg_trunk_inp_dig_gain_cmd);
328 install_element(TRUNK_NODE, &cfg_trunk_out_dig_gain_cmd);
329 install_element(TRUNK_NODE, &cfg_trunk_upstr_agc_cmd);
330 install_element(TRUNK_NODE, &cfg_trunk_upstr_adp_cmd);
331 install_element(TRUNK_NODE, &cfg_trunk_upstr_max_gain_cmd);
332 install_element(TRUNK_NODE, &cfg_trunk_upstr_target_cmd);
333 install_element(TRUNK_NODE, &cfg_trunk_dwnstr_agc_cmd);
334 install_element(TRUNK_NODE, &cfg_trunk_dwnstr_adp_cmd);
335 install_element(TRUNK_NODE, &cfg_trunk_dwnstr_max_gain_cmd);
336 install_element(TRUNK_NODE, &cfg_trunk_dwnstr_target_cmd);
337 install_element(TRUNK_NODE, &cfg_trunk_endp_offset_cmd);
Holger Hans Peter Freytherdea0ccc2011-09-14 01:42:22 +0200338 install_element(TRUNK_NODE, &cfg_trunk_timeslot_block_cmd);
Holger Hans Peter Freytherdcc33122011-03-01 01:24:10 +0100339}
340
341
342const char *openbsc_copyright = "";