llc: Count the number of frames queued inside the LLC queue
diff --git a/src/llc.cpp b/src/llc.cpp
index e5d5646..b756d33 100644
--- a/src/llc.cpp
+++ b/src/llc.cpp
@@ -42,6 +42,7 @@
 
 void gprs_llc::enqueue(struct msgb *llc_msg)
 {
+	m_queue_size += 1;
 	msgb_enqueue(&queue, llc_msg);
 }
 
@@ -67,16 +68,21 @@
 		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 f50419c..f29c929 100644
--- a/src/llc.h
+++ b/src/llc.h
@@ -54,6 +54,8 @@
 	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 8ffafce..4c0e845 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -636,8 +636,8 @@
 
 		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;