From 7fe00fb9be1dddbaee175be0217fddd8858c7aad Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 27 May 2017 14:09:50 +0200 Subject: bsc_vty: Factor vty_get_ts() out of pdch_act_cmd() Resolving a timeslot based on its numeric identities is a generally useful function, so lets' factor that out. Change-Id: Id2570232f82542487a1133be7efb1dc1eb3029a8 --- openbsc/src/libbsc/bsc_vty.c | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index 2c7b6c0c5..6c6b4bc86 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -3851,6 +3851,29 @@ DEFUN(smscb_cmd, smscb_cmd_cmd, return CMD_SUCCESS; } +/* resolve a gsm_bts_trx_ts basd on the given numeric identifiers */ +struct gsm_bts_trx_ts *vty_get_ts(struct vty *vty, int bts_nr, int trx_nr, int ts_nr, int ss_nr) +{ + struct gsm_bts *bts; + struct gsm_bts_trx *trx; + struct gsm_bts_trx_ts *ts; + + bts = gsm_bts_num(gsmnet_from_vty(vty), bts_nr); + if (!bts) { + vty_out(vty, "%% No such BTS (%d)%s", bts_nr, VTY_NEWLINE); + return NULL; + } + + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) { + vty_out(vty, "%% No such TRX (%d)%s", trx_nr, VTY_NEWLINE); + return NULL; + } + + ts = &trx->ts[ts_nr]; + + return ts; +} DEFUN(pdch_act, pdch_act_cmd, "bts <0-255> trx <0-255> timeslot <0-7> pdch (activate|deactivate)", @@ -3859,33 +3882,22 @@ DEFUN(pdch_act, pdch_act_cmd, "Activate Dynamic PDCH/TCH (-> PDCH mode)\n" "Deactivate Dynamic PDCH/TCH (-> TCH mode)\n") { - struct gsm_bts *bts; - struct gsm_bts_trx *trx; struct gsm_bts_trx_ts *ts; int bts_nr = atoi(argv[0]); int trx_nr = atoi(argv[1]); int ts_nr = atoi(argv[2]); int activate; - bts = gsm_bts_num(gsmnet_from_vty(vty), bts_nr); - if (!bts) { - vty_out(vty, "%% No such BTS (%d)%s", bts_nr, VTY_NEWLINE); + ts = vty_get_ts(vty, bts_nr, trx_nr, ts_nr, 0); + if (!ts) return CMD_WARNING; - } - if (!is_ipaccess_bts(bts)) { + if (!is_ipaccess_bts(ts->trx->bts)) { vty_out(vty, "%% This command only works for ipaccess BTS%s", VTY_NEWLINE); return CMD_WARNING; } - trx = gsm_bts_trx_num(bts, trx_nr); - if (!trx) { - vty_out(vty, "%% No such TRX (%d)%s", trx_nr, VTY_NEWLINE); - return CMD_WARNING; - } - - ts = &trx->ts[ts_nr]; if (ts->pchan != GSM_PCHAN_TCH_F_PDCH) { vty_out(vty, "%% Timeslot %u is not in dynamic TCH_F/PDCH " "mode%s", ts_nr, VTY_NEWLINE); -- cgit v1.2.3