blob: d871f015aa53a8160c6091d3e8d55f90e3b45ec0 [file] [log] [blame]
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +08001/* Osmo BSC VTY Configuration */
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +02002/* (C) 2009-2015 by Holger Hans Peter Freyther
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +01003 * (C) 2009-2014 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>
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +010022#include <openbsc/osmo_bsc.h>
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080023#include <openbsc/osmo_msc_data.h>
24#include <openbsc/vty.h>
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +010025#include <openbsc/gsm_subscriber.h>
26#include <openbsc/debug.h>
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +020027#include <openbsc/bsc_msg_filter.h>
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080028
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +010029#include <osmocom/core/talloc.h>
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +010030#include <osmocom/vty/logging.h>
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080031
Daniel Willmann7d109832012-05-14 18:43:23 +020032#include <time.h>
33
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +010034
35#define IPA_STR "IP.ACCESS specific\n"
36
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080037extern struct gsm_network *bsc_gsmnet;
38
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +020039static struct osmo_bsc_data *osmo_bsc_data(struct vty *vty)
40{
41 return bsc_gsmnet->bsc_data;
42}
43
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080044static struct osmo_msc_data *osmo_msc_data(struct vty *vty)
45{
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020046 return osmo_msc_data_find(bsc_gsmnet, (int) vty->index);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080047}
48
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020049static struct cmd_node bsc_node = {
50 BSC_NODE,
Jacob Erlbeck0b4f1b92013-08-30 18:33:58 +020051 "%s(config-bsc)# ",
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020052 1,
53};
54
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080055static struct cmd_node msc_node = {
56 MSC_NODE,
Harald Welte570ce242012-08-17 13:16:10 +020057 "%s(config-msc)# ",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080058 1,
59};
60
61DEFUN(cfg_net_msc, cfg_net_msc_cmd,
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020062 "msc [<0-1000>]", "Configure MSC details\n" "MSC connection to configure\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080063{
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020064 int index = argc == 1 ? atoi(argv[0]) : 0;
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020065 struct osmo_msc_data *msc;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080066
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020067 msc = osmo_msc_data_alloc(bsc_gsmnet, index);
68 if (!msc) {
69 vty_out(vty, "%%Failed to allocate MSC data.%s", VTY_NEWLINE);
70 return CMD_WARNING;
71 }
72
73 vty->index = (void *) index;
74 vty->node = MSC_NODE;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080075 return CMD_SUCCESS;
76}
77
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020078DEFUN(cfg_net_bsc, cfg_net_bsc_cmd,
79 "bsc", "Configure BSC\n")
80{
81 vty->node = BSC_NODE;
82 return CMD_SUCCESS;
83}
84
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +020085static void write_msc_amr_options(struct vty *vty, struct osmo_msc_data *msc)
86{
87#define WRITE_AMR(vty, msc, name, var) \
88 vty_out(vty, " amr-config %s %s%s", \
89 name, msc->amr_conf.var ? "allowed" : "forbidden", \
90 VTY_NEWLINE);
91
92 WRITE_AMR(vty, msc, "12_2k", m12_2);
93 WRITE_AMR(vty, msc, "10_2k", m10_2);
94 WRITE_AMR(vty, msc, "7_95k", m7_95);
95 WRITE_AMR(vty, msc, "7_40k", m7_40);
96 WRITE_AMR(vty, msc, "6_70k", m6_70);
97 WRITE_AMR(vty, msc, "5_90k", m5_90);
98 WRITE_AMR(vty, msc, "5_15k", m5_15);
99 WRITE_AMR(vty, msc, "4_75k", m4_75);
100#undef WRITE_AMR
101}
102
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200103static void write_msc(struct vty *vty, struct osmo_msc_data *msc)
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800104{
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200105 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800106
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200107 vty_out(vty, "msc %d%s", msc->nr, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200108 if (msc->bsc_token)
109 vty_out(vty, " token %s%s", msc->bsc_token, VTY_NEWLINE);
Holger Hans Peter Freythere2ac6b72015-06-08 18:02:10 +0200110 if (msc->bsc_key_present)
111 vty_out(vty, " auth-key %s%s",
112 osmo_hexdump(msc->bsc_key, sizeof(msc->bsc_key)), VTY_NEWLINE);
Holger Hans Peter Freyther1e365472015-07-13 11:06:10 +0200113 if (msc->core_mnc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200114 vty_out(vty, " core-mobile-network-code %d%s",
Holger Hans Peter Freyther1e365472015-07-13 11:06:10 +0200115 msc->core_mnc, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200116 if (msc->core_mcc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200117 vty_out(vty, " core-mobile-country-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200118 msc->core_mcc, VTY_NEWLINE);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200119 if (msc->core_lac != -1)
120 vty_out(vty, " core-location-area-code %d%s",
121 msc->core_lac, VTY_NEWLINE);
122 if (msc->core_ci != -1)
123 vty_out(vty, " core-cell-identity %d%s",
124 msc->core_ci, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200125 vty_out(vty, " ip.access rtp-base %d%s", msc->rtp_base, VTY_NEWLINE);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100126
127 if (msc->ping_timeout == -1)
128 vty_out(vty, " no timeout-ping%s", VTY_NEWLINE);
129 else {
130 vty_out(vty, " timeout-ping %d%s", msc->ping_timeout, VTY_NEWLINE);
131 vty_out(vty, " timeout-pong %d%s", msc->pong_timeout, VTY_NEWLINE);
132 if (msc->advanced_ping)
133 vty_out(vty, " timeout-ping advanced%s", VTY_NEWLINE);
134 else
135 vty_out(vty, " no timeout-ping advanced%s", VTY_NEWLINE);
136 }
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200137
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200138 if (msc->ussd_welcome_txt)
139 vty_out(vty, " bsc-welcome-text %s%s", msc->ussd_welcome_txt, VTY_NEWLINE);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200140 else
141 vty_out(vty, " no bsc-welcome-text%s", VTY_NEWLINE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800142
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200143 if (msc->ussd_msc_lost_txt && msc->ussd_msc_lost_txt[0])
144 vty_out(vty, " bsc-msc-lost-text %s%s", msc->ussd_msc_lost_txt, VTY_NEWLINE);
145 else
146 vty_out(vty, " no bsc-msc-lost-text%s", VTY_NEWLINE);
147
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200148 if (msc->ussd_grace_txt && msc->ussd_grace_txt[0])
149 vty_out(vty, " bsc-grace-text %s%s", msc->ussd_grace_txt, VTY_NEWLINE);
150 else
151 vty_out(vty, " no bsc-grace-text%s", VTY_NEWLINE);
152
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200153 if (msc->audio_length != 0) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100154 int i;
155
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200156 vty_out(vty, " codec-list ");
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200157 for (i = 0; i < msc->audio_length; ++i) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100158 if (i != 0)
Harald Welte22ce5982013-06-19 15:32:27 +0200159 vty_out(vty, " ");
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100160
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200161 if (msc->audio_support[i]->hr)
162 vty_out(vty, "hr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100163 else
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200164 vty_out(vty, "fr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100165 }
166 vty_out(vty, "%s", VTY_NEWLINE);
167
168 }
169
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200170 llist_for_each_entry(dest, &msc->dests, list)
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200171 vty_out(vty, " dest %s %d %d%s", dest->ip, dest->port,
172 dest->dscp, VTY_NEWLINE);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200173
174 vty_out(vty, " type %s%s", msc->type == MSC_CON_TYPE_NORMAL ?
175 "normal" : "local", VTY_NEWLINE);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200176 vty_out(vty, " allow-emergency %s%s", msc->allow_emerg ?
177 "allow" : "deny", VTY_NEWLINE);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200178
179 if (msc->local_pref)
180 vty_out(vty, " local-prefix %s%s", msc->local_pref, VTY_NEWLINE);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200181
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200182 if (msc->acc_lst_name)
183 vty_out(vty, " access-list-name %s%s", msc->acc_lst_name, VTY_NEWLINE);
184
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200185 /* write amr options */
186 write_msc_amr_options(vty, msc);
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200187}
188
189static int config_write_msc(struct vty *vty)
190{
191 struct osmo_msc_data *msc;
192 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
193
194 llist_for_each_entry(msc, &bsc->mscs, entry)
195 write_msc(vty, msc);
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200196
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200197 return CMD_SUCCESS;
198}
199
200static int config_write_bsc(struct vty *vty)
201{
202 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
203
204 vty_out(vty, "bsc%s", VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200205 if (bsc->mid_call_txt)
206 vty_out(vty, " mid-call-text %s%s", bsc->mid_call_txt, VTY_NEWLINE);
207 vty_out(vty, " mid-call-timeout %d%s", bsc->mid_call_timeout, VTY_NEWLINE);
208 if (bsc->rf_ctrl_name)
209 vty_out(vty, " bsc-rf-socket %s%s",
210 bsc->rf_ctrl_name, VTY_NEWLINE);
211
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200212 if (bsc->auto_off_timeout != -1)
213 vty_out(vty, " bsc-auto-rf-off %d%s",
214 bsc->auto_off_timeout, VTY_NEWLINE);
215
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200216 if (bsc->ussd_no_msc_txt && bsc->ussd_no_msc_txt[0])
217 vty_out(vty, " missing-msc-text %s%s", bsc->ussd_no_msc_txt, VTY_NEWLINE);
218 else
219 vty_out(vty, " no missing-msc-text%s", VTY_NEWLINE);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200220 if (bsc->acc_lst_name)
221 vty_out(vty, " access-list-name %s%s", bsc->acc_lst_name, VTY_NEWLINE);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200222
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800223 return CMD_SUCCESS;
224}
225
Holger Hans Peter Freyther5b848f32010-11-03 13:11:14 +0100226DEFUN(cfg_net_bsc_token,
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800227 cfg_net_bsc_token_cmd,
228 "token TOKEN",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100229 "A token for the BSC to be sent to the MSC\n" "A token\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800230{
231 struct osmo_msc_data *data = osmo_msc_data(vty);
232
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200233 bsc_replace_string(osmo_bsc_data(vty), &data->bsc_token, argv[0]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800234 return CMD_SUCCESS;
235}
236
Holger Hans Peter Freythere2ac6b72015-06-08 18:02:10 +0200237DEFUN(cfg_net_bsc_key,
238 cfg_net_bsc_key_cmd,
239 "auth-key KEY",
240 "Authentication (secret) key configuration\n"
241 "Security key\n")
242{
243 struct osmo_msc_data *data = osmo_msc_data(vty);
244
245 osmo_hexparse(argv[0], data->bsc_key, sizeof(data->bsc_key));
246 data->bsc_key_present = 1;
247 return CMD_SUCCESS;
248}
249
250DEFUN(cfg_net_no_bsc_key, cfg_net_bsc_no_key_cmd,
251 "no auth-key",
252 NO_STR "Authentication (secret) key configuration\n")
253{
254 struct osmo_msc_data *data = osmo_msc_data(vty);
255
256 memset(data->bsc_key, 0, sizeof(data->bsc_key));
257 data->bsc_key_present = 0;
258 return CMD_SUCCESS;
259}
260
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100261DEFUN(cfg_net_bsc_ncc,
262 cfg_net_bsc_ncc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100263 "core-mobile-network-code <1-999>",
Holger Hans Peter Freyther1e365472015-07-13 11:06:10 +0200264 "Use this network code for the core network\n" "MNC value\n")
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100265{
266 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther1e365472015-07-13 11:06:10 +0200267 data->core_mnc = atoi(argv[0]);
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100268 return CMD_SUCCESS;
269}
270
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100271DEFUN(cfg_net_bsc_mcc,
272 cfg_net_bsc_mcc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100273 "core-mobile-country-code <1-999>",
Holger Hans Peter Freyther768580b2014-07-08 12:48:49 +0200274 "Use this country code for the core network\n" "MCC value\n")
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100275{
276 struct osmo_msc_data *data = osmo_msc_data(vty);
277 data->core_mcc = atoi(argv[0]);
278 return CMD_SUCCESS;
279}
280
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200281DEFUN(cfg_net_bsc_lac,
282 cfg_net_bsc_lac_cmd,
283 "core-location-area-code <0-65535>",
284 "Use this location area code for the core network\n" "LAC value\n")
285{
286 struct osmo_msc_data *data = osmo_msc_data(vty);
287 data->core_lac = atoi(argv[0]);
288 return CMD_SUCCESS;
289}
290
291DEFUN(cfg_net_bsc_ci,
292 cfg_net_bsc_ci_cmd,
293 "core-cell-identity <0-65535>",
294 "Use this cell identity for the core network\n" "CI value\n")
295{
296 struct osmo_msc_data *data = osmo_msc_data(vty);
297 data->core_ci = atoi(argv[0]);
298 return CMD_SUCCESS;
299}
300
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100301DEFUN(cfg_net_bsc_rtp_base,
302 cfg_net_bsc_rtp_base_cmd,
303 "ip.access rtp-base <1-65000>",
304 IPA_STR
305 "Set the rtp-base port for the RTP stream\n"
306 "Port number\n")
307{
308 struct osmo_msc_data *data = osmo_msc_data(vty);
309 data->rtp_base = atoi(argv[0]);
310 return CMD_SUCCESS;
311}
312
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100313DEFUN(cfg_net_bsc_codec_list,
314 cfg_net_bsc_codec_list_cmd,
315 "codec-list .LIST",
316 "Set the allowed audio codecs\n"
Holger Hans Peter Freyther5cb480a2016-01-15 15:05:42 +0100317 "List of audio codecs, e.g. fr3 fr1 hr3\n")
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100318{
319 struct osmo_msc_data *data = osmo_msc_data(vty);
320 int saw_fr, saw_hr;
321 int i;
322
323 saw_fr = saw_hr = 0;
324
325 /* free the old list... if it exists */
326 if (data->audio_support) {
327 talloc_free(data->audio_support);
328 data->audio_support = NULL;
329 data->audio_length = 0;
330 }
331
332 /* create a new array */
333 data->audio_support =
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200334 talloc_zero_array(osmo_bsc_data(vty), struct gsm_audio_support *, argc);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100335 data->audio_length = argc;
336
337 for (i = 0; i < argc; ++i) {
338 /* check for hrX or frX */
339 if (strlen(argv[i]) != 3
340 || argv[i][1] != 'r'
341 || (argv[i][0] != 'h' && argv[i][0] != 'f')
342 || argv[i][2] < 0x30
343 || argv[i][2] > 0x39)
344 goto error;
345
346 data->audio_support[i] = talloc_zero(data->audio_support,
347 struct gsm_audio_support);
348 data->audio_support[i]->ver = atoi(argv[i] + 2);
349
350 if (strncmp("hr", argv[i], 2) == 0) {
351 data->audio_support[i]->hr = 1;
352 saw_hr = 1;
353 } else if (strncmp("fr", argv[i], 2) == 0) {
354 data->audio_support[i]->hr = 0;
355 saw_fr = 1;
356 }
357
358 if (saw_hr && saw_fr) {
359 vty_out(vty, "Can not have full-rate and half-rate codec.%s",
360 VTY_NEWLINE);
361 return CMD_ERR_INCOMPLETE;
362 }
363 }
364
365 return CMD_SUCCESS;
366
367error:
368 vty_out(vty, "Codec name must be hrX or frX. Was '%s'%s",
369 argv[i], VTY_NEWLINE);
370 return CMD_ERR_INCOMPLETE;
371}
372
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200373DEFUN(cfg_net_msc_dest,
374 cfg_net_msc_dest_cmd,
375 "dest A.B.C.D <1-65000> <0-255>",
376 "Add a destination to a MUX/MSC\n"
377 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800378{
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200379 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800380 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800381
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200382 dest = talloc_zero(osmo_bsc_data(vty), struct bsc_msc_dest);
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200383 if (!dest) {
384 vty_out(vty, "%%Failed to create structure.%s", VTY_NEWLINE);
385 return CMD_WARNING;
386 }
387
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200388 dest->ip = talloc_strdup(dest, argv[0]);
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200389 if (!dest->ip) {
390 vty_out(vty, "%%Failed to copy dest ip.%s", VTY_NEWLINE);
391 talloc_free(dest);
392 return CMD_WARNING;
393 }
394
395 dest->port = atoi(argv[1]);
396 dest->dscp = atoi(argv[2]);
397 llist_add_tail(&dest->list, &data->dests);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800398 return CMD_SUCCESS;
399}
400
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200401DEFUN(cfg_net_msc_no_dest,
402 cfg_net_msc_no_dest_cmd,
403 "no dest A.B.C.D <1-65000> <0-255>",
404 NO_STR "Remove a destination to a MUX/MSC\n"
405 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800406{
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200407 struct bsc_msc_dest *dest, *tmp;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800408 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800409
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200410 int port = atoi(argv[1]);
411 int dscp = atoi(argv[2]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800412
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200413 llist_for_each_entry_safe(dest, tmp, &data->dests, list) {
414 if (port != dest->port || dscp != dest->dscp
415 || strcmp(dest->ip, argv[0]) != 0)
416 continue;
417
418 llist_del(&dest->list);
419 talloc_free(dest);
420 }
421
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800422 return CMD_SUCCESS;
423}
424
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100425DEFUN(cfg_net_msc_no_ping_time,
426 cfg_net_msc_no_ping_time_cmd,
427 "no timeout-ping",
428 NO_STR "Disable the ping/pong handling on A-link\n")
429{
430 struct osmo_msc_data *data = osmo_msc_data(vty);
431 data->ping_timeout = -1;
432 return CMD_SUCCESS;
433}
434
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800435DEFUN(cfg_net_msc_ping_time,
436 cfg_net_msc_ping_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200437 "timeout-ping <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100438 "Set the PING interval, negative for not sending PING\n"
439 "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800440{
441 struct osmo_msc_data *data = osmo_msc_data(vty);
442 data->ping_timeout = atoi(argv[0]);
443 return CMD_SUCCESS;
444}
445
446DEFUN(cfg_net_msc_pong_time,
447 cfg_net_msc_pong_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200448 "timeout-pong <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100449 "Set the time to wait for a PONG\n" "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800450{
451 struct osmo_msc_data *data = osmo_msc_data(vty);
452 data->pong_timeout = atoi(argv[0]);
453 return CMD_SUCCESS;
454}
455
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200456DEFUN(cfg_net_msc_advanced_ping,
457 cfg_net_msc_advanced_ping_cmd,
458 "timeout-ping advanced",
459 "Ping timeout handling\nEnable advanced mode during SCCP\n")
460{
461 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100462
463 if (data->ping_timeout == -1) {
464 vty_out(vty, "%%ping handling is disabled. Enable it first.%s",
465 VTY_NEWLINE);
466 return CMD_WARNING;
467 }
468
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200469 data->advanced_ping = 1;
470 return CMD_SUCCESS;
471}
472
473DEFUN(cfg_no_net_msc_advanced_ping,
474 cfg_no_net_msc_advanced_ping_cmd,
475 "no timeout-ping advanced",
476 NO_STR "Ping timeout handling\nEnable advanced mode during SCCP\n")
477{
478 struct osmo_msc_data *data = osmo_msc_data(vty);
479 data->advanced_ping = 0;
480 return CMD_SUCCESS;
481}
482
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200483DEFUN(cfg_net_msc_welcome_ussd,
484 cfg_net_msc_welcome_ussd_cmd,
485 "bsc-welcome-text .TEXT",
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200486 "Set the USSD notification to be sent\n" "Text to be sent\n")
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200487{
488 struct osmo_msc_data *data = osmo_msc_data(vty);
489 char *str = argv_concat(argv, argc, 0);
490 if (!str)
491 return CMD_WARNING;
492
493 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_welcome_txt, str);
494 talloc_free(str);
495 return CMD_SUCCESS;
496}
497
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200498DEFUN(cfg_net_msc_no_welcome_ussd,
499 cfg_net_msc_no_welcome_ussd_cmd,
500 "no bsc-welcome-text",
501 NO_STR "Clear the USSD notification to be sent\n")
502{
503 struct osmo_msc_data *data = osmo_msc_data(vty);
504
505 talloc_free(data->ussd_welcome_txt);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200506 data->ussd_welcome_txt = NULL;
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200507
508 return CMD_SUCCESS;
509}
510
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200511DEFUN(cfg_net_msc_lost_ussd,
512 cfg_net_msc_lost_ussd_cmd,
513 "bsc-msc-lost-text .TEXT",
514 "Set the USSD notification to be sent on MSC connection loss\n" "Text to be sent\n")
515{
516 struct osmo_msc_data *data = osmo_msc_data(vty);
517 char *str = argv_concat(argv, argc, 0);
518 if (!str)
519 return CMD_WARNING;
520
521 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_msc_lost_txt, str);
522 talloc_free(str);
523 return CMD_SUCCESS;
524}
525
526DEFUN(cfg_net_msc_no_lost_ussd,
527 cfg_net_msc_no_lost_ussd_cmd,
528 "no bsc-msc-lost-text",
529 NO_STR "Clear the USSD notification to be sent on MSC connection loss\n")
530{
531 struct osmo_msc_data *data = osmo_msc_data(vty);
532
533 talloc_free(data->ussd_msc_lost_txt);
534 data->ussd_msc_lost_txt = 0;
535
536 return CMD_SUCCESS;
537}
538
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200539DEFUN(cfg_net_msc_grace_ussd,
540 cfg_net_msc_grace_ussd_cmd,
541 "bsc-grace-text .TEXT",
542 "Set the USSD notification to be sent when the MSC has entered the grace period\n" "Text to be sent\n")
543{
544 struct osmo_msc_data *data = osmo_msc_data(vty);
545 char *str = argv_concat(argv, argc, 0);
546 if (!str)
547 return CMD_WARNING;
548
549 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_grace_txt, str);
550 talloc_free(str);
551 return CMD_SUCCESS;
552}
553
554DEFUN(cfg_net_msc_no_grace_ussd,
555 cfg_net_msc_no_grace_ussd_cmd,
556 "no bsc-grace-text",
557 NO_STR "Clear the USSD notification to be sent when the MSC has entered the grace period\n")
558{
559 struct osmo_msc_data *data = osmo_msc_data(vty);
560
561 talloc_free(data->ussd_grace_txt);
562 data->ussd_grace_txt = NULL;
563
564 return CMD_SUCCESS;
565}
566
567DEFUN(cfg_net_bsc_missing_msc_ussd,
568 cfg_net_bsc_missing_msc_ussd_cmd,
569 "missing-msc-text .TEXT",
570 "Set the USSD notification to be send when a MSC has not been found.\n" "Text to be sent\n")
571{
572 struct osmo_bsc_data *data = osmo_bsc_data(vty);
573 char *txt = argv_concat(argv, argc, 0);
574 if (!txt)
575 return CMD_WARNING;
576
577 bsc_replace_string(data, &data->ussd_no_msc_txt, txt);
578 talloc_free(txt);
579 return CMD_SUCCESS;
580}
581
582DEFUN(cfg_net_bsc_no_missing_msc_text,
583 cfg_net_bsc_no_missing_msc_text_cmd,
584 "no missing-msc-text",
585 NO_STR "Clear the USSD notification to be send when a MSC has not been found.\n")
586{
587 struct osmo_bsc_data *data = osmo_bsc_data(vty);
588
589 talloc_free(data->ussd_no_msc_txt);
590 data->ussd_no_msc_txt = 0;
591
592 return CMD_SUCCESS;
593}
594
595
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200596DEFUN(cfg_net_msc_type,
597 cfg_net_msc_type_cmd,
598 "type (normal|local)",
599 "Select the MSC type\n"
600 "Plain GSM MSC\n" "Special MSC for local call routing\n")
601{
602 struct osmo_msc_data *data = osmo_msc_data(vty);
603
604 if (strcmp(argv[0], "normal") == 0)
605 data->type = MSC_CON_TYPE_NORMAL;
606 else if (strcmp(argv[0], "local") == 0)
607 data->type = MSC_CON_TYPE_LOCAL;
608
609 return CMD_SUCCESS;
610}
611
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200612DEFUN(cfg_net_msc_emerg,
613 cfg_net_msc_emerg_cmd,
614 "allow-emergency (allow|deny)",
615 "Allow CM ServiceRequests with type emergency\n"
616 "Allow\n" "Deny\n")
617{
618 struct osmo_msc_data *data = osmo_msc_data(vty);
619 data->allow_emerg = strcmp("allow", argv[0]) == 0;
620 return CMD_SUCCESS;
621}
622
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200623DEFUN(cfg_net_msc_local_prefix,
624 cfg_net_msc_local_prefix_cmd,
625 "local-prefix REGEXP",
626 "Prefix for local numbers\n" "REGEXP used\n")
627{
628 struct osmo_msc_data *msc = osmo_msc_data(vty);
629
630 if (gsm_parse_reg(msc, &msc->local_pref_reg, &msc->local_pref, argc, argv) != 0) {
631 vty_out(vty, "%%Failed to parse the regexp: '%s'%s",
632 argv[0], VTY_NEWLINE);
633 return CMD_WARNING;
634 }
635
636 return CMD_SUCCESS;
637}
638
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200639#define AMR_CONF_STR "AMR Multirate Configuration\n"
640#define AMR_COMMAND(name) \
641 DEFUN(cfg_net_msc_amr_##name, \
642 cfg_net_msc_amr_##name##_cmd, \
643 "amr-config " #name "k (allowed|forbidden)", \
644 AMR_CONF_STR "Bitrate\n" "Allowed\n" "Forbidden\n") \
645{ \
646 struct osmo_msc_data *msc = osmo_msc_data(vty); \
647 \
648 msc->amr_conf.m##name = strcmp(argv[0], "allowed") == 0; \
649 return CMD_SUCCESS; \
650}
651
652AMR_COMMAND(12_2)
653AMR_COMMAND(10_2)
654AMR_COMMAND(7_95)
655AMR_COMMAND(7_40)
656AMR_COMMAND(6_70)
657AMR_COMMAND(5_90)
658AMR_COMMAND(5_15)
659AMR_COMMAND(4_75)
660
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200661DEFUN(cfg_msc_acc_lst_name,
662 cfg_msc_acc_lst_name_cmd,
663 "access-list-name NAME",
664 "Set the name of the access list to use.\n"
665 "The name of the to be used access list.")
666{
667 struct osmo_msc_data *msc = osmo_msc_data(vty);
668
669 bsc_replace_string(msc, &msc->acc_lst_name, argv[0]);
670 return CMD_SUCCESS;
671}
672
673DEFUN(cfg_msc_no_acc_lst_name,
674 cfg_msc_no_acc_lst_name_cmd,
675 "no access-list-name",
676 NO_STR "Remove the access list from the NAT.\n")
677{
678 struct osmo_msc_data *msc = osmo_msc_data(vty);
679
680 if (msc->acc_lst_name) {
681 talloc_free(msc->acc_lst_name);
682 msc->acc_lst_name = NULL;
683 }
684
685 return CMD_SUCCESS;
686}
687
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200688DEFUN(cfg_net_bsc_mid_call_text,
689 cfg_net_bsc_mid_call_text_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100690 "mid-call-text .TEXT",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800691 "Set the USSD notifcation to be send.\n" "Text to be sent\n")
692{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200693 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther414bc4a2010-11-22 22:27:39 +0100694 char *txt = argv_concat(argv, argc, 0);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800695 if (!txt)
696 return CMD_WARNING;
697
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100698 bsc_replace_string(data, &data->mid_call_txt, txt);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800699 talloc_free(txt);
700 return CMD_SUCCESS;
701}
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800702
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200703DEFUN(cfg_net_bsc_mid_call_timeout,
704 cfg_net_bsc_mid_call_timeout_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100705 "mid-call-timeout NR",
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100706 "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n")
707{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200708 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100709 data->mid_call_timeout = atoi(argv[0]);
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100710 return CMD_SUCCESS;
711}
712
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200713DEFUN(cfg_net_rf_socket,
714 cfg_net_rf_socket_cmd,
715 "bsc-rf-socket PATH",
716 "Set the filename for the RF control interface.\n" "RF Control path\n")
717{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200718 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200719
720 bsc_replace_string(data, &data->rf_ctrl_name, argv[0]);
721 return CMD_SUCCESS;
722}
723
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200724DEFUN(cfg_net_rf_off_time,
725 cfg_net_rf_off_time_cmd,
726 "bsc-auto-rf-off <1-65000>",
727 "Disable RF on MSC Connection\n" "Timeout\n")
728{
729 struct osmo_bsc_data *data = osmo_bsc_data(vty);
730 data->auto_off_timeout = atoi(argv[0]);
731 return CMD_SUCCESS;
732}
733
734DEFUN(cfg_net_no_rf_off_time,
735 cfg_net_no_rf_off_time_cmd,
736 "no bsc-auto-rf-off",
737 NO_STR "Disable RF on MSC Connection\n")
738{
739 struct osmo_bsc_data *data = osmo_bsc_data(vty);
740 data->auto_off_timeout = -1;
741 return CMD_SUCCESS;
742}
743
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200744DEFUN(cfg_bsc_acc_lst_name,
745 cfg_bsc_acc_lst_name_cmd,
746 "access-list-name NAME",
747 "Set the name of the access list to use.\n"
748 "The name of the to be used access list.")
749{
750 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
751
752 bsc_replace_string(bsc, &bsc->acc_lst_name, argv[0]);
753 return CMD_SUCCESS;
754}
755
756DEFUN(cfg_bsc_no_acc_lst_name,
757 cfg_bsc_no_acc_lst_name_cmd,
758 "no access-list-name",
759 NO_STR "Remove the access list from the BSC\n")
760{
761 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
762
763 if (bsc->acc_lst_name) {
764 talloc_free(bsc->acc_lst_name);
765 bsc->acc_lst_name = NULL;
766 }
767
768 return CMD_SUCCESS;
769}
770
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200771DEFUN(show_statistics,
772 show_statistics_cmd,
773 "show statistics",
774 SHOW_STR "Statistics about the BSC\n")
775{
776 openbsc_vty_print_statistics(vty, bsc_gsmnet);
777 return CMD_SUCCESS;
778}
779
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200780DEFUN(show_mscs,
781 show_mscs_cmd,
782 "show mscs",
783 SHOW_STR "MSC Connections and State\n")
784{
785 struct osmo_msc_data *msc;
786 llist_for_each_entry(msc, &bsc_gsmnet->bsc_data->mscs, entry) {
787 vty_out(vty, "MSC Nr: %d is connected: %d auth: %d.%s",
788 msc->nr,
789 msc->msc_con ? msc->msc_con->is_connected : -1,
790 msc->msc_con ? msc->msc_con->is_authenticated : -1,
791 VTY_NEWLINE);
792 }
793
794 return CMD_SUCCESS;
795}
796
Daniel Willmann7d109832012-05-14 18:43:23 +0200797DEFUN(show_pos,
798 show_pos_cmd,
799 "show position",
800 SHOW_STR "Position information of the BTS\n")
801{
802 struct gsm_bts *bts;
803 struct bts_location *curloc;
804 struct tm time;
805 char timestr[50];
806
807 llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) {
808 if (llist_empty(&bts->loc_list)) {
809 vty_out(vty, "BTS Nr: %d position invalid%s", bts->nr,
810 VTY_NEWLINE);
811 continue;
812 }
813 curloc = llist_entry(bts->loc_list.next, struct bts_location, list);
814 if (gmtime_r(&curloc->tstamp, &time) == NULL) {
815 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
816 VTY_NEWLINE);
817 continue;
818 }
819 if (asctime_r(&time, timestr) == NULL) {
820 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
821 VTY_NEWLINE);
822 continue;
823 }
824 /* Last character in asctime is \n */
825 timestr[strlen(timestr)-1] = 0;
826
827 vty_out(vty, "BTS Nr: %d position: %s time: %s%s", bts->nr,
828 get_value_string(bts_loc_fix_names, curloc->valid), timestr,
829 VTY_NEWLINE);
830 vty_out(vty, " lat: %f lon: %f height: %f%s", curloc->lat, curloc->lon,
831 curloc->height, VTY_NEWLINE);
832 }
833 return CMD_SUCCESS;
834}
835
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100836DEFUN(gen_position_trap,
837 gen_position_trap_cmd,
838 "generate-location-state-trap <0-255>",
839 "Generate location state report\n"
840 "BTS to report\n")
841{
842 int bts_nr;
843 struct gsm_bts *bts;
844 struct gsm_network *net = bsc_gsmnet;
845
846 bts_nr = atoi(argv[0]);
847 if (bts_nr >= net->num_bts) {
848 vty_out(vty, "%% can't find BTS '%s'%s", argv[0],
849 VTY_NEWLINE);
850 return CMD_WARNING;
851 }
852
853 bts = gsm_bts_num(net, bts_nr);
854 bsc_gen_location_state_trap(bts);
855 return CMD_SUCCESS;
856}
857
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100858DEFUN(logging_fltr_imsi,
859 logging_fltr_imsi_cmd,
860 "logging filter imsi IMSI",
861 LOGGING_STR FILTER_STR
862 "Filter log messages by IMSI\n" "IMSI to be used as filter\n")
863{
864 struct gsm_subscriber *subscr;
865 struct log_target *tgt = osmo_log_vty2tgt(vty);
866
867 if (!tgt)
868 return CMD_WARNING;
869
870 subscr = subscr_get_or_create(bsc_gsmnet->subscr_group, argv[0]);
871 if (!subscr) {
872 vty_out(vty, "%%no subscriber with IMSI(%s)%s",
873 argv[0], VTY_NEWLINE);
874 return CMD_WARNING;
875 }
876
877 log_set_imsi_filter(tgt, subscr);
878 return CMD_SUCCESS;
879}
880
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800881int bsc_vty_init_extra(void)
882{
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200883 install_element(CONFIG_NODE, &cfg_net_msc_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200884 install_element(CONFIG_NODE, &cfg_net_bsc_cmd);
885
886 install_node(&bsc_node, config_write_bsc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100887 vty_install_default(BSC_NODE);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200888 install_element(BSC_NODE, &cfg_net_bsc_mid_call_text_cmd);
889 install_element(BSC_NODE, &cfg_net_bsc_mid_call_timeout_cmd);
890 install_element(BSC_NODE, &cfg_net_rf_socket_cmd);
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200891 install_element(BSC_NODE, &cfg_net_rf_off_time_cmd);
892 install_element(BSC_NODE, &cfg_net_no_rf_off_time_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200893 install_element(BSC_NODE, &cfg_net_bsc_missing_msc_ussd_cmd);
894 install_element(BSC_NODE, &cfg_net_bsc_no_missing_msc_text_cmd);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200895 install_element(BSC_NODE, &cfg_bsc_acc_lst_name_cmd);
896 install_element(BSC_NODE, &cfg_bsc_no_acc_lst_name_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200897
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800898 install_node(&msc_node, config_write_msc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100899 vty_install_default(MSC_NODE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800900 install_element(MSC_NODE, &cfg_net_bsc_token_cmd);
Holger Hans Peter Freythere2ac6b72015-06-08 18:02:10 +0200901 install_element(MSC_NODE, &cfg_net_bsc_key_cmd);
902 install_element(MSC_NODE, &cfg_net_bsc_no_key_cmd);
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100903 install_element(MSC_NODE, &cfg_net_bsc_ncc_cmd);
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100904 install_element(MSC_NODE, &cfg_net_bsc_mcc_cmd);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200905 install_element(MSC_NODE, &cfg_net_bsc_lac_cmd);
906 install_element(MSC_NODE, &cfg_net_bsc_ci_cmd);
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100907 install_element(MSC_NODE, &cfg_net_bsc_rtp_base_cmd);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100908 install_element(MSC_NODE, &cfg_net_bsc_codec_list_cmd);
Holger Hans Peter Freythere18801052011-04-23 23:31:31 +0200909 install_element(MSC_NODE, &cfg_net_msc_dest_cmd);
910 install_element(MSC_NODE, &cfg_net_msc_no_dest_cmd);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100911 install_element(MSC_NODE, &cfg_net_msc_no_ping_time_cmd);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800912 install_element(MSC_NODE, &cfg_net_msc_ping_time_cmd);
913 install_element(MSC_NODE, &cfg_net_msc_pong_time_cmd);
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200914 install_element(MSC_NODE, &cfg_net_msc_advanced_ping_cmd);
915 install_element(MSC_NODE, &cfg_no_net_msc_advanced_ping_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200916 install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200917 install_element(MSC_NODE, &cfg_net_msc_no_welcome_ussd_cmd);
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200918 install_element(MSC_NODE, &cfg_net_msc_lost_ussd_cmd);
919 install_element(MSC_NODE, &cfg_net_msc_no_lost_ussd_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200920 install_element(MSC_NODE, &cfg_net_msc_grace_ussd_cmd);
921 install_element(MSC_NODE, &cfg_net_msc_no_grace_ussd_cmd);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200922 install_element(MSC_NODE, &cfg_net_msc_type_cmd);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200923 install_element(MSC_NODE, &cfg_net_msc_emerg_cmd);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200924 install_element(MSC_NODE, &cfg_net_msc_local_prefix_cmd);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200925 install_element(MSC_NODE, &cfg_net_msc_amr_12_2_cmd);
926 install_element(MSC_NODE, &cfg_net_msc_amr_10_2_cmd);
927 install_element(MSC_NODE, &cfg_net_msc_amr_7_95_cmd);
928 install_element(MSC_NODE, &cfg_net_msc_amr_7_40_cmd);
929 install_element(MSC_NODE, &cfg_net_msc_amr_6_70_cmd);
930 install_element(MSC_NODE, &cfg_net_msc_amr_5_90_cmd);
931 install_element(MSC_NODE, &cfg_net_msc_amr_5_15_cmd);
932 install_element(MSC_NODE, &cfg_net_msc_amr_4_75_cmd);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200933 install_element(MSC_NODE, &cfg_msc_acc_lst_name_cmd);
934 install_element(MSC_NODE, &cfg_msc_no_acc_lst_name_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200935
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200936 install_element_ve(&show_statistics_cmd);
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200937 install_element_ve(&show_mscs_cmd);
Daniel Willmann7d109832012-05-14 18:43:23 +0200938 install_element_ve(&show_pos_cmd);
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100939 install_element_ve(&logging_fltr_imsi_cmd);
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200940
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100941 install_element(ENABLE_NODE, &gen_position_trap_cmd);
942
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100943 install_element(CFG_LOG_NODE, &logging_fltr_imsi_cmd);
944
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800945 return 0;
946}