aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@netfilter.org>2009-12-19 21:41:52 +0100
committerHarald Welte <laforge@netfilter.org>2009-12-19 21:41:52 +0100
commitbc814501e8a28f72e16a4662250af01aaa2a1489 (patch)
treea510ceb0879cbb1091c73ffa3d6ca2c78e70124f
parente786c32bc935bb7767335758e92c886322c8aeb5 (diff)
[handover] add VTY parameter to enable/disable handover
-rw-r--r--openbsc/include/openbsc/gsm_data.h3
-rw-r--r--openbsc/src/handover_decision.c18
-rw-r--r--openbsc/src/vty_interface.c14
3 files changed, 28 insertions, 7 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 67465e460..f4e4d2172 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -452,6 +452,9 @@ struct gsm_network {
int a5_encryption;
int neci;
int send_mm_info;
+ struct {
+ int active;
+ } handover;
/* layer 4 */
int (*mncc_recv) (struct gsm_network *net, int msg_type, void *arg);
diff --git a/openbsc/src/handover_decision.c b/openbsc/src/handover_decision.c
index 3605a8e0a..4c08c6664 100644
--- a/openbsc/src/handover_decision.c
+++ b/openbsc/src/handover_decision.c
@@ -88,15 +88,19 @@ static int process_meas_rep(struct gsm_meas_rep *mr)
}
}
- if (mr_cell) {
- LOGP(DHO, LOGL_INFO, "Cell on ARFCN %u is better, starting "
- "handover\n", mr_cell->arfcn);
- return handover_to_arfcn_bsic(mr->lchan, mr_cell->arfcn,
- mr_cell->bsic);
+ if (!mr_cell) {
+ DEBUGPC(DHO, "No better cell\n");
+ return 0;
}
- DEBUGPC(DHO, "No better cell\n");
- return 0;
+ LOGP(DHO, LOGL_INFO, "Cell on ARFCN %u is better: ", mr_cell->arfcn);
+ if (!mr->lchan->ts->trx->bts->network->handover.active) {
+ LOGPC(DHO, LOGL_INFO, "Skipping, Handover disabled\n");
+ return 0;
+ }
+
+ LOGPC(DHO, LOGL_INFO, "Starting handover\n");
+ return handover_to_arfcn_bsic(mr->lchan, mr_cell->arfcn, mr_cell->bsic);
}
static int ho_dec_sig_cb(unsigned int subsys, unsigned int signal,
diff --git a/openbsc/src/vty_interface.c b/openbsc/src/vty_interface.c
index d5344edac..20df9091d 100644
--- a/openbsc/src/vty_interface.c
+++ b/openbsc/src/vty_interface.c
@@ -95,6 +95,8 @@ static void net_dump_vty(struct vty *vty, struct gsm_network *net)
VTY_NEWLINE);
vty_out(vty, " MM Info: %s%s", net->send_mm_info ? "On" : "Off",
VTY_NEWLINE);
+ vty_out(vty, " Handover: %s%s", net->handover.active ? "On" : "Off",
+ VTY_NEWLINE);
}
DEFUN(show_net, show_net_cmd, "show network",
@@ -296,6 +298,7 @@ static int config_write_net(struct vty *vty)
vty_out(vty, " rrlp mode %s%s", rrlp_mode_name(gsmnet->rrlp.mode),
VTY_NEWLINE);
vty_out(vty, " mm info %u%s", gsmnet->send_mm_info, VTY_NEWLINE);
+ vty_out(vty, " handover %u%s", gsmnet->handover.active, VTY_NEWLINE);
vty_out(vty, " timer t3101 %u%s", gsmnet->T3101, VTY_NEWLINE);
vty_out(vty, " timer t3103 %u%s", gsmnet->T3103, VTY_NEWLINE);
vty_out(vty, " timer t3105 %u%s", gsmnet->T3105, VTY_NEWLINE);
@@ -863,6 +866,16 @@ DEFUN(cfg_net_mm_info, cfg_net_mm_info_cmd,
return CMD_SUCCESS;
}
+DEFUN(cfg_net_handover, cfg_net_handover_cmd,
+ "handover (0|1)",
+ "Whether or not to use in-call handover")
+{
+ gsmnet->handover.active = atoi(argv[0]);
+
+ return CMD_SUCCESS;
+}
+
+
#define DECLARE_TIMER(number) \
DEFUN(cfg_net_T##number, \
cfg_net_T##number##_cmd, \
@@ -1371,6 +1384,7 @@ int bsc_vty_init(struct gsm_network *net)
install_element(GSMNET_NODE, &cfg_net_neci_cmd);
install_element(GSMNET_NODE, &cfg_net_rrlp_mode_cmd);
install_element(GSMNET_NODE, &cfg_net_mm_info_cmd);
+ install_element(GSMNET_NODE, &cfg_net_handover_cmd);
install_element(GSMNET_NODE, &cfg_net_T3101_cmd);
install_element(GSMNET_NODE, &cfg_net_T3103_cmd);
install_element(GSMNET_NODE, &cfg_net_T3105_cmd);