diff options
-rw-r--r-- | src/llc.cpp | 4 | ||||
-rw-r--r-- | src/llc.h | 7 | ||||
-rw-r--r-- | tests/llc/LlcTest.cpp | 7 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/llc.cpp b/src/llc.cpp index d847c872..3388db1f 100644 --- a/src/llc.cpp +++ b/src/llc.cpp @@ -100,12 +100,14 @@ void gprs_llc_queue::init() { INIT_LLIST_HEAD(&m_queue); m_queue_size = 0; + m_queue_octets = 0; m_avg_queue_delay = 0; } void gprs_llc_queue::enqueue(struct msgb *llc_msg) { m_queue_size += 1; + m_queue_octets += msgb_length(llc_msg) - 2*sizeof(struct timeval); msgb_enqueue(&m_queue, llc_msg); } @@ -120,6 +122,7 @@ void gprs_llc_queue::clear(BTS *bts) } m_queue_size = 0; + m_queue_octets = 0; } #define ALPHA 0.5f @@ -136,6 +139,7 @@ struct msgb *gprs_llc_queue::dequeue() return NULL; m_queue_size -= 1; + m_queue_octets -= msgb_length(msg) - 2*sizeof(struct timeval); /* take the second time */ gettimeofday(&tv_now, NULL); @@ -73,10 +73,12 @@ struct gprs_llc_queue { struct msgb *dequeue(); void clear(BTS *bts); size_t size() const; + size_t octets() const; private: uint32_t m_avg_queue_delay; /* Average delay of data going through the queue */ size_t m_queue_size; + size_t m_queue_octets; struct llist_head m_queue; /* queued LLC DL data */ }; @@ -118,3 +120,8 @@ inline size_t gprs_llc_queue::size() const { return this ? m_queue_size : 0; } + +inline size_t gprs_llc_queue::octets() const +{ + return this ? m_queue_octets : 0; +} diff --git a/tests/llc/LlcTest.cpp b/tests/llc/LlcTest.cpp index 9e1d35d0..5cc6e6e0 100644 --- a/tests/llc/LlcTest.cpp +++ b/tests/llc/LlcTest.cpp @@ -102,24 +102,31 @@ static void test_llc_queue() queue.init(); OSMO_ASSERT(queue.size() == 0); + OSMO_ASSERT(queue.octets() == 0); enqueue_data(&queue, "LLC message"); OSMO_ASSERT(queue.size() == 1); + OSMO_ASSERT(queue.octets() == 11); enqueue_data(&queue, "other LLC message"); OSMO_ASSERT(queue.size() == 2); + OSMO_ASSERT(queue.octets() == 28); dequeue_and_check(&queue, "LLC message"); OSMO_ASSERT(queue.size() == 1); + OSMO_ASSERT(queue.octets() == 17); dequeue_and_check(&queue, "other LLC message"); OSMO_ASSERT(queue.size() == 0); + OSMO_ASSERT(queue.octets() == 0); enqueue_data(&queue, "LLC"); OSMO_ASSERT(queue.size() == 1); + OSMO_ASSERT(queue.octets() == 3); queue.clear(NULL); OSMO_ASSERT(queue.size() == 0); + OSMO_ASSERT(queue.octets() == 0); printf("=== end %s ===\n", __func__); } |