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; }