diff options
author | Max <msuraev@sysmocom.de> | 2017-12-27 19:34:15 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-01-05 10:10:35 +0000 |
commit | dcc193d3a6f2325af74b609f6a28c1ad04588a6a (patch) | |
tree | a27585a8681fbe95e84c61887a7af528a24a72f5 /src/libmsc/ctrl_commands.c | |
parent | a263bb215b3e159fed6b6f6a1fd15ce8b8cc3176 (diff) |
Add control command to expire subscriber
It's equivalent of existing vty command: common part is extracted into
shared helper function.
Change-Id: I267886b7c79ed6d9c2f34a2e60d2972b7f4f4036
Diffstat (limited to 'src/libmsc/ctrl_commands.c')
-rw-r--r-- | src/libmsc/ctrl_commands.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/libmsc/ctrl_commands.c b/src/libmsc/ctrl_commands.c index c6236ed57..b0625bb0f 100644 --- a/src/libmsc/ctrl_commands.c +++ b/src/libmsc/ctrl_commands.c @@ -59,11 +59,49 @@ static int get_subscriber_list(struct ctrl_cmd *cmd, void *d) } CTRL_CMD_DEFINE_RO(subscriber_list, "subscriber-list-active-v1"); +CTRL_CMD_DEFINE_WO_NOVRF(sub_expire, "subscriber-expire"); +static int set_sub_expire(struct ctrl_cmd *cmd, void *data) +{ + struct vlr_subscr *vsub; + + if (!msc_ctrl_net) { + cmd->reply = "MSC CTRL commands not initialized"; + return CTRL_CMD_ERROR; + } + + if (!msc_ctrl_net->vlr) { + cmd->reply = "VLR not initialized"; + return CTRL_CMD_ERROR; + } + + vsub = vlr_subscr_find_by_imsi(msc_ctrl_net->vlr, cmd->value); + if (!vsub) { + LOGP(DCTRL, LOGL_ERROR, "Attempt to expire unknown subscriber IMSI=%s\n", cmd->value); + cmd->reply = "IMSI unknown"; + return CTRL_CMD_ERROR; + } + + LOGP(DCTRL, LOGL_NOTICE, "Expiring subscriber IMSI=%s\n", cmd->value); + + if (vlr_subscr_expire(vsub)) + LOGP(DCTRL, LOGL_NOTICE, "VLR released subscriber %s\n", vlr_subscr_name(vsub)); + + if (vsub->use_count > 1) + LOGP(DCTRL, LOGL_NOTICE, "Subscriber %s is still in use, should be released soon\n", + vlr_subscr_name(vsub)); + + vlr_subscr_put(vsub); + + return CTRL_CMD_REPLY; +} + int msc_ctrl_cmds_install(struct gsm_network *net) { int rc = 0; msc_ctrl_net = net; rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_subscriber_list); + rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_sub_expire); + return rc; } |