add X27 timeout: release lchan that lacks L1 Info
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
This commit is contained in:
parent
fe5fefa4ac
commit
e808724a4f
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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" },
|
||||
{}
|
||||
|
|
Loading…
Reference in New Issue