blob: bbbba1cd29bb120f0e1b79e9340a03e997a8892c [file] [log] [blame]
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +08001/* Osmo BSC VTY Configuration */
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +01002/* (C) 2009-2014 by Holger Hans Peter Freyther
3 * (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 Freyther47b26012010-09-15 23:28:49 +080027
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +010028#include <osmocom/core/talloc.h>
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +010029#include <osmocom/vty/logging.h>
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080030
Daniel Willmann7d109832012-05-14 18:43:23 +020031#include <time.h>
32
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +010033
34#define IPA_STR "IP.ACCESS specific\n"
35
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080036extern struct gsm_network *bsc_gsmnet;
37
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +020038static struct osmo_bsc_data *osmo_bsc_data(struct vty *vty)
39{
40 return bsc_gsmnet->bsc_data;
41}
42
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080043static struct osmo_msc_data *osmo_msc_data(struct vty *vty)
44{
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020045 return osmo_msc_data_find(bsc_gsmnet, (int) vty->index);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080046}
47
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020048static struct cmd_node bsc_node = {
49 BSC_NODE,
Jacob Erlbeck0b4f1b92013-08-30 18:33:58 +020050 "%s(config-bsc)# ",
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020051 1,
52};
53
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080054static struct cmd_node msc_node = {
55 MSC_NODE,
Harald Welte570ce242012-08-17 13:16:10 +020056 "%s(config-msc)# ",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080057 1,
58};
59
60DEFUN(cfg_net_msc, cfg_net_msc_cmd,
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020061 "msc [<0-1000>]", "Configure MSC details\n" "MSC connection to configure\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080062{
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020063 int index = argc == 1 ? atoi(argv[0]) : 0;
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020064 struct osmo_msc_data *msc;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080065
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +020066 msc = osmo_msc_data_alloc(bsc_gsmnet, index);
67 if (!msc) {
68 vty_out(vty, "%%Failed to allocate MSC data.%s", VTY_NEWLINE);
69 return CMD_WARNING;
70 }
71
72 vty->index = (void *) index;
73 vty->node = MSC_NODE;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +080074 return CMD_SUCCESS;
75}
76
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +020077DEFUN(cfg_net_bsc, cfg_net_bsc_cmd,
78 "bsc", "Configure BSC\n")
79{
80 vty->node = BSC_NODE;
81 return CMD_SUCCESS;
82}
83
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +020084static void write_msc_amr_options(struct vty *vty, struct osmo_msc_data *msc)
85{
86#define WRITE_AMR(vty, msc, name, var) \
87 vty_out(vty, " amr-config %s %s%s", \
88 name, msc->amr_conf.var ? "allowed" : "forbidden", \
89 VTY_NEWLINE);
90
91 WRITE_AMR(vty, msc, "12_2k", m12_2);
92 WRITE_AMR(vty, msc, "10_2k", m10_2);
93 WRITE_AMR(vty, msc, "7_95k", m7_95);
94 WRITE_AMR(vty, msc, "7_40k", m7_40);
95 WRITE_AMR(vty, msc, "6_70k", m6_70);
96 WRITE_AMR(vty, msc, "5_90k", m5_90);
97 WRITE_AMR(vty, msc, "5_15k", m5_15);
98 WRITE_AMR(vty, msc, "4_75k", m4_75);
99#undef WRITE_AMR
100}
101
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200102static void write_msc(struct vty *vty, struct osmo_msc_data *msc)
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800103{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200104 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800105
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200106 vty_out(vty, "msc %d%s", msc->nr, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200107 if (msc->bsc_token)
108 vty_out(vty, " token %s%s", msc->bsc_token, VTY_NEWLINE);
109 if (msc->core_ncc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200110 vty_out(vty, " core-mobile-network-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200111 msc->core_ncc, VTY_NEWLINE);
112 if (msc->core_mcc != -1)
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200113 vty_out(vty, " core-mobile-country-code %d%s",
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200114 msc->core_mcc, VTY_NEWLINE);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200115 if (msc->core_lac != -1)
116 vty_out(vty, " core-location-area-code %d%s",
117 msc->core_lac, VTY_NEWLINE);
118 if (msc->core_ci != -1)
119 vty_out(vty, " core-cell-identity %d%s",
120 msc->core_ci, VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200121 vty_out(vty, " ip.access rtp-base %d%s", msc->rtp_base, VTY_NEWLINE);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100122
123 if (msc->ping_timeout == -1)
124 vty_out(vty, " no timeout-ping%s", VTY_NEWLINE);
125 else {
126 vty_out(vty, " timeout-ping %d%s", msc->ping_timeout, VTY_NEWLINE);
127 vty_out(vty, " timeout-pong %d%s", msc->pong_timeout, VTY_NEWLINE);
128 if (msc->advanced_ping)
129 vty_out(vty, " timeout-ping advanced%s", VTY_NEWLINE);
130 else
131 vty_out(vty, " no timeout-ping advanced%s", VTY_NEWLINE);
132 }
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200133
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200134 if (msc->ussd_welcome_txt)
135 vty_out(vty, " bsc-welcome-text %s%s", msc->ussd_welcome_txt, VTY_NEWLINE);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200136 else
137 vty_out(vty, " no bsc-welcome-text%s", VTY_NEWLINE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800138
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200139 if (msc->ussd_msc_lost_txt && msc->ussd_msc_lost_txt[0])
140 vty_out(vty, " bsc-msc-lost-text %s%s", msc->ussd_msc_lost_txt, VTY_NEWLINE);
141 else
142 vty_out(vty, " no bsc-msc-lost-text%s", VTY_NEWLINE);
143
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200144 if (msc->ussd_grace_txt && msc->ussd_grace_txt[0])
145 vty_out(vty, " bsc-grace-text %s%s", msc->ussd_grace_txt, VTY_NEWLINE);
146 else
147 vty_out(vty, " no bsc-grace-text%s", VTY_NEWLINE);
148
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200149 if (msc->audio_length != 0) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100150 int i;
151
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200152 vty_out(vty, " codec-list ");
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200153 for (i = 0; i < msc->audio_length; ++i) {
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100154 if (i != 0)
Harald Welte22ce5982013-06-19 15:32:27 +0200155 vty_out(vty, " ");
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100156
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200157 if (msc->audio_support[i]->hr)
158 vty_out(vty, "hr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100159 else
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200160 vty_out(vty, "fr%.1u", msc->audio_support[i]->ver);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100161 }
162 vty_out(vty, "%s", VTY_NEWLINE);
163
164 }
165
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200166 llist_for_each_entry(dest, &msc->dests, list)
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200167 vty_out(vty, " dest %s %d %d%s", dest->ip, dest->port,
168 dest->dscp, VTY_NEWLINE);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200169
170 vty_out(vty, " type %s%s", msc->type == MSC_CON_TYPE_NORMAL ?
171 "normal" : "local", VTY_NEWLINE);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200172 vty_out(vty, " allow-emergency %s%s", msc->allow_emerg ?
173 "allow" : "deny", VTY_NEWLINE);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200174
175 if (msc->local_pref)
176 vty_out(vty, " local-prefix %s%s", msc->local_pref, VTY_NEWLINE);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200177
178 /* write amr options */
179 write_msc_amr_options(vty, msc);
Holger Hans Peter Freyther20fea242011-06-04 19:58:26 +0200180}
181
182static int config_write_msc(struct vty *vty)
183{
184 struct osmo_msc_data *msc;
185 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
186
187 llist_for_each_entry(msc, &bsc->mscs, entry)
188 write_msc(vty, msc);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200189
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200190 return CMD_SUCCESS;
191}
192
193static int config_write_bsc(struct vty *vty)
194{
195 struct osmo_bsc_data *bsc = osmo_bsc_data(vty);
196
197 vty_out(vty, "bsc%s", VTY_NEWLINE);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200198 if (bsc->mid_call_txt)
199 vty_out(vty, " mid-call-text %s%s", bsc->mid_call_txt, VTY_NEWLINE);
200 vty_out(vty, " mid-call-timeout %d%s", bsc->mid_call_timeout, VTY_NEWLINE);
201 if (bsc->rf_ctrl_name)
202 vty_out(vty, " bsc-rf-socket %s%s",
203 bsc->rf_ctrl_name, VTY_NEWLINE);
204
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200205 if (bsc->auto_off_timeout != -1)
206 vty_out(vty, " bsc-auto-rf-off %d%s",
207 bsc->auto_off_timeout, VTY_NEWLINE);
208
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200209 if (bsc->ussd_no_msc_txt && bsc->ussd_no_msc_txt[0])
210 vty_out(vty, " missing-msc-text %s%s", bsc->ussd_no_msc_txt, VTY_NEWLINE);
211 else
212 vty_out(vty, " no missing-msc-text%s", VTY_NEWLINE);
213
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800214 return CMD_SUCCESS;
215}
216
Holger Hans Peter Freyther5b848f32010-11-03 13:11:14 +0100217DEFUN(cfg_net_bsc_token,
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800218 cfg_net_bsc_token_cmd,
219 "token TOKEN",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100220 "A token for the BSC to be sent to the MSC\n" "A token\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800221{
222 struct osmo_msc_data *data = osmo_msc_data(vty);
223
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200224 bsc_replace_string(osmo_bsc_data(vty), &data->bsc_token, argv[0]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800225 return CMD_SUCCESS;
226}
227
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100228DEFUN(cfg_net_bsc_ncc,
229 cfg_net_bsc_ncc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100230 "core-mobile-network-code <1-999>",
Holger Hans Peter Freyther768580b2014-07-08 12:48:49 +0200231 "Use this network code for the core network\n" "NCC value\n")
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100232{
233 struct osmo_msc_data *data = osmo_msc_data(vty);
234 data->core_ncc = atoi(argv[0]);
235 return CMD_SUCCESS;
236}
237
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100238DEFUN(cfg_net_bsc_mcc,
239 cfg_net_bsc_mcc_cmd,
Holger Hans Peter Freyther6e1a6762011-02-10 11:37:13 +0100240 "core-mobile-country-code <1-999>",
Holger Hans Peter Freyther768580b2014-07-08 12:48:49 +0200241 "Use this country code for the core network\n" "MCC value\n")
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100242{
243 struct osmo_msc_data *data = osmo_msc_data(vty);
244 data->core_mcc = atoi(argv[0]);
245 return CMD_SUCCESS;
246}
247
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200248DEFUN(cfg_net_bsc_lac,
249 cfg_net_bsc_lac_cmd,
250 "core-location-area-code <0-65535>",
251 "Use this location area code for the core network\n" "LAC value\n")
252{
253 struct osmo_msc_data *data = osmo_msc_data(vty);
254 data->core_lac = atoi(argv[0]);
255 return CMD_SUCCESS;
256}
257
258DEFUN(cfg_net_bsc_ci,
259 cfg_net_bsc_ci_cmd,
260 "core-cell-identity <0-65535>",
261 "Use this cell identity for the core network\n" "CI value\n")
262{
263 struct osmo_msc_data *data = osmo_msc_data(vty);
264 data->core_ci = atoi(argv[0]);
265 return CMD_SUCCESS;
266}
267
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100268DEFUN(cfg_net_bsc_rtp_base,
269 cfg_net_bsc_rtp_base_cmd,
270 "ip.access rtp-base <1-65000>",
271 IPA_STR
272 "Set the rtp-base port for the RTP stream\n"
273 "Port number\n")
274{
275 struct osmo_msc_data *data = osmo_msc_data(vty);
276 data->rtp_base = atoi(argv[0]);
277 return CMD_SUCCESS;
278}
279
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100280DEFUN(cfg_net_bsc_codec_list,
281 cfg_net_bsc_codec_list_cmd,
282 "codec-list .LIST",
283 "Set the allowed audio codecs\n"
284 "List of audio codecs\n")
285{
286 struct osmo_msc_data *data = osmo_msc_data(vty);
287 int saw_fr, saw_hr;
288 int i;
289
290 saw_fr = saw_hr = 0;
291
292 /* free the old list... if it exists */
293 if (data->audio_support) {
294 talloc_free(data->audio_support);
295 data->audio_support = NULL;
296 data->audio_length = 0;
297 }
298
299 /* create a new array */
300 data->audio_support =
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200301 talloc_zero_array(osmo_bsc_data(vty), struct gsm_audio_support *, argc);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100302 data->audio_length = argc;
303
304 for (i = 0; i < argc; ++i) {
305 /* check for hrX or frX */
306 if (strlen(argv[i]) != 3
307 || argv[i][1] != 'r'
308 || (argv[i][0] != 'h' && argv[i][0] != 'f')
309 || argv[i][2] < 0x30
310 || argv[i][2] > 0x39)
311 goto error;
312
313 data->audio_support[i] = talloc_zero(data->audio_support,
314 struct gsm_audio_support);
315 data->audio_support[i]->ver = atoi(argv[i] + 2);
316
317 if (strncmp("hr", argv[i], 2) == 0) {
318 data->audio_support[i]->hr = 1;
319 saw_hr = 1;
320 } else if (strncmp("fr", argv[i], 2) == 0) {
321 data->audio_support[i]->hr = 0;
322 saw_fr = 1;
323 }
324
325 if (saw_hr && saw_fr) {
326 vty_out(vty, "Can not have full-rate and half-rate codec.%s",
327 VTY_NEWLINE);
328 return CMD_ERR_INCOMPLETE;
329 }
330 }
331
332 return CMD_SUCCESS;
333
334error:
335 vty_out(vty, "Codec name must be hrX or frX. Was '%s'%s",
336 argv[i], VTY_NEWLINE);
337 return CMD_ERR_INCOMPLETE;
338}
339
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200340DEFUN(cfg_net_msc_dest,
341 cfg_net_msc_dest_cmd,
342 "dest A.B.C.D <1-65000> <0-255>",
343 "Add a destination to a MUX/MSC\n"
344 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800345{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200346 struct bsc_msc_dest *dest;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800347 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800348
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200349 dest = talloc_zero(osmo_bsc_data(vty), struct bsc_msc_dest);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200350 if (!dest) {
351 vty_out(vty, "%%Failed to create structure.%s", VTY_NEWLINE);
352 return CMD_WARNING;
353 }
354
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200355 dest->ip = talloc_strdup(dest, argv[0]);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200356 if (!dest->ip) {
357 vty_out(vty, "%%Failed to copy dest ip.%s", VTY_NEWLINE);
358 talloc_free(dest);
359 return CMD_WARNING;
360 }
361
362 dest->port = atoi(argv[1]);
363 dest->dscp = atoi(argv[2]);
364 llist_add_tail(&dest->list, &data->dests);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800365 return CMD_SUCCESS;
366}
367
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200368DEFUN(cfg_net_msc_no_dest,
369 cfg_net_msc_no_dest_cmd,
370 "no dest A.B.C.D <1-65000> <0-255>",
371 NO_STR "Remove a destination to a MUX/MSC\n"
372 "IP Address\n" "Port\n" "DSCP\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800373{
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200374 struct bsc_msc_dest *dest, *tmp;
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800375 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800376
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200377 int port = atoi(argv[1]);
378 int dscp = atoi(argv[2]);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800379
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200380 llist_for_each_entry_safe(dest, tmp, &data->dests, list) {
381 if (port != dest->port || dscp != dest->dscp
382 || strcmp(dest->ip, argv[0]) != 0)
383 continue;
384
385 llist_del(&dest->list);
386 talloc_free(dest);
387 }
388
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800389 return CMD_SUCCESS;
390}
391
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100392DEFUN(cfg_net_msc_no_ping_time,
393 cfg_net_msc_no_ping_time_cmd,
394 "no timeout-ping",
395 NO_STR "Disable the ping/pong handling on A-link\n")
396{
397 struct osmo_msc_data *data = osmo_msc_data(vty);
398 data->ping_timeout = -1;
399 return CMD_SUCCESS;
400}
401
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800402DEFUN(cfg_net_msc_ping_time,
403 cfg_net_msc_ping_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200404 "timeout-ping <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100405 "Set the PING interval, negative for not sending PING\n"
406 "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800407{
408 struct osmo_msc_data *data = osmo_msc_data(vty);
409 data->ping_timeout = atoi(argv[0]);
410 return CMD_SUCCESS;
411}
412
413DEFUN(cfg_net_msc_pong_time,
414 cfg_net_msc_pong_time_cmd,
Holger Hans Peter Freyther47c624b2014-09-30 16:43:30 +0200415 "timeout-pong <1-2147483647>",
Holger Hans Peter Freyther63b0e442013-03-03 09:32:08 +0100416 "Set the time to wait for a PONG\n" "Timeout in seconds\n")
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800417{
418 struct osmo_msc_data *data = osmo_msc_data(vty);
419 data->pong_timeout = atoi(argv[0]);
420 return CMD_SUCCESS;
421}
422
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200423DEFUN(cfg_net_msc_advanced_ping,
424 cfg_net_msc_advanced_ping_cmd,
425 "timeout-ping advanced",
426 "Ping timeout handling\nEnable advanced mode during SCCP\n")
427{
428 struct osmo_msc_data *data = osmo_msc_data(vty);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100429
430 if (data->ping_timeout == -1) {
431 vty_out(vty, "%%ping handling is disabled. Enable it first.%s",
432 VTY_NEWLINE);
433 return CMD_WARNING;
434 }
435
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200436 data->advanced_ping = 1;
437 return CMD_SUCCESS;
438}
439
440DEFUN(cfg_no_net_msc_advanced_ping,
441 cfg_no_net_msc_advanced_ping_cmd,
442 "no timeout-ping advanced",
443 NO_STR "Ping timeout handling\nEnable advanced mode during SCCP\n")
444{
445 struct osmo_msc_data *data = osmo_msc_data(vty);
446 data->advanced_ping = 0;
447 return CMD_SUCCESS;
448}
449
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200450DEFUN(cfg_net_msc_welcome_ussd,
451 cfg_net_msc_welcome_ussd_cmd,
452 "bsc-welcome-text .TEXT",
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200453 "Set the USSD notification to be sent\n" "Text to be sent\n")
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200454{
455 struct osmo_msc_data *data = osmo_msc_data(vty);
456 char *str = argv_concat(argv, argc, 0);
457 if (!str)
458 return CMD_WARNING;
459
460 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_welcome_txt, str);
461 talloc_free(str);
462 return CMD_SUCCESS;
463}
464
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200465DEFUN(cfg_net_msc_no_welcome_ussd,
466 cfg_net_msc_no_welcome_ussd_cmd,
467 "no bsc-welcome-text",
468 NO_STR "Clear the USSD notification to be sent\n")
469{
470 struct osmo_msc_data *data = osmo_msc_data(vty);
471
472 talloc_free(data->ussd_welcome_txt);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200473 data->ussd_welcome_txt = NULL;
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200474
475 return CMD_SUCCESS;
476}
477
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200478DEFUN(cfg_net_msc_lost_ussd,
479 cfg_net_msc_lost_ussd_cmd,
480 "bsc-msc-lost-text .TEXT",
481 "Set the USSD notification to be sent on MSC connection loss\n" "Text to be sent\n")
482{
483 struct osmo_msc_data *data = osmo_msc_data(vty);
484 char *str = argv_concat(argv, argc, 0);
485 if (!str)
486 return CMD_WARNING;
487
488 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_msc_lost_txt, str);
489 talloc_free(str);
490 return CMD_SUCCESS;
491}
492
493DEFUN(cfg_net_msc_no_lost_ussd,
494 cfg_net_msc_no_lost_ussd_cmd,
495 "no bsc-msc-lost-text",
496 NO_STR "Clear the USSD notification to be sent on MSC connection loss\n")
497{
498 struct osmo_msc_data *data = osmo_msc_data(vty);
499
500 talloc_free(data->ussd_msc_lost_txt);
501 data->ussd_msc_lost_txt = 0;
502
503 return CMD_SUCCESS;
504}
505
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200506DEFUN(cfg_net_msc_grace_ussd,
507 cfg_net_msc_grace_ussd_cmd,
508 "bsc-grace-text .TEXT",
509 "Set the USSD notification to be sent when the MSC has entered the grace period\n" "Text to be sent\n")
510{
511 struct osmo_msc_data *data = osmo_msc_data(vty);
512 char *str = argv_concat(argv, argc, 0);
513 if (!str)
514 return CMD_WARNING;
515
516 bsc_replace_string(osmo_bsc_data(vty), &data->ussd_grace_txt, str);
517 talloc_free(str);
518 return CMD_SUCCESS;
519}
520
521DEFUN(cfg_net_msc_no_grace_ussd,
522 cfg_net_msc_no_grace_ussd_cmd,
523 "no bsc-grace-text",
524 NO_STR "Clear the USSD notification to be sent when the MSC has entered the grace period\n")
525{
526 struct osmo_msc_data *data = osmo_msc_data(vty);
527
528 talloc_free(data->ussd_grace_txt);
529 data->ussd_grace_txt = NULL;
530
531 return CMD_SUCCESS;
532}
533
534DEFUN(cfg_net_bsc_missing_msc_ussd,
535 cfg_net_bsc_missing_msc_ussd_cmd,
536 "missing-msc-text .TEXT",
537 "Set the USSD notification to be send when a MSC has not been found.\n" "Text to be sent\n")
538{
539 struct osmo_bsc_data *data = osmo_bsc_data(vty);
540 char *txt = argv_concat(argv, argc, 0);
541 if (!txt)
542 return CMD_WARNING;
543
544 bsc_replace_string(data, &data->ussd_no_msc_txt, txt);
545 talloc_free(txt);
546 return CMD_SUCCESS;
547}
548
549DEFUN(cfg_net_bsc_no_missing_msc_text,
550 cfg_net_bsc_no_missing_msc_text_cmd,
551 "no missing-msc-text",
552 NO_STR "Clear the USSD notification to be send when a MSC has not been found.\n")
553{
554 struct osmo_bsc_data *data = osmo_bsc_data(vty);
555
556 talloc_free(data->ussd_no_msc_txt);
557 data->ussd_no_msc_txt = 0;
558
559 return CMD_SUCCESS;
560}
561
562
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200563DEFUN(cfg_net_msc_type,
564 cfg_net_msc_type_cmd,
565 "type (normal|local)",
566 "Select the MSC type\n"
567 "Plain GSM MSC\n" "Special MSC for local call routing\n")
568{
569 struct osmo_msc_data *data = osmo_msc_data(vty);
570
571 if (strcmp(argv[0], "normal") == 0)
572 data->type = MSC_CON_TYPE_NORMAL;
573 else if (strcmp(argv[0], "local") == 0)
574 data->type = MSC_CON_TYPE_LOCAL;
575
576 return CMD_SUCCESS;
577}
578
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200579DEFUN(cfg_net_msc_emerg,
580 cfg_net_msc_emerg_cmd,
581 "allow-emergency (allow|deny)",
582 "Allow CM ServiceRequests with type emergency\n"
583 "Allow\n" "Deny\n")
584{
585 struct osmo_msc_data *data = osmo_msc_data(vty);
586 data->allow_emerg = strcmp("allow", argv[0]) == 0;
587 return CMD_SUCCESS;
588}
589
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200590DEFUN(cfg_net_msc_local_prefix,
591 cfg_net_msc_local_prefix_cmd,
592 "local-prefix REGEXP",
593 "Prefix for local numbers\n" "REGEXP used\n")
594{
595 struct osmo_msc_data *msc = osmo_msc_data(vty);
596
597 if (gsm_parse_reg(msc, &msc->local_pref_reg, &msc->local_pref, argc, argv) != 0) {
598 vty_out(vty, "%%Failed to parse the regexp: '%s'%s",
599 argv[0], VTY_NEWLINE);
600 return CMD_WARNING;
601 }
602
603 return CMD_SUCCESS;
604}
605
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200606#define AMR_CONF_STR "AMR Multirate Configuration\n"
607#define AMR_COMMAND(name) \
608 DEFUN(cfg_net_msc_amr_##name, \
609 cfg_net_msc_amr_##name##_cmd, \
610 "amr-config " #name "k (allowed|forbidden)", \
611 AMR_CONF_STR "Bitrate\n" "Allowed\n" "Forbidden\n") \
612{ \
613 struct osmo_msc_data *msc = osmo_msc_data(vty); \
614 \
615 msc->amr_conf.m##name = strcmp(argv[0], "allowed") == 0; \
616 return CMD_SUCCESS; \
617}
618
619AMR_COMMAND(12_2)
620AMR_COMMAND(10_2)
621AMR_COMMAND(7_95)
622AMR_COMMAND(7_40)
623AMR_COMMAND(6_70)
624AMR_COMMAND(5_90)
625AMR_COMMAND(5_15)
626AMR_COMMAND(4_75)
627
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200628DEFUN(cfg_net_bsc_mid_call_text,
629 cfg_net_bsc_mid_call_text_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100630 "mid-call-text .TEXT",
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800631 "Set the USSD notifcation to be send.\n" "Text to be sent\n")
632{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200633 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther414bc4a2010-11-22 22:27:39 +0100634 char *txt = argv_concat(argv, argc, 0);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800635 if (!txt)
636 return CMD_WARNING;
637
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100638 bsc_replace_string(data, &data->mid_call_txt, txt);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800639 talloc_free(txt);
640 return CMD_SUCCESS;
641}
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800642
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200643DEFUN(cfg_net_bsc_mid_call_timeout,
644 cfg_net_bsc_mid_call_timeout_cmd,
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100645 "mid-call-timeout NR",
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100646 "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n")
647{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200648 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freytherbb62b3f2010-11-22 18:30:21 +0100649 data->mid_call_timeout = atoi(argv[0]);
Holger Hans Peter Freyther625b6e42010-11-22 18:25:02 +0100650 return CMD_SUCCESS;
651}
652
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200653DEFUN(cfg_net_rf_socket,
654 cfg_net_rf_socket_cmd,
655 "bsc-rf-socket PATH",
656 "Set the filename for the RF control interface.\n" "RF Control path\n")
657{
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200658 struct osmo_bsc_data *data = osmo_bsc_data(vty);
Holger Hans Peter Freyther55ef5fb2011-04-07 23:23:27 +0200659
660 bsc_replace_string(data, &data->rf_ctrl_name, argv[0]);
661 return CMD_SUCCESS;
662}
663
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200664DEFUN(cfg_net_rf_off_time,
665 cfg_net_rf_off_time_cmd,
666 "bsc-auto-rf-off <1-65000>",
667 "Disable RF on MSC Connection\n" "Timeout\n")
668{
669 struct osmo_bsc_data *data = osmo_bsc_data(vty);
670 data->auto_off_timeout = atoi(argv[0]);
671 return CMD_SUCCESS;
672}
673
674DEFUN(cfg_net_no_rf_off_time,
675 cfg_net_no_rf_off_time_cmd,
676 "no bsc-auto-rf-off",
677 NO_STR "Disable RF on MSC Connection\n")
678{
679 struct osmo_bsc_data *data = osmo_bsc_data(vty);
680 data->auto_off_timeout = -1;
681 return CMD_SUCCESS;
682}
683
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200684DEFUN(show_statistics,
685 show_statistics_cmd,
686 "show statistics",
687 SHOW_STR "Statistics about the BSC\n")
688{
689 openbsc_vty_print_statistics(vty, bsc_gsmnet);
690 return CMD_SUCCESS;
691}
692
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200693DEFUN(show_mscs,
694 show_mscs_cmd,
695 "show mscs",
696 SHOW_STR "MSC Connections and State\n")
697{
698 struct osmo_msc_data *msc;
699 llist_for_each_entry(msc, &bsc_gsmnet->bsc_data->mscs, entry) {
700 vty_out(vty, "MSC Nr: %d is connected: %d auth: %d.%s",
701 msc->nr,
702 msc->msc_con ? msc->msc_con->is_connected : -1,
703 msc->msc_con ? msc->msc_con->is_authenticated : -1,
704 VTY_NEWLINE);
705 }
706
707 return CMD_SUCCESS;
708}
709
Daniel Willmann7d109832012-05-14 18:43:23 +0200710DEFUN(show_pos,
711 show_pos_cmd,
712 "show position",
713 SHOW_STR "Position information of the BTS\n")
714{
715 struct gsm_bts *bts;
716 struct bts_location *curloc;
717 struct tm time;
718 char timestr[50];
719
720 llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) {
721 if (llist_empty(&bts->loc_list)) {
722 vty_out(vty, "BTS Nr: %d position invalid%s", bts->nr,
723 VTY_NEWLINE);
724 continue;
725 }
726 curloc = llist_entry(bts->loc_list.next, struct bts_location, list);
727 if (gmtime_r(&curloc->tstamp, &time) == NULL) {
728 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
729 VTY_NEWLINE);
730 continue;
731 }
732 if (asctime_r(&time, timestr) == NULL) {
733 vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
734 VTY_NEWLINE);
735 continue;
736 }
737 /* Last character in asctime is \n */
738 timestr[strlen(timestr)-1] = 0;
739
740 vty_out(vty, "BTS Nr: %d position: %s time: %s%s", bts->nr,
741 get_value_string(bts_loc_fix_names, curloc->valid), timestr,
742 VTY_NEWLINE);
743 vty_out(vty, " lat: %f lon: %f height: %f%s", curloc->lat, curloc->lon,
744 curloc->height, VTY_NEWLINE);
745 }
746 return CMD_SUCCESS;
747}
748
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100749DEFUN(gen_position_trap,
750 gen_position_trap_cmd,
751 "generate-location-state-trap <0-255>",
752 "Generate location state report\n"
753 "BTS to report\n")
754{
755 int bts_nr;
756 struct gsm_bts *bts;
757 struct gsm_network *net = bsc_gsmnet;
758
759 bts_nr = atoi(argv[0]);
760 if (bts_nr >= net->num_bts) {
761 vty_out(vty, "%% can't find BTS '%s'%s", argv[0],
762 VTY_NEWLINE);
763 return CMD_WARNING;
764 }
765
766 bts = gsm_bts_num(net, bts_nr);
767 bsc_gen_location_state_trap(bts);
768 return CMD_SUCCESS;
769}
770
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100771DEFUN(logging_fltr_imsi,
772 logging_fltr_imsi_cmd,
773 "logging filter imsi IMSI",
774 LOGGING_STR FILTER_STR
775 "Filter log messages by IMSI\n" "IMSI to be used as filter\n")
776{
777 struct gsm_subscriber *subscr;
778 struct log_target *tgt = osmo_log_vty2tgt(vty);
779
780 if (!tgt)
781 return CMD_WARNING;
782
783 subscr = subscr_get_or_create(bsc_gsmnet->subscr_group, argv[0]);
784 if (!subscr) {
785 vty_out(vty, "%%no subscriber with IMSI(%s)%s",
786 argv[0], VTY_NEWLINE);
787 return CMD_WARNING;
788 }
789
790 log_set_imsi_filter(tgt, subscr);
791 return CMD_SUCCESS;
792}
793
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800794int bsc_vty_init_extra(void)
795{
Holger Hans Peter Freyther06f4fc72011-03-29 17:46:14 +0200796 install_element(CONFIG_NODE, &cfg_net_msc_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200797 install_element(CONFIG_NODE, &cfg_net_bsc_cmd);
798
799 install_node(&bsc_node, config_write_bsc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100800 vty_install_default(BSC_NODE);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200801 install_element(BSC_NODE, &cfg_net_bsc_mid_call_text_cmd);
802 install_element(BSC_NODE, &cfg_net_bsc_mid_call_timeout_cmd);
803 install_element(BSC_NODE, &cfg_net_rf_socket_cmd);
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +0200804 install_element(BSC_NODE, &cfg_net_rf_off_time_cmd);
805 install_element(BSC_NODE, &cfg_net_no_rf_off_time_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200806 install_element(BSC_NODE, &cfg_net_bsc_missing_msc_ussd_cmd);
807 install_element(BSC_NODE, &cfg_net_bsc_no_missing_msc_text_cmd);
Holger Hans Peter Freyther8b902d72011-06-04 20:22:49 +0200808
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800809 install_node(&msc_node, config_write_msc);
Jacob Erlbeck36722e12013-10-29 09:30:30 +0100810 vty_install_default(MSC_NODE);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800811 install_element(MSC_NODE, &cfg_net_bsc_token_cmd);
Holger Hans Peter Freyther4de11162010-11-03 13:12:18 +0100812 install_element(MSC_NODE, &cfg_net_bsc_ncc_cmd);
Holger Hans Peter Freyther2a8675e2010-11-05 19:43:07 +0100813 install_element(MSC_NODE, &cfg_net_bsc_mcc_cmd);
Holger Hans Peter Freyther32dd2f32015-04-01 18:15:48 +0200814 install_element(MSC_NODE, &cfg_net_bsc_lac_cmd);
815 install_element(MSC_NODE, &cfg_net_bsc_ci_cmd);
Holger Hans Peter Freytherfe166222010-11-03 13:32:48 +0100816 install_element(MSC_NODE, &cfg_net_bsc_rtp_base_cmd);
Holger Hans Peter Freyther7bf66c52010-11-03 13:55:49 +0100817 install_element(MSC_NODE, &cfg_net_bsc_codec_list_cmd);
Holger Hans Peter Freythere1880102011-04-23 23:31:31 +0200818 install_element(MSC_NODE, &cfg_net_msc_dest_cmd);
819 install_element(MSC_NODE, &cfg_net_msc_no_dest_cmd);
Holger Hans Peter Freytherdb64f2e2014-10-29 10:06:15 +0100820 install_element(MSC_NODE, &cfg_net_msc_no_ping_time_cmd);
Holger Hans Peter Freyther47b26012010-09-15 23:28:49 +0800821 install_element(MSC_NODE, &cfg_net_msc_ping_time_cmd);
822 install_element(MSC_NODE, &cfg_net_msc_pong_time_cmd);
Holger Hans Peter Freyther56cb7292014-09-02 17:28:40 +0200823 install_element(MSC_NODE, &cfg_net_msc_advanced_ping_cmd);
824 install_element(MSC_NODE, &cfg_no_net_msc_advanced_ping_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200825 install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd);
Jacob Erlbeck97e139f2013-08-28 10:16:55 +0200826 install_element(MSC_NODE, &cfg_net_msc_no_welcome_ussd_cmd);
Jacob Erlbeck1b894022013-08-28 10:16:54 +0200827 install_element(MSC_NODE, &cfg_net_msc_lost_ussd_cmd);
828 install_element(MSC_NODE, &cfg_net_msc_no_lost_ussd_cmd);
Jacob Erlbeck56595f82013-09-11 10:46:55 +0200829 install_element(MSC_NODE, &cfg_net_msc_grace_ussd_cmd);
830 install_element(MSC_NODE, &cfg_net_msc_no_grace_ussd_cmd);
Holger Hans Peter Freythercbaa8802011-06-08 16:28:04 +0200831 install_element(MSC_NODE, &cfg_net_msc_type_cmd);
Holger Hans Peter Freyther31b245b2011-06-08 19:27:15 +0200832 install_element(MSC_NODE, &cfg_net_msc_emerg_cmd);
Holger Hans Peter Freytherd5edc4f2011-06-09 21:54:08 +0200833 install_element(MSC_NODE, &cfg_net_msc_local_prefix_cmd);
Holger Hans Peter Freyther75077952011-08-06 08:31:51 +0200834 install_element(MSC_NODE, &cfg_net_msc_amr_12_2_cmd);
835 install_element(MSC_NODE, &cfg_net_msc_amr_10_2_cmd);
836 install_element(MSC_NODE, &cfg_net_msc_amr_7_95_cmd);
837 install_element(MSC_NODE, &cfg_net_msc_amr_7_40_cmd);
838 install_element(MSC_NODE, &cfg_net_msc_amr_6_70_cmd);
839 install_element(MSC_NODE, &cfg_net_msc_amr_5_90_cmd);
840 install_element(MSC_NODE, &cfg_net_msc_amr_5_15_cmd);
841 install_element(MSC_NODE, &cfg_net_msc_amr_4_75_cmd);
Holger Hans Peter Freyther8ec49522011-08-15 15:53:00 +0200842
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200843 install_element_ve(&show_statistics_cmd);
Holger Hans Peter Freytherc50e04a2011-10-20 11:06:31 +0200844 install_element_ve(&show_mscs_cmd);
Daniel Willmann7d109832012-05-14 18:43:23 +0200845 install_element_ve(&show_pos_cmd);
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100846 install_element_ve(&logging_fltr_imsi_cmd);
Holger Hans Peter Freyther286ba0e2011-05-03 18:12:39 +0200847
Holger Hans Peter Freyther98258db2014-02-22 10:30:32 +0100848 install_element(ENABLE_NODE, &gen_position_trap_cmd);
849
Holger Hans Peter Freyther6995f242014-12-28 18:54:32 +0100850 install_element(CFG_LOG_NODE, &logging_fltr_imsi_cmd);
851
Holger Hans Peter Freythercacbc732010-06-30 14:59:23 +0800852 return 0;
853}