aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-12-28 22:12:30 +0100
committerHarald Welte <laforge@gnumonks.org>2010-12-28 22:43:23 +0100
commitc6bca864a1bce78081d498dbd16bcaa8f5c7bce7 (patch)
treef9501c429ce8686e0de3a5f3f185fde59486df88
parentff3aa71b66ef7e6381222f4cedd2cb2f7bff3d5c (diff)
subscr: Show the number of pending requests on this subscriber.
-rw-r--r--openbsc/include/openbsc/gsm_subscriber.h2
-rw-r--r--openbsc/src/gsm_subscriber.c11
-rw-r--r--openbsc/src/vty_interface_layer3.c9
3 files changed, 19 insertions, 3 deletions
diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h
index 1318ae8fc..0f44a101e 100644
--- a/openbsc/include/openbsc/gsm_subscriber.h
+++ b/openbsc/include/openbsc/gsm_subscriber.h
@@ -88,6 +88,8 @@ struct gsm_subscriber *subscr_active_by_tmsi(struct gsm_network *net,
struct gsm_subscriber *subscr_active_by_imsi(struct gsm_network *net,
const char *imsi);
+int subscr_pending_requests(struct gsm_subscriber *subscr);
+
char *subscr_name(struct gsm_subscriber *subscr);
int subscr_purge_inactive(struct gsm_network *net);
diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c
index 66b969d1f..2de951fef 100644
--- a/openbsc/src/gsm_subscriber.c
+++ b/openbsc/src/gsm_subscriber.c
@@ -346,3 +346,14 @@ void subscr_update_from_db(struct gsm_subscriber *sub)
{
db_subscriber_update(sub);
}
+
+int subscr_pending_requests(struct gsm_subscriber *sub)
+{
+ struct subscr_request *req;
+ int pending = 0;
+
+ llist_for_each_entry(req, &sub->requests, entry)
+ pending += 1;
+
+ return pending;
+}
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index c01d9c6eb..13de49a0e 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -50,7 +50,7 @@
extern struct gsm_network *gsmnet_from_vty(struct vty *v);
-static void subscr_dump_full_vty(struct vty *vty, struct gsm_subscriber *subscr)
+static void subscr_dump_full_vty(struct vty *vty, struct gsm_subscriber *subscr, int pending)
{
int rc;
struct gsm_auth_info ainfo;
@@ -96,6 +96,9 @@ static void subscr_dump_full_vty(struct vty *vty, struct gsm_subscriber *subscr)
hexdump(atuple.kc, sizeof(atuple.kc)),
VTY_NEWLINE);
}
+ if (pending)
+ vty_out(vty, " Pending: %d%s",
+ subscr_pending_requests(subscr), VTY_NEWLINE);
vty_out(vty, " Use count: %u%s", subscr->use_count, VTY_NEWLINE);
}
@@ -111,7 +114,7 @@ DEFUN(show_subscr_cache,
llist_for_each_entry(subscr, &active_subscribers, entry) {
vty_out(vty, " Subscriber:%s", VTY_NEWLINE);
- subscr_dump_full_vty(vty, subscr);
+ subscr_dump_full_vty(vty, subscr, 0);
}
return CMD_SUCCESS;
@@ -221,7 +224,7 @@ DEFUN(show_subscr,
return CMD_WARNING;
}
- subscr_dump_full_vty(vty, subscr);
+ subscr_dump_full_vty(vty, subscr, 1);
subscr_put(subscr);