aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmo-bts/gsm_data.h2
-rw-r--r--include/osmo-bts/paging.h5
-rw-r--r--src/common/bts.c5
-rw-r--r--src/common/paging.c8
-rw-r--r--src/common/vty.c47
5 files changed, 63 insertions, 4 deletions
diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index 40b2e40b..3953663b 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -50,6 +50,8 @@ struct gsm_bts_role_bts {
uint8_t max_ta;
struct llist_head agch_queue;
struct paging_state *paging_state;
+ unsigned int paging_q_len;
+ unsigned int paging_lifetime;
char *bsc_oml_host;
char *rtp_bind_host;
unsigned int rtp_jitter_buf_ms;
diff --git a/include/osmo-bts/paging.h b/include/osmo-bts/paging.h
index 4e39b458..9cd6505d 100644
--- a/include/osmo-bts/paging.h
+++ b/include/osmo-bts/paging.h
@@ -13,6 +13,11 @@ struct paging_state *paging_init(struct gsm_bts_role_bts *btsb,
unsigned int num_paging_max,
unsigned int paging_lifetime);
+/* (re) configure paging code */
+int paging_config(struct paging_state *ps,
+ unsigned int num_paging_max,
+ unsigned int paging_lifetime);
+
void paging_reset(struct paging_state *ps);
/* update with new SYSTEM INFORMATION parameters */
diff --git a/src/common/bts.c b/src/common/bts.c
index 208e1c60..e370b4bf 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -66,11 +66,12 @@ int bts_init(struct gsm_bts *bts)
INIT_LLIST_HEAD(&btsb->agch_queue);
- /* FIXME: make those parameters configurable */
+ /* configurable via VTY */
btsb->paging_state = paging_init(btsb, 200, 0);
+
+ /* configurable via OML */
btsb->load.ccch.load_ind_period = 60*100;
load_timer_start(bts);
-
btsb->rtp_jitter_buf_ms = 100;
btsb->max_ta = 63;
diff --git a/src/common/paging.c b/src/common/paging.c
index cfa2b080..b283d486 100644
--- a/src/common/paging.c
+++ b/src/common/paging.c
@@ -547,6 +547,14 @@ struct paging_state *paging_init(struct gsm_bts_role_bts *btsb,
return ps;
}
+int paging_config(struct paging_state *ps,
+ unsigned int num_paging_max,
+ unsigned int paging_lifetime)
+{
+ ps->num_paging_max = num_paging_max;
+ ps->paging_lifetime = paging_lifetime;
+}
+
void paging_reset(struct paging_state *ps)
{
int i;
diff --git a/src/common/vty.c b/src/common/vty.c
index 225ff39b..1d12e43a 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -186,6 +186,10 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
vty_out(vty, " rtp bind-ip %s%s", btsb->rtp_bind_host, VTY_NEWLINE);
vty_out(vty, " rtp jitter-buffer %u%s", btsb->rtp_jitter_buf_ms,
VTY_NEWLINE);
+ vty_out(vty, " paging queue-size %u%s", btsb->paging_q_len,
+ VTY_NEWLINE);
+ vty_out(vty, " paging lifetime %u%s", btsb->paging_lifetime,
+ VTY_NEWLINE);
bts_model_config_write_bts(vty, bts);
@@ -328,6 +332,42 @@ DEFUN(cfg_bts_rtp_jitbuf,
return CMD_SUCCESS;
}
+#define PAG_STR "Paging related parameters\n"
+
+DEFUN(cfg_bts_paging_queue_size,
+ cfg_bts_paging_queue_size_cmd,
+ "paging queue-size <1-1024>",
+ PAG_STR "Maximum length of BTS-internal paging queue\n"
+ "Maximum length of BTS-internal paging queue\n")
+{
+ struct gsm_bts *bts = vty->index;
+ struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+
+ btsb->paging_q_len = atoi(argv[0]);
+ paging_config(btsb->paging_state, btsb->paging_q_len,
+ btsb->paging_lifetime);
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_paging_lifetime,
+ cfg_bts_paging_lifetime_cmd,
+ "paging lifetime <0-60>",
+ PAG_STR "Maximum lifetime of a paging record\n"
+ "Maximum lifetime of a paging record (secods)\n")
+{
+ struct gsm_bts *bts = vty->index;
+ struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+
+ btsb->paging_lifetime = atoi(argv[0]);
+ paging_config(btsb->paging_state, btsb->paging_q_len,
+ btsb->paging_lifetime);
+
+ return CMD_SUCCESS;
+}
+
+
+
/* ======================================================================
* SHOW
* ======================================================================*/
@@ -358,8 +398,9 @@ static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts)
net_dump_nmstate(vty, &bts->mo.nm_state);
vty_out(vty, " Site Mgr NM State: ");
net_dump_nmstate(vty, &bts->site_mgr.mo.nm_state);
- vty_out(vty, " Paging: %u requests in queue%s",
- paging_queue_length(btsb->paging_state), VTY_NEWLINE);
+ vty_out(vty, " Paging: Queue size %u, occupied %u, lifetime %us%s",
+ btsb->paging_q_len, paging_queue_length(btsb->paging_state),
+ btsb->paging_lifetime, VTY_NEWLINE);
#if 0
vty_out(vty, " Paging: %u pending requests, %u free slots%s",
paging_pending_requests_nr(bts),
@@ -487,6 +528,8 @@ int bts_vty_init(const struct log_info *cat)
install_element(BTS_NODE, &cfg_bts_band_cmd);
install_element(BTS_NODE, &cfg_description_cmd);
install_element(BTS_NODE, &cfg_no_description_cmd);
+ install_element(BTS_NODE, &cfg_bts_paging_queue_size_cmd);
+ install_element(BTS_NODE, &cfg_bts_paging_lifetime_cmd);
/* add and link to TRX config node */
install_element(BTS_NODE, &cfg_bts_trx_cmd);