aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-12-25 14:38:30 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-12-26 09:40:03 +0100
commit4dcc5e5f8ad37bfb6f9288ce4bc58fcc3622ebe5 (patch)
tree6d8d93e860c0d2a938c2f78fdbfba59e4866b1c6
parent3c6f6c25a6f4f29a9881f8de9406df313974ce9f (diff)
sms: Add vty command to clear the pending message
-rw-r--r--openbsc/include/openbsc/sms_queue.h1
-rw-r--r--openbsc/src/sms_queue.c13
-rw-r--r--openbsc/src/vty_interface_layer3.c12
3 files changed, 26 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/sms_queue.h b/openbsc/include/openbsc/sms_queue.h
index 02dec73a3..99f4e7bd8 100644
--- a/openbsc/include/openbsc/sms_queue.h
+++ b/openbsc/include/openbsc/sms_queue.h
@@ -11,5 +11,6 @@ int sms_queue_trigger(struct gsm_sms_queue *);
/* vty helper functions */
int sms_queue_stats(struct gsm_sms_queue *, struct vty* vty);
int sms_queue_set_max_pending(struct gsm_sms_queue *, int max);
+int sms_queue_clear(struct gsm_sms_queue *);
#endif
diff --git a/openbsc/src/sms_queue.c b/openbsc/src/sms_queue.c
index 4ffde627b..4bbdef88c 100644
--- a/openbsc/src/sms_queue.c
+++ b/openbsc/src/sms_queue.c
@@ -415,3 +415,16 @@ int sms_queue_set_max_pending(struct gsm_sms_queue *smsq, int max_pending)
smsq->max_pending = max_pending;
return 0;
}
+
+int sms_queue_clear(struct gsm_sms_queue *smsq)
+{
+ struct gsm_sms_pending *pending, *tmp;
+
+ llist_for_each_entry_safe(pending, tmp, &smsq->pending_sms, entry) {
+ LOGP(DSMS, LOGL_NOTICE,
+ "SMSqueue clearing for sub %llu\n", pending->subscr->id);
+ sms_pending_free(pending);
+ }
+
+ return 0;
+}
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index 51176fa5a..e7a2b2fbb 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -667,6 +667,17 @@ DEFUN(smsqueue_max,
return CMD_SUCCESS;
}
+DEFUN(smsqueue_clear,
+ smsqueue_clear_cmd,
+ "sms-queue clear",
+ "SMS Queue\n" "Clear the queue of pending SMS\n")
+{
+ struct gsm_network *net = gsmnet_from_vty(vty);
+
+ sms_queue_clear(net->sms_queue);
+ return CMD_SUCCESS;
+}
+
int bsc_vty_init_extra(void)
{
register_signal_handler(SS_SCALL, scall_cbfn, NULL);
@@ -692,6 +703,7 @@ int bsc_vty_init_extra(void)
install_element(ENABLE_NODE, &subscriber_purge_cmd);
install_element(ENABLE_NODE, &smsqueue_trigger_cmd);
install_element(ENABLE_NODE, &smsqueue_max_cmd);
+ install_element(ENABLE_NODE, &smsqueue_clear_cmd);
return 0;
}