diff options
Diffstat (limited to 'src/gsm/iuup.c')
-rw-r--r-- | src/gsm/iuup.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gsm/iuup.c b/src/gsm/iuup.c index 4c0a9482..ca7eb2b8 100644 --- a/src/gsm/iuup.c +++ b/src/gsm/iuup.c @@ -734,6 +734,7 @@ static void iuup_fsm_init(struct osmo_fsm_inst *fi, uint32_t event, void *data) } } +/* 3GPP TS 25.415 B.2.3 "Support Mode Data Transfer Ready State" */ static void iuup_fsm_smpsdu_data(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct osmo_iuup_instance *iui = fi->priv; @@ -745,6 +746,14 @@ static void iuup_fsm_smpsdu_data(struct osmo_fsm_inst *fi, uint32_t event, void irp = data; osmo_fsm_inst_state_chg(fi, IUUP_FSM_ST_NULL, 0, 0); break; + case IUUP_FSM_EVT_INIT: + /* "In case of handover or relocation, Initialisation procedures + * may have to be performed and Iu UP instance may have to enter + * the initialisation state." */ + itp = data; + if (!iuup_rx_initialization(iui, itp)) + osmo_fsm_inst_state_chg(fi, IUUP_FSM_ST_INIT, 0, 0); + break; case IUUP_FSM_EVT_IUUP_DATA_REQ: /* Data coming down from RNL (user) towards TNL (transport) */ irp = data; @@ -821,6 +830,7 @@ static const struct osmo_fsm_state iuup_fsm_states[] = { }, [IUUP_FSM_ST_SMpSDU_DATA_XFER_READY] = { .in_event_mask = S(IUUP_FSM_EVT_IUUP_CONFIG_REQ) | + S(IUUP_FSM_EVT_INIT) | S(IUUP_FSM_EVT_IUUP_DATA_REQ) | S(IUUP_FSM_EVT_IUUP_DATA_IND), .out_state_mask = S(IUUP_FSM_ST_NULL) | |