aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2021-07-08 18:28:20 +0200
committerneels <nhofmeyr@sysmocom.de>2021-07-15 09:28:18 +0000
commit71526043ea042fbad65b3a099e94190fc086640c (patch)
treec72eb0562bc399de6ccfe8000262a7c172e4a0eb
parentfdb87343d7a747575fae0bb436cd9d105b9748e9 (diff)
ensure trigger_ho() returns zero only when HO or AS was indeed triggered
In an upcoming patch, handover_decision_2.c will use this indicator to decide whether to start a penalty timer: "hodec2: add low-rxqual-assignment penalty timer (2/2)" Id00a07313fe04eec509b336c0637b59c707760e0 Related: SYS#5198 Change-Id: I5de385e0666f716184a62e6e70d656545ac5d2ee
-rw-r--r--include/osmocom/bsc/handover_fsm.h2
-rw-r--r--src/osmo-bsc/handover_decision_2.c8
-rw-r--r--src/osmo-bsc/handover_fsm.c4
3 files changed, 7 insertions, 7 deletions
diff --git a/include/osmocom/bsc/handover_fsm.h b/include/osmocom/bsc/handover_fsm.h
index 1628d8fd9..052e09d79 100644
--- a/include/osmocom/bsc/handover_fsm.h
+++ b/include/osmocom/bsc/handover_fsm.h
@@ -57,7 +57,7 @@ struct handover_rr_detect_data {
void handover_fsm_init();
-void handover_request(struct handover_out_req *req);
+int handover_request(struct handover_out_req *req);
void handover_start(struct handover_out_req *req);
void handover_start_inter_bsc_in(struct gsm_subscriber_connection *conn,
struct msgb *ho_request_msg);
diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c
index 3fa1084e4..af36c3189 100644
--- a/src/osmo-bsc/handover_decision_2.c
+++ b/src/osmo-bsc/handover_decision_2.c
@@ -854,7 +854,7 @@ static int trigger_local_ho_or_as(struct ho_candidate *c, uint8_t requirements)
if ((requirements & REQUIREMENT_TCHF_MASK)) {
if (c->current.bts == c->target.bts) {
LOGPHOLCHAN(c->current.lchan, LOGL_INFO, "Not performing assignment: Already on target type\n");
- return 0;
+ return -EALREADY;
}
full_rate = true;
break;
@@ -886,7 +886,7 @@ static int trigger_local_ho_or_as(struct ho_candidate *c, uint8_t requirements)
}
if (c->current.bts == c->target.bts) {
LOGPHOLCHAN(c->current.lchan, LOGL_INFO, "Not performing assignment: Already on target type\n");
- return 0;
+ return -EALREADY;
}
break;
default:
@@ -899,8 +899,8 @@ static int trigger_local_ho_or_as(struct ho_candidate *c, uint8_t requirements)
LOGPHOLCHAN(c->current.lchan, LOGL_NOTICE, "Triggering assignment to %s, due to %s\n",
full_rate ? "TCH/F" : "TCH/H",
ho_reason_name(global_ho_reason));
- reassignment_request_to_chan_type(ASSIGN_FOR_CONGESTION_RESOLUTION, c->current.lchan,
- full_rate? GSM_LCHAN_TCH_F : GSM_LCHAN_TCH_H);
+ return reassignment_request_to_chan_type(ASSIGN_FOR_CONGESTION_RESOLUTION, c->current.lchan,
+ full_rate? GSM_LCHAN_TCH_F : GSM_LCHAN_TCH_H);
} else {
struct handover_out_req req = {
.from_hodec_id = HODEC2,
diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c
index 5f4b8928a..797a336e8 100644
--- a/src/osmo-bsc/handover_fsm.c
+++ b/src/osmo-bsc/handover_fsm.c
@@ -219,7 +219,7 @@ static const struct osmo_tdef_state_timeout ho_fsm_timeouts[32] = {
} while(0)
/* issue handover to a cell identified by ARFCN and BSIC */
-void handover_request(struct handover_out_req *req)
+int handover_request(struct handover_out_req *req)
{
struct gsm_subscriber_connection *conn;
OSMO_ASSERT(req->old_lchan);
@@ -229,7 +229,7 @@ void handover_request(struct handover_out_req *req)
/* To make sure we're allowed to start a handover, go through a gscon event dispatch. If that is accepted, the
* same req is passed to handover_start(). */
- osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_HANDOVER_START, req);
+ return osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_HANDOVER_START, req);
}
/* Check that ho has old_lchan and/or new_lchan and conn pointers match.