From acc0a070c770eb16aba8ef93780eda5365057b6c Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Tue, 7 Aug 2018 11:22:28 +0200 Subject: bssgp: introduce flush queue functions To reset the state of BSSGP allow to flush the BSSGP queues. When testing (with TTCN3) the test object should be resetted between each test. Introduce the functions: bssgp_fc_flush_queue() - flushs a single flow control object bssgp_flush_all_queues() - flushs queues of all BSSGP connections Change-Id: I29b6ad6742ddf9b0b58b4af37d9a1cf18e019325 --- src/gb/gprs_bssgp.c | 28 ++++++++++++++++++++++++++++ src/gb/libosmogb.map | 2 ++ 2 files changed, 30 insertions(+) (limited to 'src/gb') diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c index 5dfce16c..3b9fbf95 100644 --- a/src/gb/gprs_bssgp.c +++ b/src/gb/gprs_bssgp.c @@ -1263,3 +1263,31 @@ void bssgp_set_log_ss(int ss) { DBSSGP = ss; } + +/*! + * \brief Flush the queue of the bssgp_flow_control + * \param[in] The flow control object which holds the queue. + */ +void bssgp_fc_flush_queue(struct bssgp_flow_control *fc) +{ + struct bssgp_fc_queue_element *element, *tmp; + + llist_for_each_entry_safe(element, tmp, &fc->queue, list) { + msgb_free(element->msg); + llist_del(&element->list); + talloc_free(element); + } +} + +/*! + * \brief Flush the queues of all BSSGP contexts. + */ +void bssgp_flush_all_queues() +{ + struct bssgp_bvc_ctx *bctx; + + llist_for_each_entry(bctx, &bssgp_bvc_ctxts, list) { + if (bctx->fc) + bssgp_fc_flush_queue(bctx->fc); + } +} diff --git a/src/gb/libosmogb.map b/src/gb/libosmogb.map index d56e6514..ec69670e 100644 --- a/src/gb/libosmogb.map +++ b/src/gb/libosmogb.map @@ -6,6 +6,8 @@ bssgp_pdu_str; bssgp_fc_in; bssgp_fc_init; bssgp_fc_ms_init; +bssgp_fc_flush_queue; +bssgp_flush_all_queues; bssgp_msgb_alloc; bssgp_msgb_copy; bssgp_msgb_tlli_put; -- cgit v1.2.3