blob: 06ad77d59ac10c56cffec6f59fbf795ca484338d [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 Freythere1880102011-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);
110 if (msc->core_ncc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200111 vty_out(vty, " core-mobile-network-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200112 msc->core_ncc, VTY_NEWLINE);
113 if (msc->core_mcc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200114 vty_out(vty, " core-mobile-country-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200115 msc->core_mcc, VTY_NEWLINE);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200116 if (msc->core_lac != -1)
117 vty_out(vty, " core-location-area-code %d%s",
118 msc->core_lac, VTY_NEWLINE);
119 if (msc->core_ci != -1)
120 vty_out(vty, " core-cell-identity %d%s",
121 msc->core_ci, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200122 vty_out(vty, " ip.access rtp-base %d%s", msc->rtp_base, VTY_NEWLINE);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100123
124 if (msc->ping_timeout == -1)
125 vty_out(vty, " no timeout-ping%s", VTY_NEWLINE);
126 else {
127 vty_out(vty, " timeout-ping %d%s", msc->ping_timeout, VTY_NEWLINE);
128 vty_out(vty, " timeout-pong %d%s", msc->pong_timeout, VTY_NEWLINE);
129 if (msc->advanced_ping)
130 vty_out(vty, " timeout-ping advanced%s", VTY_NEWLINE);
131 else
132 vty_out(vty, " no timeout-ping advanced%s", VTY_NEWLINE);
133 }
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200134
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200135 if (msc->ussd_welcome_txt)
136 vty_out(vty, " bsc-welcome-text %s%s", msc->ussd_welcome_txt, VTY_NEWLINE);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200137 else
138 vty_out(vty, " no bsc-welcome-text%s", VTY_NEWLINE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800139
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200140 if (msc->ussd_msc_lost_txt && msc->ussd_msc_lost_txt[0])
141 vty_out(vty, " bsc-msc-lost-text %s%s", msc->ussd_msc_lost_txt, VTY_NEWLINE);
142 else
143 vty_out(vty, " no bsc-msc-lost-text%s", VTY_NEWLINE);
144
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200145 if (msc->ussd_grace_txt && msc->ussd_grace_txt[0])
146 vty_out(vty, " bsc-grace-text %s%s", msc->ussd_grace_txt, VTY_NEWLINE);
147 else
148 vty_out(vty, " no bsc-grace-text%s", VTY_NEWLINE);
149
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200150 if (msc->audio_length != 0) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100151 int i;
152
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200153 vty_out(vty, " codec-list ");
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200154 for (i = 0; i < msc->audio_length; ++i) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100155 if (i != 0)
Harald Welte22ce5982013-06-19 15:32:27 +0200156 vty_out(vty, " ");
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100157
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200158 if (msc->audio_support[i]->hr)
159 vty_out(vty, "hr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100160 else
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200161 vty_out(vty, "fr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100162 }
163 vty_out(vty, "%s", VTY_NEWLINE);
164
165 }
166
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200167 llist_for_each_entry(dest, &msc->dests, list)
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200168 vty_out(vty, " dest %s %d %d%s", dest->ip, dest->port,
169 dest->dscp, VTY_NEWLINE);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200170
171 vty_out(vty, " type %s%s", msc->type == MSC_CON_TYPE_NORMAL ?
172 "normal" : "local", VTY_NEWLINE);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200173 vty_out(vty, " allow-emergency %s%s", msc->allow_emerg ?
174 "allow" : "deny", VTY_NEWLINE);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200175
176 if (msc->local_pref)
177 vty_out(vty, " local-prefix %s%s", msc->local_pref, VTY_NEWLINE);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200178
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200179 if (msc->acc_lst_name)
180 vty_out(vty, " access-list-name %s%s", msc->acc_lst_name, VTY_NEWLINE);
181
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200182 /* write amr options */
183 write_msc_amr_options(vty, msc);
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200184}
185
186static int config_write_msc(struct vty *vty)
187{
188 struct osmo_msc_data *msc;
189 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
190
191 llist_for_each_entry(msc, &bsc->mscs, entry)
192 write_msc(vty, msc);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200193
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200194 return CMD_SUCCESS;
195}
196
197static int config_write_bsc(struct vty *vty)
198{
199 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
200
201 vty_out(vty, "bsc%s", VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200202 if (bsc->mid_call_txt)
203 vty_out(vty, " mid-call-text %s%s", bsc->mid_call_txt, VTY_NEWLINE);
204 vty_out(vty, " mid-call-timeout %d%s", bsc->mid_call_timeout, VTY_NEWLINE);
205 if (bsc->rf_ctrl_name)
206 vty_out(vty, " bsc-rf-socket %s%s",
207 bsc->rf_ctrl_name, VTY_NEWLINE);
208
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200209 if (bsc->auto_off_timeout != -1)
210 vty_out(vty, " bsc-auto-rf-off %d%s",
211 bsc->auto_off_timeout, VTY_NEWLINE);
212
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200213 if (bsc->ussd_no_msc_txt && bsc->ussd_no_msc_txt[0])
214 vty_out(vty, " missing-msc-text %s%s", bsc->ussd_no_msc_txt, VTY_NEWLINE);
215 else
216 vty_out(vty, " no missing-msc-text%s", VTY_NEWLINE);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200217 if (bsc->acc_lst_name)
218 vty_out(vty, " access-list-name %s%s", bsc->acc_lst_name, VTY_NEWLINE);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200219
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800220 return CMD_SUCCESS;
221}
222
Holger Hans Peter Freyther5b848f32010-11-03 13:11:14 +0100223DEFUN(cfg_net_bsc_token,
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800224 cfg_net_bsc_token_cmd,
225 "token TOKEN",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100226 "A token for the BSC to be sent to the MSC\n" "A token\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800227{
228 struct osmo_msc_data *data = osmo_msc_data(vty);
229
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200230 bsc_replace_string(osmo_bsc_data(vty), &data->bsc_token, argv[0]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800231 return CMD_SUCCESS;
232}
233
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100234DEFUN(cfg_net_bsc_ncc,
235 cfg_net_bsc_ncc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100236 "core-mobile-network-code <1-999>",
Holger Hans Peter Freyther768580b2014-07-08 12:48:49 +0200237 "Use this network code for the core network\n" "NCC value\n")
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100238{
239 struct osmo_msc_data *data = osmo_msc_data(vty);
240 data->core_ncc = atoi(argv[0]);
241 return CMD_SUCCESS;
242}
243
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100244DEFUN(cfg_net_bsc_mcc,
245 cfg_net_bsc_mcc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100246 "core-mobile-country-code <1-999>",
Holger Hans Peter Freyther768580b2014-07-08 12:48:49 +0200247 "Use this country code for the core network\n" "MCC value\n")
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100248{
249 struct osmo_msc_data *data = osmo_msc_data(vty);
250 data->core_mcc = atoi(argv[0]);
251 return CMD_SUCCESS;
252}
253
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200254DEFUN(cfg_net_bsc_lac,
255 cfg_net_bsc_lac_cmd,
256 "core-location-area-code <0-65535>",
257 "Use this location area code for the core network\n" "LAC value\n")
258{
259 struct osmo_msc_data *data = osmo_msc_data(vty);
260 data->core_lac = atoi(argv[0]);
261 return CMD_SUCCESS;
262}
263
264DEFUN(cfg_net_bsc_ci,
265 cfg_net_bsc_ci_cmd,
266 "core-cell-identity <0-65535>",
267 "Use this cell identity for the core network\n" "CI value\n")
268{
269 struct osmo_msc_data *data = osmo_msc_data(vty);
270 data->core_ci = atoi(argv[0]);
271 return CMD_SUCCESS;
272}
273
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100274DEFUN(cfg_net_bsc_rtp_base,
275 cfg_net_bsc_rtp_base_cmd,
276 "ip.access rtp-base <1-65000>",
277 IPA_STR
278 "Set the rtp-base port for the RTP stream\n"
279 "Port number\n")
280{
281 struct osmo_msc_data *data = osmo_msc_data(vty);
282 data->rtp_base = atoi(argv[0]);
283 return CMD_SUCCESS;
284}
285
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100286DEFUN(cfg_net_bsc_codec_list,
287 cfg_net_bsc_codec_list_cmd,
288 "codec-list .LIST",
289 "Set the allowed audio codecs\n"
290 "List of audio codecs\n")
291{
292 struct osmo_msc_data *data = osmo_msc_data(vty);
293 int saw_fr, saw_hr;
294 int i;
295
296 saw_fr = saw_hr = 0;
297
298 /* free the old list... if it exists */
299 if (data->audio_support) {
300 talloc_free(data->audio_support);
301 data->audio_support = NULL;
302 data->audio_length = 0;
303 }
304
305 /* create a new array */
306 data->audio_support =
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200307 talloc_zero_array(osmo_bsc_data(vty), struct gsm_audio_support *, argc);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100308 data->audio_length = argc;
309
310 for (i = 0; i < argc; ++i) {
311 /* check for hrX or frX */
312 if (strlen(argv[i]) != 3
313 || argv[i][1] != 'r'
314 || (argv[i][0] != 'h' && argv[i][0] != 'f')
315 || argv[i][2] < 0x30
316 || argv[i][2] > 0x39)
317 goto error;
318
319 data->audio_support[i] = talloc_zero(data->audio_support,
320 struct gsm_audio_support);
321 data->audio_support[i]->ver = atoi(argv[i] + 2);
322
323 if (strncmp("hr", argv[i], 2) == 0) {
324 data->audio_support[i]->hr = 1;
325 saw_hr = 1;
326 } else if (strncmp("fr", argv[i], 2) == 0) {
327 data->audio_support[i]->hr = 0;
328 saw_fr = 1;
329 }
330
331 if (saw_hr && saw_fr) {
332 vty_out(vty, "Can not have full-rate and half-rate codec.%s",
333 VTY_NEWLINE);
334 return CMD_ERR_INCOMPLETE;
335 }
336 }
337
338 return CMD_SUCCESS;
339
340error:
341 vty_out(vty, "Codec name must be hrX or frX. Was '%s'%s",
342 argv[i], VTY_NEWLINE);
343 return CMD_ERR_INCOMPLETE;
344}
345
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200346DEFUN(cfg_net_msc_dest,
347 cfg_net_msc_dest_cmd,
348 "dest A.B.C.D <1-65000> <0-255>",
349 "Add a destination to a MUX/MSC\n"
350 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800351{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200352 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800353 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800354
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200355 dest = talloc_zero(osmo_bsc_data(vty), struct bsc_msc_dest);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200356 if (!dest) {
357 vty_out(vty, "%%Failed to create structure.%s", VTY_NEWLINE);
358 return CMD_WARNING;
359 }
360
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200361 dest->ip = talloc_strdup(dest, argv[0]);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200362 if (!dest->ip) {
363 vty_out(vty, "%%Failed to copy dest ip.%s", VTY_NEWLINE);
364 talloc_free(dest);
365 return CMD_WARNING;
366 }
367
368 dest->port = atoi(argv[1]);
369 dest->dscp = atoi(argv[2]);
370 llist_add_tail(&dest->list, &data->dests);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800371 return CMD_SUCCESS;
372}
373
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200374DEFUN(cfg_net_msc_no_dest,
375 cfg_net_msc_no_dest_cmd,
376 "no dest A.B.C.D <1-65000> <0-255>",
377 NO_STR "Remove a destination to a MUX/MSC\n"
378 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800379{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200380 struct bsc_msc_dest *dest, *tmp;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800381 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800382
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200383 int port = atoi(argv[1]);
384 int dscp = atoi(argv[2]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800385
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200386 llist_for_each_entry_safe(dest, tmp, &data->dests, list) {
387 if (port != dest->port || dscp != dest->dscp
388 || strcmp(dest->ip, argv[0]) != 0)
389 continue;
390
391 llist_del(&dest->list);
392 talloc_free(dest);
393 }
394
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800395 return CMD_SUCCESS;
396}
397
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100398DEFUN(cfg_net_msc_no_ping_time,
399 cfg_net_msc_no_ping_time_cmd,
400 "no timeout-ping",
401 NO_STR "Disable the ping/pong handling on A-link\n")
402{
403 struct osmo_msc_data *data = osmo_msc_data(vty);
404 data->ping_timeout = -1;
405 return CMD_SUCCESS;
406}
407
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800408DEFUN(cfg_net_msc_ping_time,
409 cfg_net_msc_ping_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200410 "timeout-ping <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100411 "Set the PING interval, negative for not sending PING\n"
412 "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800413{
414 struct osmo_msc_data *data = osmo_msc_data(vty);
415 data->ping_timeout = atoi(argv[0]);
416 return CMD_SUCCESS;
417}
418
419DEFUN(cfg_net_msc_pong_time,
420 cfg_net_msc_pong_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200421 "timeout-pong <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100422 "Set the time to wait for a PONG\n" "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800423{
424 struct osmo_msc_data *data = osmo_msc_data(vty);
425 data->pong_timeout = atoi(argv[0]);
426 return CMD_SUCCESS;
427}
428
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200429DEFUN(cfg_net_msc_advanced_ping,
430 cfg_net_msc_advanced_ping_cmd,
431 "timeout-ping advanced",
432 "Ping timeout handling\nEnable advanced mode during SCCP\n")
433{
434 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100435
436 if (data->ping_timeout == -1) {
437 vty_out(vty, "%%ping handling is disabled. Enable it first.%s",
438 VTY_NEWLINE);
439 return CMD_WARNING;
440 }
441
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200442 data->advanced_ping = 1;
443 return CMD_SUCCESS;
444}
445
446DEFUN(cfg_no_net_msc_advanced_ping,
447 cfg_no_net_msc_advanced_ping_cmd,
448 "no timeout-ping advanced",
449 NO_STR "Ping timeout handling\nEnable advanced mode during SCCP\n")
450{
451 struct osmo_msc_data *data = osmo_msc_data(vty);
452 data->advanced_ping = 0;
453 return CMD_SUCCESS;
454}
455
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200456DEFUN(cfg_net_msc_welcome_ussd,
457 cfg_net_msc_welcome_ussd_cmd,
458 "bsc-welcome-text .TEXT",
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200459 "Set the USSD notification to be sent\n" "Text to be sent\n")
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200460{
461 struct osmo_msc_data *data = osmo_msc_data(vty);
462 char *str = argv_concat(argv, argc, 0);
463 if (!str)
464 return CMD_WARNING;
465
466 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_welcome_txt, str);
467 talloc_free(str);
468 return CMD_SUCCESS;
469}
470
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200471DEFUN(cfg_net_msc_no_welcome_ussd,
472 cfg_net_msc_no_welcome_ussd_cmd,
473 "no bsc-welcome-text",
474 NO_STR "Clear the USSD notification to be sent\n")
475{
476 struct osmo_msc_data *data = osmo_msc_data(vty);
477
478 talloc_free(data->ussd_welcome_txt);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200479 data->ussd_welcome_txt = NULL;
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200480
481 return CMD_SUCCESS;
482}
483
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200484DEFUN(cfg_net_msc_lost_ussd,
485 cfg_net_msc_lost_ussd_cmd,
486 "bsc-msc-lost-text .TEXT",
487 "Set the USSD notification to be sent on MSC connection loss\n" "Text to be sent\n")
488{
489 struct osmo_msc_data *data = osmo_msc_data(vty);
490 char *str = argv_concat(argv, argc, 0);
491 if (!str)
492 return CMD_WARNING;
493
494 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_msc_lost_txt, str);
495 talloc_free(str);
496 return CMD_SUCCESS;
497}
498
499DEFUN(cfg_net_msc_no_lost_ussd,
500 cfg_net_msc_no_lost_ussd_cmd,
501 "no bsc-msc-lost-text",
502 NO_STR "Clear the USSD notification to be sent on MSC connection loss\n")
503{
504 struct osmo_msc_data *data = osmo_msc_data(vty);
505
506 talloc_free(data->ussd_msc_lost_txt);
507 data->ussd_msc_lost_txt = 0;
508
509 return CMD_SUCCESS;
510}
511
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200512DEFUN(cfg_net_msc_grace_ussd,
513 cfg_net_msc_grace_ussd_cmd,
514 "bsc-grace-text .TEXT",
515 "Set the USSD notification to be sent when the MSC has entered the grace period\n" "Text to be sent\n")
516{
517 struct osmo_msc_data *data = osmo_msc_data(vty);
518 char *str = argv_concat(argv, argc, 0);
519 if (!str)
520 return CMD_WARNING;
521
522 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_grace_txt, str);
523 talloc_free(str);
524 return CMD_SUCCESS;
525}
526
527DEFUN(cfg_net_msc_no_grace_ussd,
528 cfg_net_msc_no_grace_ussd_cmd,
529 "no bsc-grace-text",
530 NO_STR "Clear the USSD notification to be sent when the MSC has entered the grace period\n")
531{
532 struct osmo_msc_data *data = osmo_msc_data(vty);
533
534 talloc_free(data->ussd_grace_txt);
535 data->ussd_grace_txt = NULL;
536
537 return CMD_SUCCESS;
538}
539
540DEFUN(cfg_net_bsc_missing_msc_ussd,
541 cfg_net_bsc_missing_msc_ussd_cmd,
542 "missing-msc-text .TEXT",
543 "Set the USSD notification to be send when a MSC has not been found.\n" "Text to be sent\n")
544{
545 struct osmo_bsc_data *data = osmo_bsc_data(vty);
546 char *txt = argv_concat(argv, argc, 0);
547 if (!txt)
548 return CMD_WARNING;
549
550 bsc_replace_string(data, &data->ussd_no_msc_txt, txt);
551 talloc_free(txt);
552 return CMD_SUCCESS;
553}
554
555DEFUN(cfg_net_bsc_no_missing_msc_text,
556 cfg_net_bsc_no_missing_msc_text_cmd,
557 "no missing-msc-text",
558 NO_STR "Clear the USSD notification to be send when a MSC has not been found.\n")
559{
560 struct osmo_bsc_data *data = osmo_bsc_data(vty);
561
562 talloc_free(data->ussd_no_msc_txt);
563 data->ussd_no_msc_txt = 0;
564
565 return CMD_SUCCESS;
566}
567
568
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200569DEFUN(cfg_net_msc_type,
570 cfg_net_msc_type_cmd,
571 "type (normal|local)",
572 "Select the MSC type\n"
573 "Plain GSM MSC\n" "Special MSC for local call routing\n")
574{
575 struct osmo_msc_data *data = osmo_msc_data(vty);
576
577 if (strcmp(argv[0], "normal") == 0)
578 data->type = MSC_CON_TYPE_NORMAL;
579 else if (strcmp(argv[0], "local") == 0)
580 data->type = MSC_CON_TYPE_LOCAL;
581
582 return CMD_SUCCESS;
583}
584
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200585DEFUN(cfg_net_msc_emerg,
586 cfg_net_msc_emerg_cmd,
587 "allow-emergency (allow|deny)",
588 "Allow CM ServiceRequests with type emergency\n"
589 "Allow\n" "Deny\n")
590{
591 struct osmo_msc_data *data = osmo_msc_data(vty);
592 data->allow_emerg = strcmp("allow", argv[0]) == 0;
593 return CMD_SUCCESS;
594}
595
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200596DEFUN(cfg_net_msc_local_prefix,
597 cfg_net_msc_local_prefix_cmd,
598 "local-prefix REGEXP",
599 "Prefix for local numbers\n" "REGEXP used\n")
600{
601 struct osmo_msc_data *msc = osmo_msc_data(vty);
602
603 if (gsm_parse_reg(msc, &msc->local_pref_reg, &msc->local_pref, argc, argv) != 0) {
604 vty_out(vty, "%%Failed to parse the regexp: '%s'%s",
605 argv[0], VTY_NEWLINE);
606 return CMD_WARNING;
607 }
608
609 return CMD_SUCCESS;
610}
611
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200612#define AMR_CONF_STR "AMR Multirate Configuration\n"
613#define AMR_COMMAND(name) \
614 DEFUN(cfg_net_msc_amr_##name, \
615 cfg_net_msc_amr_##name##_cmd, \
616 "amr-config " #name "k (allowed|forbidden)", \
617 AMR_CONF_STR "Bitrate\n" "Allowed\n" "Forbidden\n") \
618{ \
619 struct osmo_msc_data *msc = osmo_msc_data(vty); \
620 \
621 msc->amr_conf.m##name = strcmp(argv[0], "allowed") == 0; \
622 return CMD_SUCCESS; \
623}
624
625AMR_COMMAND(12_2)
626AMR_COMMAND(10_2)
627AMR_COMMAND(7_95)
628AMR_COMMAND(7_40)
629AMR_COMMAND(6_70)
630AMR_COMMAND(5_90)
631AMR_COMMAND(5_15)
632AMR_COMMAND(4_75)
633
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200634DEFUN(cfg_msc_acc_lst_name,
635 cfg_msc_acc_lst_name_cmd,
636 "access-list-name NAME",
637 "Set the name of the access list to use.\n"
638 "The name of the to be used access list.")
639{
640 struct osmo_msc_data *msc = osmo_msc_data(vty);
641
642 bsc_replace_string(msc, &msc->acc_lst_name, argv[0]);
643 return CMD_SUCCESS;
644}
645
646DEFUN(cfg_msc_no_acc_lst_name,
647 cfg_msc_no_acc_lst_name_cmd,
648 "no access-list-name",
649 NO_STR "Remove the access list from the NAT.\n")
650{
651 struct osmo_msc_data *msc = osmo_msc_data(vty);
652
653 if (msc->acc_lst_name) {
654 talloc_free(msc->acc_lst_name);
655 msc->acc_lst_name = NULL;
656 }
657
658 return CMD_SUCCESS;
659}
660
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200661DEFUN(cfg_net_bsc_mid_call_text,
662 cfg_net_bsc_mid_call_text_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100663 "mid-call-text .TEXT",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800664 "Set the USSD notifcation to be send.\n" "Text to be sent\n")
665{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200666 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther414bc4a2010-11-22 22:27:39 +0100667 char *txt = argv_concat(argv, argc, 0);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800668 if (!txt)
669 return CMD_WARNING;
670
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100671 bsc_replace_string(data, &data->mid_call_txt, txt);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800672 talloc_free(txt);
673 return CMD_SUCCESS;
674}
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800675
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200676DEFUN(cfg_net_bsc_mid_call_timeout,
677 cfg_net_bsc_mid_call_timeout_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100678 "mid-call-timeout NR",
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100679 "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n")
680{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200681 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100682 data->mid_call_timeout = atoi(argv[0]);
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100683 return CMD_SUCCESS;
684}
685
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200686DEFUN(cfg_net_rf_socket,
687 cfg_net_rf_socket_cmd,
688 "bsc-rf-socket PATH",
689 "Set the filename for the RF control interface.\n" "RF Control path\n")
690{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200691 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200692
693 bsc_replace_string(data, &data->rf_ctrl_name, argv[0]);
694 return CMD_SUCCESS;
695}
696
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200697DEFUN(cfg_net_rf_off_time,
698 cfg_net_rf_off_time_cmd,
699 "bsc-auto-rf-off <1-65000>",
700 "Disable RF on MSC Connection\n" "Timeout\n")
701{
702 struct osmo_bsc_data *data = osmo_bsc_data(vty);
703 data->auto_off_timeout = atoi(argv[0]);
704 return CMD_SUCCESS;
705}
706
707DEFUN(cfg_net_no_rf_off_time,
708 cfg_net_no_rf_off_time_cmd,
709 "no bsc-auto-rf-off",
710 NO_STR "Disable RF on MSC Connection\n")
711{
712 struct osmo_bsc_data *data = osmo_bsc_data(vty);
713 data->auto_off_timeout = -1;
714 return CMD_SUCCESS;
715}
716
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200717DEFUN(cfg_bsc_acc_lst_name,
718 cfg_bsc_acc_lst_name_cmd,
719 "access-list-name NAME",
720 "Set the name of the access list to use.\n"
721 "The name of the to be used access list.")
722{
723 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
724
725 bsc_replace_string(bsc, &bsc->acc_lst_name, argv[0]);
726 return CMD_SUCCESS;
727}
728
729DEFUN(cfg_bsc_no_acc_lst_name,
730 cfg_bsc_no_acc_lst_name_cmd,
731 "no access-list-name",
732 NO_STR "Remove the access list from the BSC\n")
733{
734 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
735
736 if (bsc->acc_lst_name) {
737 talloc_free(bsc->acc_lst_name);
738 bsc->acc_lst_name = NULL;
739 }
740
741 return CMD_SUCCESS;
742}
743
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200744DEFUN(show_statistics,
745 show_statistics_cmd,
746 "show statistics",
747 SHOW_STR "Statistics about the BSC\n")
748{
749 openbsc_vty_print_statistics(vty, bsc_gsmnet);
750 return CMD_SUCCESS;
751}
752
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200753DEFUN(show_mscs,
754 show_mscs_cmd,
755 "show mscs",
756 SHOW_STR "MSC Connections and State\n")
757{
758 struct osmo_msc_data *msc;
759 llist_for_each_entry(msc, &bsc_gsmnet->bsc_data->mscs, entry) {
760 vty_out(vty, "MSC Nr: %d is connected: %d auth: %d.%s",
761 msc->nr,
762 msc->msc_con ? msc->msc_con->is_connected : -1,
763 msc->msc_con ? msc->msc_con->is_authenticated : -1,
764 VTY_NEWLINE);
765 }
766
767 return CMD_SUCCESS;
768}
769
Daniel Willmann7d109832012-05-14 18:43:23 +0200770DEFUN(show_pos,
771 show_pos_cmd,
772 "show position",
773 SHOW_STR "Position information of the BTS\n")
774{
775 struct gsm_bts *bts;
776 struct bts_location *curloc;
777 struct tm time;
778 char timestr[50];
779
780 llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) {
781 if (llist_empty(&bts->loc_list)) {
782 vty_out(vty, "BTS Nr: %d position invalid%s", bts->nr,
783 VTY_NEWLINE);
784 continue;
785 }
786 curloc = llist_entry(bts->loc_list.next, struct bts_location, list);
787 if (gmtime_r(&curloc->tstamp, &time) == NULL) {
788 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
789 VTY_NEWLINE);
790 continue;
791 }
792 if (asctime_r(&time, timestr) == NULL) {
793 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
794 VTY_NEWLINE);
795 continue;
796 }
797 /* Last character in asctime is \n */
798 timestr[strlen(timestr)-1] = 0;
799
800 vty_out(vty, "BTS Nr: %d position: %s time: %s%s", bts->nr,
801 get_value_string(bts_loc_fix_names, curloc->valid), timestr,
802 VTY_NEWLINE);
803 vty_out(vty, " lat: %f lon: %f height: %f%s", curloc->lat, curloc->lon,
804 curloc->height, VTY_NEWLINE);
805 }
806 return CMD_SUCCESS;
807}
808
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100809DEFUN(gen_position_trap,
810 gen_position_trap_cmd,
811 "generate-location-state-trap <0-255>",
812 "Generate location state report\n"
813 "BTS to report\n")
814{
815 int bts_nr;
816 struct gsm_bts *bts;
817 struct gsm_network *net = bsc_gsmnet;
818
819 bts_nr = atoi(argv[0]);
820 if (bts_nr >= net->num_bts) {
821 vty_out(vty, "%% can't find BTS '%s'%s", argv[0],
822 VTY_NEWLINE);
823 return CMD_WARNING;
824 }
825
826 bts = gsm_bts_num(net, bts_nr);
827 bsc_gen_location_state_trap(bts);
828 return CMD_SUCCESS;
829}
830
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100831DEFUN(logging_fltr_imsi,
832 logging_fltr_imsi_cmd,
833 "logging filter imsi IMSI",
834 LOGGING_STR FILTER_STR
835 "Filter log messages by IMSI\n" "IMSI to be used as filter\n")
836{
837 struct gsm_subscriber *subscr;
838 struct log_target *tgt = osmo_log_vty2tgt(vty);
839
840 if (!tgt)
841 return CMD_WARNING;
842
843 subscr = subscr_get_or_create(bsc_gsmnet->subscr_group, argv[0]);
844 if (!subscr) {
845 vty_out(vty, "%%no subscriber with IMSI(%s)%s",
846 argv[0], VTY_NEWLINE);
847 return CMD_WARNING;
848 }
849
850 log_set_imsi_filter(tgt, subscr);
851 return CMD_SUCCESS;
852}
853
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800854int bsc_vty_init_extra(void)
855{
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200856 install_element(CONFIG_NODE, &cfg_net_msc_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200857 install_element(CONFIG_NODE, &cfg_net_bsc_cmd);
858
859 install_node(&bsc_node, config_write_bsc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100860 vty_install_default(BSC_NODE);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200861 install_element(BSC_NODE, &cfg_net_bsc_mid_call_text_cmd);
862 install_element(BSC_NODE, &cfg_net_bsc_mid_call_timeout_cmd);
863 install_element(BSC_NODE, &cfg_net_rf_socket_cmd);
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200864 install_element(BSC_NODE, &cfg_net_rf_off_time_cmd);
865 install_element(BSC_NODE, &cfg_net_no_rf_off_time_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200866 install_element(BSC_NODE, &cfg_net_bsc_missing_msc_ussd_cmd);
867 install_element(BSC_NODE, &cfg_net_bsc_no_missing_msc_text_cmd);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200868 install_element(BSC_NODE, &cfg_bsc_acc_lst_name_cmd);
869 install_element(BSC_NODE, &cfg_bsc_no_acc_lst_name_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200870
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800871 install_node(&msc_node, config_write_msc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100872 vty_install_default(MSC_NODE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800873 install_element(MSC_NODE, &cfg_net_bsc_token_cmd);
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100874 install_element(MSC_NODE, &cfg_net_bsc_ncc_cmd);
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100875 install_element(MSC_NODE, &cfg_net_bsc_mcc_cmd);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200876 install_element(MSC_NODE, &cfg_net_bsc_lac_cmd);
877 install_element(MSC_NODE, &cfg_net_bsc_ci_cmd);
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100878 install_element(MSC_NODE, &cfg_net_bsc_rtp_base_cmd);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100879 install_element(MSC_NODE, &cfg_net_bsc_codec_list_cmd);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200880 install_element(MSC_NODE, &cfg_net_msc_dest_cmd);
881 install_element(MSC_NODE, &cfg_net_msc_no_dest_cmd);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100882 install_element(MSC_NODE, &cfg_net_msc_no_ping_time_cmd);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800883 install_element(MSC_NODE, &cfg_net_msc_ping_time_cmd);
884 install_element(MSC_NODE, &cfg_net_msc_pong_time_cmd);
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200885 install_element(MSC_NODE, &cfg_net_msc_advanced_ping_cmd);
886 install_element(MSC_NODE, &cfg_no_net_msc_advanced_ping_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200887 install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200888 install_element(MSC_NODE, &cfg_net_msc_no_welcome_ussd_cmd);
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200889 install_element(MSC_NODE, &cfg_net_msc_lost_ussd_cmd);
890 install_element(MSC_NODE, &cfg_net_msc_no_lost_ussd_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200891 install_element(MSC_NODE, &cfg_net_msc_grace_ussd_cmd);
892 install_element(MSC_NODE, &cfg_net_msc_no_grace_ussd_cmd);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200893 install_element(MSC_NODE, &cfg_net_msc_type_cmd);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200894 install_element(MSC_NODE, &cfg_net_msc_emerg_cmd);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200895 install_element(MSC_NODE, &cfg_net_msc_local_prefix_cmd);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200896 install_element(MSC_NODE, &cfg_net_msc_amr_12_2_cmd);
897 install_element(MSC_NODE, &cfg_net_msc_amr_10_2_cmd);
898 install_element(MSC_NODE, &cfg_net_msc_amr_7_95_cmd);
899 install_element(MSC_NODE, &cfg_net_msc_amr_7_40_cmd);
900 install_element(MSC_NODE, &cfg_net_msc_amr_6_70_cmd);
901 install_element(MSC_NODE, &cfg_net_msc_amr_5_90_cmd);
902 install_element(MSC_NODE, &cfg_net_msc_amr_5_15_cmd);
903 install_element(MSC_NODE, &cfg_net_msc_amr_4_75_cmd);
Holger Hans Peter Freytherd6332802015-04-05 19:46:20 +0200904 install_element(MSC_NODE, &cfg_msc_acc_lst_name_cmd);
905 install_element(MSC_NODE, &cfg_msc_no_acc_lst_name_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200906
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200907 install_element_ve(&show_statistics_cmd);
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200908 install_element_ve(&show_mscs_cmd);
Daniel Willmann7d109832012-05-14 18:43:23 +0200909 install_element_ve(&show_pos_cmd);
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100910 install_element_ve(&logging_fltr_imsi_cmd);
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200911
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100912 install_element(ENABLE_NODE, &gen_position_trap_cmd);
913
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100914 install_element(CFG_LOG_NODE, &logging_fltr_imsi_cmd);
915
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800916 return 0;
917}