From db8415b5b6d58f81be5fa33077fa3c0e7d46ca24 Mon Sep 17 00:00:00 2001 From: "Martine S. Lenders" Date: Mon, 15 Mar 2021 15:13:27 +0100 Subject: [PATCH 1/2] gnrc_netif_pktq: add function to check usage --- sys/include/net/gnrc/netif/pktq.h | 7 +++++++ sys/net/gnrc/netif/pktq/gnrc_netif_pktq.c | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/sys/include/net/gnrc/netif/pktq.h b/sys/include/net/gnrc/netif/pktq.h index 582f83757a97..7138e3b5b451 100644 --- a/sys/include/net/gnrc/netif/pktq.h +++ b/sys/include/net/gnrc/netif/pktq.h @@ -46,6 +46,13 @@ extern "C" { */ int gnrc_netif_pktq_put(gnrc_netif_t *netif, gnrc_pktsnip_t *pkt); +/** + * @brief Returns the overall usage of the packet queue resources + * + * @return Number of gnrc_pktqueue_t entries currently in use. + */ +unsigned gnrc_netif_pktq_usage(void); + /** * @brief Gets a packet from the packet send queue of a network interface * diff --git a/sys/net/gnrc/netif/pktq/gnrc_netif_pktq.c b/sys/net/gnrc/netif/pktq/gnrc_netif_pktq.c index b8ced8b89329..11a9a3b23e6c 100644 --- a/sys/net/gnrc/netif/pktq/gnrc_netif_pktq.c +++ b/sys/net/gnrc/netif/pktq/gnrc_netif_pktq.c @@ -32,6 +32,18 @@ static gnrc_pktqueue_t *_get_free_entry(void) return NULL; } +unsigned gnrc_netif_pktq_usage(void) +{ + unsigned res = 0; + + for (unsigned i = 0; i < CONFIG_GNRC_NETIF_PKTQ_POOL_SIZE; i++) { + if (_pool[i].pkt != NULL) { + res++; + } + } + return res; +} + int gnrc_netif_pktq_put(gnrc_netif_t *netif, gnrc_pktsnip_t *pkt) { assert(netif != NULL); From 6507d04a8384a17a1257ef097fb340c3b1a81f3d Mon Sep 17 00:00:00 2001 From: "Martine S. Lenders" Date: Mon, 15 Mar 2021 15:13:59 +0100 Subject: [PATCH 2/2] tests/unittests: extend tests for gnrc_netif_pktq_usage() --- .../tests-gnrc_netif_pktq.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/unittests/tests-gnrc_netif_pktq/tests-gnrc_netif_pktq.c b/tests/unittests/tests-gnrc_netif_pktq/tests-gnrc_netif_pktq.c index dded729fe5d2..ceaf9bb48a4b 100644 --- a/tests/unittests/tests-gnrc_netif_pktq/tests-gnrc_netif_pktq.c +++ b/tests/unittests/tests-gnrc_netif_pktq/tests-gnrc_netif_pktq.c @@ -32,6 +32,11 @@ static void test_pktq_get__empty(void) TEST_ASSERT_NULL(gnrc_netif_pktq_get(&_netif)); } +static void test_pktq_usage__empty(void) +{ + TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_usage()); +} + static void test_pktq_put__full(void) { gnrc_pktsnip_t pkt; @@ -40,6 +45,8 @@ static void test_pktq_put__full(void) TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_put(&_netif, &pkt)); } TEST_ASSERT_EQUAL_INT(-1, gnrc_netif_pktq_put(&_netif, &pkt)); + TEST_ASSERT_EQUAL_INT(CONFIG_GNRC_NETIF_PKTQ_POOL_SIZE, + gnrc_netif_pktq_usage()); } static void test_pktq_put_get1(void) @@ -47,8 +54,10 @@ static void test_pktq_put_get1(void) gnrc_pktsnip_t pkt_in, *pkt_out; TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_put(&_netif, &pkt_in)); + TEST_ASSERT_EQUAL_INT(1, gnrc_netif_pktq_usage()); TEST_ASSERT_NOT_NULL((pkt_out = gnrc_netif_pktq_get(&_netif))); TEST_ASSERT(&pkt_in == pkt_out); + TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_usage()); } static void test_pktq_put_get3(void) @@ -58,12 +67,14 @@ static void test_pktq_put_get3(void) for (unsigned i = 0; i < 3; i++) { TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_put(&_netif, &pkt_in[i])); } + TEST_ASSERT_EQUAL_INT(3, gnrc_netif_pktq_usage()); for (unsigned i = 0; i < 3; i++) { gnrc_pktsnip_t *pkt_out; TEST_ASSERT_NOT_NULL((pkt_out = gnrc_netif_pktq_get(&_netif))); TEST_ASSERT(&pkt_in[i] == pkt_out); } + TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_usage()); } static void test_pktq_push_back__full(void) @@ -74,6 +85,8 @@ static void test_pktq_push_back__full(void) TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_put(&_netif, &pkt)); } TEST_ASSERT_EQUAL_INT(-1, gnrc_netif_pktq_push_back(&_netif, &pkt)); + TEST_ASSERT_EQUAL_INT(CONFIG_GNRC_NETIF_PKTQ_POOL_SIZE, + gnrc_netif_pktq_usage()); } static void test_pktq_push_back_get1(void) @@ -81,8 +94,10 @@ static void test_pktq_push_back_get1(void) gnrc_pktsnip_t pkt_in, *pkt_out; TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_push_back(&_netif, &pkt_in)); + TEST_ASSERT_EQUAL_INT(1, gnrc_netif_pktq_usage()); TEST_ASSERT_NOT_NULL((pkt_out = gnrc_netif_pktq_get(&_netif))); TEST_ASSERT(&pkt_in == pkt_out); + TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_usage()); } static void test_pktq_push_back_get3(void) @@ -92,12 +107,14 @@ static void test_pktq_push_back_get3(void) for (unsigned i = 0; i < 3; i++) { TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_push_back(&_netif, &pkt_in[i])); } + TEST_ASSERT_EQUAL_INT(3, gnrc_netif_pktq_usage()); for (unsigned i = 0; i < 3; i++) { gnrc_pktsnip_t *pkt_out; TEST_ASSERT_NOT_NULL((pkt_out = gnrc_netif_pktq_get(&_netif))); TEST_ASSERT(&pkt_in[3 - i - 1] == pkt_out); } + TEST_ASSERT_EQUAL_INT(0, gnrc_netif_pktq_usage()); } static void test_pktq_empty(void) @@ -119,6 +136,7 @@ static Test *test_gnrc_netif_pktq(void) { EMB_UNIT_TESTFIXTURES(fixtures) { new_TestFixture(test_pktq_get__empty), + new_TestFixture(test_pktq_usage__empty), new_TestFixture(test_pktq_put__full), new_TestFixture(test_pktq_put_get1), new_TestFixture(test_pktq_put_get3),