diff --git a/TODO-RELEASE b/TODO-RELEASE index 9af92c175..692bdc18b 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -10,3 +10,4 @@ core osmo_tdef_get() change val_if_not_present arg from unsigned long to long to allow passing -1 core struct osmo_tdef fields min_val,max_val added, ABI break (arrays of structs used in programs) gsm API added osmo_gsm48_rfpowercap2powerclass() +gb API added bssgp_bvc_ctx_free() diff --git a/include/osmocom/gprs/gprs_bssgp.h b/include/osmocom/gprs/gprs_bssgp.h index 400c3e008..0f87333af 100644 --- a/include/osmocom/gprs/gprs_bssgp.h +++ b/include/osmocom/gprs/gprs_bssgp.h @@ -112,6 +112,8 @@ extern struct llist_head bssgp_bvc_ctxts; struct bssgp_bvc_ctx *btsctx_by_raid_cid(const struct gprs_ra_id *raid, uint16_t cid); /* Find a BTS context based on BVCI+NSEI tuple */ struct bssgp_bvc_ctx *btsctx_by_bvci_nsei(uint16_t bvci, uint16_t nsei); +/* Free a given BTS context */ +void bssgp_bvc_ctx_free(struct bssgp_bvc_ctx *ctx); #define BVC_F_BLOCKED 0x0001 diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c index b695c284c..896f1c5ac 100644 --- a/src/gb/gprs_bssgp.c +++ b/src/gb/gprs_bssgp.c @@ -141,6 +141,15 @@ struct bssgp_bvc_ctx *btsctx_alloc(uint16_t bvci, uint16_t nsei) return ctx; } +void bssgp_bvc_ctx_free(struct bssgp_bvc_ctx *ctx) +{ + if (!ctx) + return; + rate_ctr_group_free(ctx->ctrg); + llist_del(&ctx->list); + talloc_free(ctx); +} + /* Chapter 10.4.5: Flow Control BVC ACK */ static int bssgp_tx_fc_bvc_ack(uint16_t nsei, uint8_t tag, uint16_t ns_bvci) { diff --git a/src/gb/libosmogb.map b/src/gb/libosmogb.map index 5e675a66c..ad139c1c0 100644 --- a/src/gb/libosmogb.map +++ b/src/gb/libosmogb.map @@ -80,6 +80,7 @@ gprs_nsvc_state_append; gprs_log_filter_fn; btsctx_alloc; +bssgp_bvc_ctx_free; btsctx_by_bvci_nsei; btsctx_by_raid_cid;