blob: 8cd80f99c1fd1d1b9248eaf48ca447f03b68903c [file] [log] [blame]
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +08001/* Osmo BSC VTY Configuration */
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +02002/* (C) 2009-2011 by Holger Hans Peter Freyther
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +02003 * (C) 2009-2011 by On-Waves
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +08004 * All Rights Reserved
5 *
6 * This program is free software; you can redistribute it and/or modify
Harald Welte9af6ddf2011-01-01 15:25:50 +01007 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +08009 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Harald Welte9af6ddf2011-01-01 15:25:50 +010014 * GNU Affero General Public License for more details.
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +080015 *
Harald Welte9af6ddf2011-01-01 15:25:50 +010016 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +080018 *
19 */
20
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080021#include <openbsc/gsm_data.h>
22#include <openbsc/osmo_msc_data.h>
23#include <openbsc/vty.h>
24
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +010025#include <osmocom/core/talloc.h>
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080026
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +010027
28#define IPA_STR "IP.ACCESS specific\n"
29
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080030extern struct gsm_network *bsc_gsmnet;
31
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +020032static struct osmo_bsc_data *osmo_bsc_data(struct vty *vty)
33{
34 return bsc_gsmnet->bsc_data;
35}
36
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080037static struct osmo_msc_data *osmo_msc_data(struct vty *vty)
38{
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020039 return osmo_msc_data_find(bsc_gsmnet, (int) vty->index);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080040}
41
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020042static struct cmd_node bsc_node = {
43 BSC_NODE,
44 "%s(bsc)#",
45 1,
46};
47
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080048static struct cmd_node msc_node = {
49 MSC_NODE,
Harald Welte570ce242012-08-17 13:16:10 +020050 "%s(config-msc)# ",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080051 1,
52};
53
54DEFUN(cfg_net_msc, cfg_net_msc_cmd,
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020055 "msc [<0-1000>]", "Configure MSC details\n" "MSC connection to configure\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080056{
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020057 int index = argc == 1 ? atoi(argv[0]) : 0;
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020058 struct osmo_msc_data *msc;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080059
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020060 msc = osmo_msc_data_alloc(bsc_gsmnet, index);
61 if (!msc) {
62 vty_out(vty, "%%Failed to allocate MSC data.%s", VTY_NEWLINE);
63 return CMD_WARNING;
64 }
65
66 vty->index = (void *) index;
67 vty->node = MSC_NODE;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080068 return CMD_SUCCESS;
69}
70
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020071DEFUN(cfg_net_bsc, cfg_net_bsc_cmd,
72 "bsc", "Configure BSC\n")
73{
74 vty->node = BSC_NODE;
75 return CMD_SUCCESS;
76}
77
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +020078static void write_msc_amr_options(struct vty *vty, struct osmo_msc_data *msc)
79{
80#define WRITE_AMR(vty, msc, name, var) \
81 vty_out(vty, " amr-config %s %s%s", \
82 name, msc->amr_conf.var ? "allowed" : "forbidden", \
83 VTY_NEWLINE);
84
85 WRITE_AMR(vty, msc, "12_2k", m12_2);
86 WRITE_AMR(vty, msc, "10_2k", m10_2);
87 WRITE_AMR(vty, msc, "7_95k", m7_95);
88 WRITE_AMR(vty, msc, "7_40k", m7_40);
89 WRITE_AMR(vty, msc, "6_70k", m6_70);
90 WRITE_AMR(vty, msc, "5_90k", m5_90);
91 WRITE_AMR(vty, msc, "5_15k", m5_15);
92 WRITE_AMR(vty, msc, "4_75k", m4_75);
93#undef WRITE_AMR
94}
95
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020096static void write_msc(struct vty *vty, struct osmo_msc_data *msc)
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080097{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +020098 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080099
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200100 vty_out(vty, "msc %d%s", msc->nr, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200101 if (msc->bsc_token)
102 vty_out(vty, " token %s%s", msc->bsc_token, VTY_NEWLINE);
103 if (msc->core_ncc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200104 vty_out(vty, " core-mobile-network-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200105 msc->core_ncc, VTY_NEWLINE);
106 if (msc->core_mcc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200107 vty_out(vty, " core-mobile-country-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200108 msc->core_mcc, VTY_NEWLINE);
109 vty_out(vty, " ip.access rtp-base %d%s", msc->rtp_base, VTY_NEWLINE);
110 vty_out(vty, " timeout-ping %d%s", msc->ping_timeout, VTY_NEWLINE);
111 vty_out(vty, " timeout-pong %d%s", msc->pong_timeout, VTY_NEWLINE);
112 if (msc->ussd_welcome_txt)
113 vty_out(vty, " bsc-welcome-text %s%s", msc->ussd_welcome_txt, VTY_NEWLINE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800114
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200115 if (msc->audio_length != 0) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100116 int i;
117
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200118 vty_out(vty, " codec-list ");
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200119 for (i = 0; i < msc->audio_length; ++i) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100120 if (i != 0)
121 vty_out(vty, ", ");
122
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200123 if (msc->audio_support[i]->hr)
124 vty_out(vty, "hr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100125 else
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200126 vty_out(vty, "fr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100127 }
128 vty_out(vty, "%s", VTY_NEWLINE);
129
130 }
131
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200132 llist_for_each_entry(dest, &msc->dests, list)
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200133 vty_out(vty, " dest %s %d %d%s", dest->ip, dest->port,
134 dest->dscp, VTY_NEWLINE);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200135
136 vty_out(vty, " type %s%s", msc->type == MSC_CON_TYPE_NORMAL ?
137 "normal" : "local", VTY_NEWLINE);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200138 vty_out(vty, " allow-emergency %s%s", msc->allow_emerg ?
139 "allow" : "deny", VTY_NEWLINE);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200140
141 if (msc->local_pref)
142 vty_out(vty, " local-prefix %s%s", msc->local_pref, VTY_NEWLINE);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200143
144 /* write amr options */
145 write_msc_amr_options(vty, msc);
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200146}
147
148static int config_write_msc(struct vty *vty)
149{
150 struct osmo_msc_data *msc;
151 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
152
153 llist_for_each_entry(msc, &bsc->mscs, entry)
154 write_msc(vty, msc);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200155
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200156 return CMD_SUCCESS;
157}
158
159static int config_write_bsc(struct vty *vty)
160{
161 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
162
163 vty_out(vty, "bsc%s", VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200164 if (bsc->mid_call_txt)
165 vty_out(vty, " mid-call-text %s%s", bsc->mid_call_txt, VTY_NEWLINE);
166 vty_out(vty, " mid-call-timeout %d%s", bsc->mid_call_timeout, VTY_NEWLINE);
167 if (bsc->rf_ctrl_name)
168 vty_out(vty, " bsc-rf-socket %s%s",
169 bsc->rf_ctrl_name, VTY_NEWLINE);
170
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200171 if (bsc->auto_off_timeout != -1)
172 vty_out(vty, " bsc-auto-rf-off %d%s",
173 bsc->auto_off_timeout, VTY_NEWLINE);
174
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800175 return CMD_SUCCESS;
176}
177
Holger Hans Peter Freyther5b848f32010-11-03 13:11:14 +0100178DEFUN(cfg_net_bsc_token,
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800179 cfg_net_bsc_token_cmd,
180 "token TOKEN",
181 "A token for the BSC to be sent to the MSC")
182{
183 struct osmo_msc_data *data = osmo_msc_data(vty);
184
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200185 bsc_replace_string(osmo_bsc_data(vty), &data->bsc_token, argv[0]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800186 return CMD_SUCCESS;
187}
188
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100189DEFUN(cfg_net_bsc_ncc,
190 cfg_net_bsc_ncc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100191 "core-mobile-network-code <1-999>",
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100192 "Use this network code for the backbone\n" "NCC value\n")
193{
194 struct osmo_msc_data *data = osmo_msc_data(vty);
195 data->core_ncc = atoi(argv[0]);
196 return CMD_SUCCESS;
197}
198
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100199DEFUN(cfg_net_bsc_mcc,
200 cfg_net_bsc_mcc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100201 "core-mobile-country-code <1-999>",
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100202 "Use this country code for the backbone\n" "MCC value\n")
203{
204 struct osmo_msc_data *data = osmo_msc_data(vty);
205 data->core_mcc = atoi(argv[0]);
206 return CMD_SUCCESS;
207}
208
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100209DEFUN(cfg_net_bsc_rtp_base,
210 cfg_net_bsc_rtp_base_cmd,
211 "ip.access rtp-base <1-65000>",
212 IPA_STR
213 "Set the rtp-base port for the RTP stream\n"
214 "Port number\n")
215{
216 struct osmo_msc_data *data = osmo_msc_data(vty);
217 data->rtp_base = atoi(argv[0]);
218 return CMD_SUCCESS;
219}
220
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100221DEFUN(cfg_net_bsc_codec_list,
222 cfg_net_bsc_codec_list_cmd,
223 "codec-list .LIST",
224 "Set the allowed audio codecs\n"
225 "List of audio codecs\n")
226{
227 struct osmo_msc_data *data = osmo_msc_data(vty);
228 int saw_fr, saw_hr;
229 int i;
230
231 saw_fr = saw_hr = 0;
232
233 /* free the old list... if it exists */
234 if (data->audio_support) {
235 talloc_free(data->audio_support);
236 data->audio_support = NULL;
237 data->audio_length = 0;
238 }
239
240 /* create a new array */
241 data->audio_support =
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200242 talloc_zero_array(osmo_bsc_data(vty), struct gsm_audio_support *, argc);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100243 data->audio_length = argc;
244
245 for (i = 0; i < argc; ++i) {
246 /* check for hrX or frX */
247 if (strlen(argv[i]) != 3
248 || argv[i][1] != 'r'
249 || (argv[i][0] != 'h' && argv[i][0] != 'f')
250 || argv[i][2] < 0x30
251 || argv[i][2] > 0x39)
252 goto error;
253
254 data->audio_support[i] = talloc_zero(data->audio_support,
255 struct gsm_audio_support);
256 data->audio_support[i]->ver = atoi(argv[i] + 2);
257
258 if (strncmp("hr", argv[i], 2) == 0) {
259 data->audio_support[i]->hr = 1;
260 saw_hr = 1;
261 } else if (strncmp("fr", argv[i], 2) == 0) {
262 data->audio_support[i]->hr = 0;
263 saw_fr = 1;
264 }
265
266 if (saw_hr && saw_fr) {
267 vty_out(vty, "Can not have full-rate and half-rate codec.%s",
268 VTY_NEWLINE);
269 return CMD_ERR_INCOMPLETE;
270 }
271 }
272
273 return CMD_SUCCESS;
274
275error:
276 vty_out(vty, "Codec name must be hrX or frX. Was '%s'%s",
277 argv[i], VTY_NEWLINE);
278 return CMD_ERR_INCOMPLETE;
279}
280
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200281DEFUN(cfg_net_msc_dest,
282 cfg_net_msc_dest_cmd,
283 "dest A.B.C.D <1-65000> <0-255>",
284 "Add a destination to a MUX/MSC\n"
285 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800286{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200287 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800288 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800289
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200290 dest = talloc_zero(osmo_bsc_data(vty), struct bsc_msc_dest);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200291 if (!dest) {
292 vty_out(vty, "%%Failed to create structure.%s", VTY_NEWLINE);
293 return CMD_WARNING;
294 }
295
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200296 dest->ip = talloc_strdup(dest, argv[0]);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200297 if (!dest->ip) {
298 vty_out(vty, "%%Failed to copy dest ip.%s", VTY_NEWLINE);
299 talloc_free(dest);
300 return CMD_WARNING;
301 }
302
303 dest->port = atoi(argv[1]);
304 dest->dscp = atoi(argv[2]);
305 llist_add_tail(&dest->list, &data->dests);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800306 return CMD_SUCCESS;
307}
308
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200309DEFUN(cfg_net_msc_no_dest,
310 cfg_net_msc_no_dest_cmd,
311 "no dest A.B.C.D <1-65000> <0-255>",
312 NO_STR "Remove a destination to a MUX/MSC\n"
313 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800314{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200315 struct bsc_msc_dest *dest, *tmp;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800316 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800317
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200318 int port = atoi(argv[1]);
319 int dscp = atoi(argv[2]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800320
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200321 llist_for_each_entry_safe(dest, tmp, &data->dests, list) {
322 if (port != dest->port || dscp != dest->dscp
323 || strcmp(dest->ip, argv[0]) != 0)
324 continue;
325
326 llist_del(&dest->list);
327 talloc_free(dest);
328 }
329
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800330 return CMD_SUCCESS;
331}
332
333DEFUN(cfg_net_msc_ping_time,
334 cfg_net_msc_ping_time_cmd,
335 "timeout-ping NR",
336 "Set the PING interval, negative for not sending PING")
337{
338 struct osmo_msc_data *data = osmo_msc_data(vty);
339 data->ping_timeout = atoi(argv[0]);
340 return CMD_SUCCESS;
341}
342
343DEFUN(cfg_net_msc_pong_time,
344 cfg_net_msc_pong_time_cmd,
345 "timeout-pong NR",
346 "Set the time to wait for a PONG.")
347{
348 struct osmo_msc_data *data = osmo_msc_data(vty);
349 data->pong_timeout = atoi(argv[0]);
350 return CMD_SUCCESS;
351}
352
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200353DEFUN(cfg_net_msc_welcome_ussd,
354 cfg_net_msc_welcome_ussd_cmd,
355 "bsc-welcome-text .TEXT",
356 "Set the USSD notification to be sent.\n" "Text to be sent\n")
357{
358 struct osmo_msc_data *data = osmo_msc_data(vty);
359 char *str = argv_concat(argv, argc, 0);
360 if (!str)
361 return CMD_WARNING;
362
363 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_welcome_txt, str);
364 talloc_free(str);
365 return CMD_SUCCESS;
366}
367
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200368DEFUN(cfg_net_msc_type,
369 cfg_net_msc_type_cmd,
370 "type (normal|local)",
371 "Select the MSC type\n"
372 "Plain GSM MSC\n" "Special MSC for local call routing\n")
373{
374 struct osmo_msc_data *data = osmo_msc_data(vty);
375
376 if (strcmp(argv[0], "normal") == 0)
377 data->type = MSC_CON_TYPE_NORMAL;
378 else if (strcmp(argv[0], "local") == 0)
379 data->type = MSC_CON_TYPE_LOCAL;
380
381 return CMD_SUCCESS;
382}
383
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200384DEFUN(cfg_net_msc_emerg,
385 cfg_net_msc_emerg_cmd,
386 "allow-emergency (allow|deny)",
387 "Allow CM ServiceRequests with type emergency\n"
388 "Allow\n" "Deny\n")
389{
390 struct osmo_msc_data *data = osmo_msc_data(vty);
391 data->allow_emerg = strcmp("allow", argv[0]) == 0;
392 return CMD_SUCCESS;
393}
394
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200395DEFUN(cfg_net_msc_local_prefix,
396 cfg_net_msc_local_prefix_cmd,
397 "local-prefix REGEXP",
398 "Prefix for local numbers\n" "REGEXP used\n")
399{
400 struct osmo_msc_data *msc = osmo_msc_data(vty);
401
402 if (gsm_parse_reg(msc, &msc->local_pref_reg, &msc->local_pref, argc, argv) != 0) {
403 vty_out(vty, "%%Failed to parse the regexp: '%s'%s",
404 argv[0], VTY_NEWLINE);
405 return CMD_WARNING;
406 }
407
408 return CMD_SUCCESS;
409}
410
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200411#define AMR_CONF_STR "AMR Multirate Configuration\n"
412#define AMR_COMMAND(name) \
413 DEFUN(cfg_net_msc_amr_##name, \
414 cfg_net_msc_amr_##name##_cmd, \
415 "amr-config " #name "k (allowed|forbidden)", \
416 AMR_CONF_STR "Bitrate\n" "Allowed\n" "Forbidden\n") \
417{ \
418 struct osmo_msc_data *msc = osmo_msc_data(vty); \
419 \
420 msc->amr_conf.m##name = strcmp(argv[0], "allowed") == 0; \
421 return CMD_SUCCESS; \
422}
423
424AMR_COMMAND(12_2)
425AMR_COMMAND(10_2)
426AMR_COMMAND(7_95)
427AMR_COMMAND(7_40)
428AMR_COMMAND(6_70)
429AMR_COMMAND(5_90)
430AMR_COMMAND(5_15)
431AMR_COMMAND(4_75)
432
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200433DEFUN(cfg_net_bsc_mid_call_text,
434 cfg_net_bsc_mid_call_text_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100435 "mid-call-text .TEXT",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800436 "Set the USSD notifcation to be send.\n" "Text to be sent\n")
437{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200438 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther414bc4a2010-11-22 22:27:39 +0100439 char *txt = argv_concat(argv, argc, 0);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800440 if (!txt)
441 return CMD_WARNING;
442
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100443 bsc_replace_string(data, &data->mid_call_txt, txt);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800444 talloc_free(txt);
445 return CMD_SUCCESS;
446}
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800447
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200448DEFUN(cfg_net_bsc_mid_call_timeout,
449 cfg_net_bsc_mid_call_timeout_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100450 "mid-call-timeout NR",
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100451 "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n")
452{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200453 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100454 data->mid_call_timeout = atoi(argv[0]);
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100455 return CMD_SUCCESS;
456}
457
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200458DEFUN(cfg_net_rf_socket,
459 cfg_net_rf_socket_cmd,
460 "bsc-rf-socket PATH",
461 "Set the filename for the RF control interface.\n" "RF Control path\n")
462{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200463 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200464
465 bsc_replace_string(data, &data->rf_ctrl_name, argv[0]);
466 return CMD_SUCCESS;
467}
468
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200469DEFUN(cfg_net_rf_off_time,
470 cfg_net_rf_off_time_cmd,
471 "bsc-auto-rf-off <1-65000>",
472 "Disable RF on MSC Connection\n" "Timeout\n")
473{
474 struct osmo_bsc_data *data = osmo_bsc_data(vty);
475 data->auto_off_timeout = atoi(argv[0]);
476 return CMD_SUCCESS;
477}
478
479DEFUN(cfg_net_no_rf_off_time,
480 cfg_net_no_rf_off_time_cmd,
481 "no bsc-auto-rf-off",
482 NO_STR "Disable RF on MSC Connection\n")
483{
484 struct osmo_bsc_data *data = osmo_bsc_data(vty);
485 data->auto_off_timeout = -1;
486 return CMD_SUCCESS;
487}
488
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200489DEFUN(show_statistics,
490 show_statistics_cmd,
491 "show statistics",
492 SHOW_STR "Statistics about the BSC\n")
493{
494 openbsc_vty_print_statistics(vty, bsc_gsmnet);
495 return CMD_SUCCESS;
496}
497
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200498DEFUN(show_mscs,
499 show_mscs_cmd,
500 "show mscs",
501 SHOW_STR "MSC Connections and State\n")
502{
503 struct osmo_msc_data *msc;
504 llist_for_each_entry(msc, &bsc_gsmnet->bsc_data->mscs, entry) {
505 vty_out(vty, "MSC Nr: %d is connected: %d auth: %d.%s",
506 msc->nr,
507 msc->msc_con ? msc->msc_con->is_connected : -1,
508 msc->msc_con ? msc->msc_con->is_authenticated : -1,
509 VTY_NEWLINE);
510 }
511
512 return CMD_SUCCESS;
513}
514
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800515int bsc_vty_init_extra(void)
516{
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200517 install_element(CONFIG_NODE, &cfg_net_msc_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200518 install_element(CONFIG_NODE, &cfg_net_bsc_cmd);
519
520 install_node(&bsc_node, config_write_bsc);
521 install_default(BSC_NODE);
522 install_element(BSC_NODE, &cfg_net_bsc_mid_call_text_cmd);
523 install_element(BSC_NODE, &cfg_net_bsc_mid_call_timeout_cmd);
524 install_element(BSC_NODE, &cfg_net_rf_socket_cmd);
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200525 install_element(BSC_NODE, &cfg_net_rf_off_time_cmd);
526 install_element(BSC_NODE, &cfg_net_no_rf_off_time_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200527
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800528 install_node(&msc_node, config_write_msc);
529 install_default(MSC_NODE);
530 install_element(MSC_NODE, &cfg_net_bsc_token_cmd);
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100531 install_element(MSC_NODE, &cfg_net_bsc_ncc_cmd);
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100532 install_element(MSC_NODE, &cfg_net_bsc_mcc_cmd);
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100533 install_element(MSC_NODE, &cfg_net_bsc_rtp_base_cmd);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100534 install_element(MSC_NODE, &cfg_net_bsc_codec_list_cmd);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200535 install_element(MSC_NODE, &cfg_net_msc_dest_cmd);
536 install_element(MSC_NODE, &cfg_net_msc_no_dest_cmd);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800537 install_element(MSC_NODE, &cfg_net_msc_ping_time_cmd);
538 install_element(MSC_NODE, &cfg_net_msc_pong_time_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200539 install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200540 install_element(MSC_NODE, &cfg_net_msc_type_cmd);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200541 install_element(MSC_NODE, &cfg_net_msc_emerg_cmd);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200542 install_element(MSC_NODE, &cfg_net_msc_local_prefix_cmd);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200543 install_element(MSC_NODE, &cfg_net_msc_amr_12_2_cmd);
544 install_element(MSC_NODE, &cfg_net_msc_amr_10_2_cmd);
545 install_element(MSC_NODE, &cfg_net_msc_amr_7_95_cmd);
546 install_element(MSC_NODE, &cfg_net_msc_amr_7_40_cmd);
547 install_element(MSC_NODE, &cfg_net_msc_amr_6_70_cmd);
548 install_element(MSC_NODE, &cfg_net_msc_amr_5_90_cmd);
549 install_element(MSC_NODE, &cfg_net_msc_amr_5_15_cmd);
550 install_element(MSC_NODE, &cfg_net_msc_amr_4_75_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200551
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200552 install_element_ve(&show_statistics_cmd);
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200553 install_element_ve(&show_mscs_cmd);
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200554
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800555 return 0;
556}