bsc: Add a VTY command to show the paging group for a BSC/IMSI
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index 5a9976b..b034981 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -27,6 +27,8 @@
 #include <osmocom/vty/telnet_interface.h>
 #include <osmocom/vty/misc.h>
 
+#include <osmocom/gsm/gsm0502.h>
+
 #include <arpa/inet.h>
 
 #include <osmocom/core/linuxlist.h>
@@ -51,6 +53,8 @@
 #include <openbsc/osmo_msc_data.h>
 #include <openbsc/osmo_bsc_rf.h>
 
+#include <inttypes.h>
+
 #include "../../bscconfig.h"
 
 
@@ -1150,6 +1154,36 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(show_paging_group,
+      show_paging_group_cmd,
+      "show paging-group <0-255> IMSI",
+      SHOW_STR "Display the paging group\n"
+      "BTS Number\n" "IMSI\n")
+{
+	struct gsm_network *net = gsmnet_from_vty(vty);
+	struct gsm_bts *bts;
+	unsigned int page_group;
+	int bts_nr = atoi(argv[0]);
+
+	if (bts_nr >= net->num_bts) {
+		vty_out(vty, "%% can't find BTS %s%s", argv[0], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	bts = gsm_bts_num(net, bts_nr);
+	if (!bts) {
+		vty_out(vty, "%% can't find BTS %s%s", argv[0], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	page_group = gsm0502_calc_paging_group(&bts->si_common.chan_desc,
+						str_to_imsi(argv[1]));
+	vty_out(vty, "%%Paging group for IMSI %" PRIu64 " on BTS #%d is %u%s",
+		str_to_imsi(argv[1]), bts->nr,
+		page_group, VTY_NEWLINE);
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_net,
       cfg_net_cmd,
       "network", NETWORK_STR)
@@ -3095,6 +3129,7 @@
 	install_element_ve(&logging_fltr_imsi_cmd);
 
 	install_element_ve(&show_paging_cmd);
+	install_element_ve(&show_paging_group_cmd);
 
 	logging_vty_add_cmds(cat);
 	install_element(CFG_LOG_NODE, &logging_fltr_imsi_cmd);