From 5a11b46c74ff241673b0d633e3bc3f249dfb1e97 Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Wed, 30 Mar 2022 11:34:36 +0200 Subject: bssgp_bvc_fsm: Add a hook to notify when a reset was acknowledged Change-Id: If240dd13f0f674693018c93390386b2c8afb97af Related: SYS#5908 --- TODO-RELEASE | 1 + include/osmocom/gprs/bssgp_bvc_fsm.h | 2 ++ src/gb/bssgp_bvc_fsm.c | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/TODO-RELEASE b/TODO-RELEASE index 89023719..a6d16d29 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -9,3 +9,4 @@ #library what description / commit summary line libosmogsm ABI BREAKAGE CELL_IDENT_WHOLE_GLOBAL_PS changed enum number libosmogsm add struct member Add codec_list_bss_supported to gsm0808_handover_request_ack (more_items flag ensures ABI compat) +libosmogb ABI BREAKAGE Add reset_ack_notification function pointer to struct bssgp_bvc_fsm_ops diff --git a/include/osmocom/gprs/bssgp_bvc_fsm.h b/include/osmocom/gprs/bssgp_bvc_fsm.h index 446dda84..9d3a6205 100644 --- a/include/osmocom/gprs/bssgp_bvc_fsm.h +++ b/include/osmocom/gprs/bssgp_bvc_fsm.h @@ -40,6 +40,8 @@ struct bssgp_bvc_fsm_ops { void (*reset_notification)(uint16_t nsei, uint16_t bvci, const struct gprs_ra_id *ra_id, uint16_t cell_id, uint8_t cause, void *priv); void (*rx_fc_bvc)(uint16_t nsei, uint16_t bvci, const struct bssgp2_flow_ctrl *fc, void *priv); + void (*reset_ack_notification)(uint16_t nsei, uint16_t bvci, const struct gprs_ra_id *ra_id, + uint16_t cell_id, uint8_t cause, void *priv); }; struct osmo_fsm_inst * diff --git a/src/gb/bssgp_bvc_fsm.c b/src/gb/bssgp_bvc_fsm.c index 664ad092..3a36c7dc 100644 --- a/src/gb/bssgp_bvc_fsm.c +++ b/src/gb/bssgp_bvc_fsm.c @@ -375,6 +375,7 @@ static void bssgp_bvc_fsm_wait_reset_ack(struct osmo_fsm_inst *fi, uint32_t even struct bvc_fsm_priv *bfp = fi->priv; const struct tlv_parsed *tp = NULL; struct msgb *rx = NULL, *tx; + uint8_t cause; switch (event) { case BSSGP_BVCFSM_E_RX_RESET: @@ -385,6 +386,7 @@ static void bssgp_bvc_fsm_wait_reset_ack(struct osmo_fsm_inst *fi, uint32_t even /* fall-through */ case BSSGP_BVCFSM_E_RX_RESET_ACK: rx = data; + cause = bfp->last_reset_cause; tp = (const struct tlv_parsed *) msgb_bcid(rx); if (bfp->bvci == 0) update_negotiated_features(fi, tp); @@ -398,6 +400,8 @@ static void bssgp_bvc_fsm_wait_reset_ack(struct osmo_fsm_inst *fi, uint32_t even osmo_fsm_inst_state_chg(fi, BSSGP_BVCFSM_S_BLOCKED, T1_SECS, T1); } else osmo_fsm_inst_state_chg(fi, BSSGP_BVCFSM_S_UNBLOCKED, 0, 0); + if (bfp->ops && bfp->ops->reset_ack_notification) + bfp->ops->reset_ack_notification(bfp->nsei, bfp->bvci, &bfp->ra_id, bfp->cell_id, cause, bfp->ops_priv); break; } } -- cgit v1.2.3