diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index eb25a2c0768..e2177f8ac7e 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -64,6 +64,7 @@ static void loopback_init(struct net_if *iface) #ifdef CONFIG_NET_LOOPBACK_SIMULATE_PACKET_DROP static float loopback_packet_drop_ratio = 0.0f; static float loopback_packet_drop_state = 0.0f; +static int loopback_packet_dropped_count; int loopback_set_packet_drop_ratio(float ratio) { @@ -73,6 +74,12 @@ int loopback_set_packet_drop_ratio(float ratio) loopback_packet_drop_ratio = ratio; return 0; } + +int loopback_get_num_dropped_packets(void) +{ + return loopback_packet_dropped_count; +} + #endif static int loopback_send(const struct device *dev, struct net_pkt *pkt) @@ -126,6 +133,7 @@ static int loopback_send(const struct device *dev, struct net_pkt *pkt) if (loopback_packet_drop_state >= 1.0f) { /* Administrate we dropped a packet */ loopback_packet_drop_state -= 1.0f; + loopback_packet_dropped_count++; /* Clean up the packet */ net_pkt_unref(cloned); diff --git a/include/zephyr/net/loopback.h b/include/zephyr/net/loopback.h index 7d05c275bc4..c58e0fd9fac 100644 --- a/include/zephyr/net/loopback.h +++ b/include/zephyr/net/loopback.h @@ -24,6 +24,13 @@ extern "C" { * @return 0 on success, otherwise a negative integer. */ int loopback_set_packet_drop_ratio(float ratio); + +/** + * @brief Get the number of dropped packets + * + * @return number of packets dropped by the loopback interface + */ +int loopback_get_num_dropped_packets(void); #endif #ifdef __cplusplus