aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2022-03-30 11:34:36 +0200
committerDaniel Willmann <dwillmann@sysmocom.de>2022-03-30 14:33:44 +0200
commit5a11b46c74ff241673b0d633e3bc3f249dfb1e97 (patch)
tree210257f3bd88939eee9f4ab5754511e4eef3b2bd
parentc17546faff2ecdc688cdcb25875a26492d43733e (diff)
bssgp_bvc_fsm: Add a hook to notify when a reset was acknowledgeddaniel/bvc-reset
-rw-r--r--TODO-RELEASE1
-rw-r--r--include/osmocom/gprs/bssgp_bvc_fsm.h2
-rw-r--r--src/gb/bssgp_bvc_fsm.c4
3 files changed, 7 insertions, 0 deletions
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;
}
}