From 550bb88a9e70b90b60720b0612e136c3467c5281 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 4 Dec 2013 17:10:54 +0100 Subject: llc: Count the number of frames queued inside the LLC queue --- src/llc.cpp | 6 ++++++ src/llc.h | 2 ++ src/tbf.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/llc.cpp b/src/llc.cpp index e5d56465..b756d338 100644 --- a/src/llc.cpp +++ b/src/llc.cpp @@ -42,6 +42,7 @@ void gprs_llc::reset_frame_space() void gprs_llc::enqueue(struct msgb *llc_msg) { + m_queue_size += 1; msgb_enqueue(&queue, llc_msg); } @@ -67,16 +68,21 @@ void gprs_llc::clear(BTS *bts) bts->llc_dropped_frame(); msgb_free(msg); } + + m_queue_size = 0; } void gprs_llc::init() { INIT_LLIST_HEAD(&queue); + m_queue_size = 0; reset(); } struct msgb *gprs_llc::dequeue() { + if (m_queue_size > 0) + m_queue_size -= 1; return msgb_dequeue(&queue); } diff --git a/src/llc.h b/src/llc.h index f50419c8..f29c929e 100644 --- a/src/llc.h +++ b/src/llc.h @@ -54,6 +54,8 @@ struct gprs_llc { uint16_t m_index; /* current write/read position of frame */ uint16_t m_length; /* len of current DL LLC_frame, 0 == no frame */ struct llist_head queue; /* queued LLC DL data */ + + size_t m_queue_size; }; inline uint16_t gprs_llc::chunk_size() const diff --git a/src/tbf.cpp b/src/tbf.cpp index 8ffafce8..4c0e845a 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -636,8 +636,8 @@ struct msgb *gprs_rlcmac_tbf::llc_dequeue(bssgp_bvc_ctx *bctx) if (gprs_llc::is_frame_expired(&tv_now, tv)) { LOGP(DRLCMACDL, LOGL_NOTICE, "%s Discarding LLC PDU " - "because lifetime limit reached\n", - tbf_name(this)); + "because lifetime limit reached. Queue size %zu\n", + tbf_name(this), m_llc.m_queue_size); bts->llc_timedout_frame(); frames++; octets += msg->len; -- cgit v1.2.3