aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-12-29 13:45:49 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2011-01-06 14:52:52 +0100
commit451eb29e37b3d901ac89b684b0eb259f838df6d4 (patch)
treeca0b990080862591070711b424232b7f2a78ca14 /openbsc
parent763b42a92a7c60f931a9c7a3130f85c7080bee07 (diff)
subscr: Add a vty option to kick the queue.
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/gsm_subscriber.h1
-rw-r--r--openbsc/src/gsm_subscriber.c6
-rw-r--r--openbsc/src/vty_interface_layer3.c22
3 files changed, 29 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h
index 6971bbf1f..c365bc7d7 100644
--- a/openbsc/include/openbsc/gsm_subscriber.h
+++ b/openbsc/include/openbsc/gsm_subscriber.h
@@ -93,6 +93,7 @@ struct gsm_subscriber *subscr_active_by_imsi(struct gsm_network *net,
int subscr_pending_requests(struct gsm_subscriber *subscr);
int subscr_pending_clear(struct gsm_subscriber *subscr);
int subscr_pending_dump(struct gsm_subscriber *subscr, struct vty *vty);
+int subscr_pending_kick(struct gsm_subscriber *subscr);
char *subscr_name(struct gsm_subscriber *subscr);
diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c
index 2f6cc3ca9..db61f25aa 100644
--- a/openbsc/src/gsm_subscriber.c
+++ b/openbsc/src/gsm_subscriber.c
@@ -402,3 +402,9 @@ int subscr_pending_dump(struct gsm_subscriber *sub, struct vty *vty)
return 0;
}
+
+int subscr_pending_kick(struct gsm_subscriber *sub)
+{
+ subscr_put_channel(sub);
+ return 0;
+}
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index ccca79807..3c888dbc5 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -523,6 +523,27 @@ DEFUN(ena_subscr_pend,
return CMD_SUCCESS;
}
+DEFUN(ena_subscr_kick,
+ ena_subscr_kick_cmd,
+ "subscriber " SUBSCR_TYPES " ID kick-pending",
+ SUBSCR_HELP "Clear the paging requests for this subscriber\n")
+{
+ struct gsm_network *gsmnet = gsmnet_from_vty(vty);
+ struct gsm_subscriber *subscr =
+ get_subscr_by_argv(gsmnet, argv[0], argv[1]);
+
+ if (!subscr) {
+ vty_out(vty, "%% No subscriber found for %s %s%s",
+ argv[0], argv[1], VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ subscr_pending_kick(subscr);
+ subscr_put(subscr);
+
+ return CMD_SUCCESS;
+}
+
#define A3A8_ALG_TYPES "(none|xor|comp128v1)"
#define A3A8_ALG_HELP \
"Use No A3A8 algorithm\n" \
@@ -764,6 +785,7 @@ int bsc_vty_init_extra(void)
install_element(ENABLE_NODE, &ena_subscr_a3a8_cmd);
install_element(ENABLE_NODE, &ena_subscr_clear_cmd);
install_element(ENABLE_NODE, &ena_subscr_pend_cmd);
+ install_element(ENABLE_NODE, &ena_subscr_kick_cmd);
install_element(ENABLE_NODE, &subscriber_purge_cmd);
install_element(ENABLE_NODE, &smsqueue_trigger_cmd);
install_element(ENABLE_NODE, &smsqueue_max_cmd);