diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2022-09-20 14:10:37 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2022-09-20 14:15:07 +0200 |
commit | e808724a4fc7bf02532caa24a7ea17d54e6bbd9d (patch) | |
tree | 0bb570dcd355737925abba35989807da00f5ea92 | |
parent | fe5fefa4ac5bda9ee926d59644d0548252166513 (diff) |
add X27 timeout: release lchan that lacks L1 Infoneels/chan_timeout
To lchan_fsm ESTABLISHED, add a timeout: if MEAS REP lack L1 Info for a
time defined by timer net X27, release the lchan.
Related: OS#5530
Related: If7c76445373d5d0e915a3e8910d3eb991216f768 (osmo-ttcn3-hacks)
Change-Id: I6fb29315568554c8490ee999fcfd1b77d8245389
-rw-r--r-- | include/osmocom/bsc/lchan_fsm.h | 1 | ||||
-rw-r--r-- | src/osmo-bsc/abis_rsl.c | 5 | ||||
-rw-r--r-- | src/osmo-bsc/lchan_fsm.c | 11 | ||||
-rw-r--r-- | src/osmo-bsc/net_init.c | 1 |
4 files changed, 18 insertions, 0 deletions
diff --git a/include/osmocom/bsc/lchan_fsm.h b/include/osmocom/bsc/lchan_fsm.h index b9ffb2243..276631bb7 100644 --- a/include/osmocom/bsc/lchan_fsm.h +++ b/include/osmocom/bsc/lchan_fsm.h @@ -54,6 +54,7 @@ enum lchan_fsm_event { LCHAN_EV_RSL_CHAN_MODE_MODIFY_ACK, LCHAN_EV_RSL_CHAN_MODE_MODIFY_NACK, LCHAN_EV_REQUEST_MODE_MODIFY, + LCHAN_EV_RX_MEAS_RES_L1_INFO, }; void lchan_fsm_init(); diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index 1c60405c4..8f94c05d6 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -1450,6 +1450,11 @@ static int rsl_rx_meas_res(struct msgb *msg) lchan_ms_pwr_ctrl(msg->lchan, mr); + if ((mr->flags & MEAS_REP_F_MS_L1)) { + /* Notify lchan_fsm that L1 is still alive */ + osmo_fsm_inst_dispatch(mr->lchan->fi, LCHAN_EV_RX_MEAS_RES_L1_INFO, mr); + } + send_lchan_signal(S_LCHAN_MEAS_REP, msg->lchan, mr); return 0; diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c index 21e145bdd..1c7e9c9c3 100644 --- a/src/osmo-bsc/lchan_fsm.c +++ b/src/osmo-bsc/lchan_fsm.c @@ -285,6 +285,7 @@ struct osmo_tdef_state_timeout lchan_fsm_timeouts[32] = { [LCHAN_ST_WAIT_TS_READY] = { .T=-5 }, [LCHAN_ST_WAIT_ACTIV_ACK] = { .T=-6 }, [LCHAN_ST_WAIT_RLL_RTP_ESTABLISH] = { .T=3101 }, + [LCHAN_ST_ESTABLISHED] = { .T = -27 }, [LCHAN_ST_WAIT_RLL_RTP_RELEASED] = { .T=3109 }, [LCHAN_ST_WAIT_BEFORE_RF_RELEASE] = { .T=3111 }, [LCHAN_ST_WAIT_RF_RELEASE_ACK] = { .T=3111 }, @@ -1666,6 +1667,7 @@ static const struct osmo_fsm_state lchan_fsm_states[] = { | S(LCHAN_EV_REQUEST_MODE_MODIFY) , .out_state_mask = 0 + | S(LCHAN_ST_ESTABLISHED) | S(LCHAN_ST_UNUSED) | S(LCHAN_ST_WAIT_RLL_RTP_RELEASED) | S(LCHAN_ST_WAIT_BEFORE_RF_RELEASE) @@ -1764,6 +1766,7 @@ static const struct value_string lchan_fsm_event_names[] = { OSMO_VALUE_STRING(LCHAN_EV_RSL_CHAN_MODE_MODIFY_ACK), OSMO_VALUE_STRING(LCHAN_EV_RSL_CHAN_MODE_MODIFY_NACK), OSMO_VALUE_STRING(LCHAN_EV_REQUEST_MODE_MODIFY), + OSMO_VALUE_STRING(LCHAN_EV_RX_MEAS_RES_L1_INFO), {} }; @@ -1789,6 +1792,13 @@ static void lchan_fsm_allstate_action(struct osmo_fsm_inst *fi, uint32_t event, * radio link layer failed */ return; + case LCHAN_EV_RX_MEAS_RES_L1_INFO: + if (fi->state != LCHAN_ST_ESTABLISHED) + return; + /* Re-enter ESTABLISHED state to refresh "L1 alive" timeout */ + lchan_fsm_state_chg(LCHAN_ST_ESTABLISHED); + return; + default: return; } @@ -1937,6 +1947,7 @@ static struct osmo_fsm lchan_fsm = { .allstate_event_mask = 0 | S(LCHAN_EV_TS_ERROR) | S(LCHAN_EV_RLL_ERR_IND) + | S(LCHAN_EV_RX_MEAS_RES_L1_INFO) , .timer_cb = lchan_fsm_timer_cb, .cleanup = lchan_fsm_cleanup, diff --git a/src/osmo-bsc/net_init.c b/src/osmo-bsc/net_init.c index 8a8c0a674..23a93cc4b 100644 --- a/src/osmo-bsc/net_init.c +++ b/src/osmo-bsc/net_init.c @@ -72,6 +72,7 @@ static struct osmo_tdef gsm_network_T_defs[] = { " after this amount of idle time, forget internally cumulated time remainders. Zero to always" " keep remainders. See also X16, X17." }, { .T=-25, .default_val=5, .desc="Timeout for initial user data after an MSC initiated an SCCP connection to the BSS" }, + { .T=-27, .default_val = 30, .desc = "Time after which to release an lchan when not receiving L1 Info in MEAS RES" }, { .T=-3111, .default_val=4, .desc="Wait time after lchan was released in error (should be T3111 + 2s)" }, { .T=-3210, .default_val=20, .desc="After L3 Complete, wait for MSC to confirm" }, {} |