]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: extract link_get_bit_rates() into networkd-speed-meter.c
authornoxiouz <atiurin@proton.me>
Sun, 22 Feb 2026 15:09:08 +0000 (15:09 +0000)
committernoxiouz <atiurin@proton.me>
Wed, 18 Mar 2026 22:55:52 +0000 (22:55 +0000)
Move the bit-rate computation out of property_get_bit_rates() in
networkd-link-bus.c into a standalone link_get_bit_rates() helper in
networkd-speed-meter.c, which already owns the speed meter state.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
src/network/networkd-link-bus.c
src/network/networkd-speed-meter.c
src/network/networkd-speed-meter.h

index 1b96fbdbd39afd17c9dcf61f7529e7db56eb0951..c411135a33f74a9fc9c8425d6531cca9fb9febac 100644 (file)
@@ -17,6 +17,7 @@
 #include "networkd-link.h"
 #include "networkd-link-bus.h"
 #include "networkd-manager.h"
+#include "networkd-speed-meter.h"
 #include "networkd-state-file.h"
 #include "ordered-set.h"
 #include "parse-util.h"
@@ -42,32 +43,12 @@ static int property_get_bit_rates(
                 sd_bus_error *error) {
 
         Link *link = ASSERT_PTR(userdata);
-        Manager *manager;
-        double interval_sec;
         uint64_t tx, rx;
 
         assert(bus);
         assert(reply);
 
-        manager = link->manager;
-
-        if (!manager->use_speed_meter ||
-            manager->speed_meter_usec_old == 0 ||
-            !link->stats_updated)
-                return sd_bus_message_append(reply, "(tt)", UINT64_MAX, UINT64_MAX);
-
-        assert(manager->speed_meter_usec_new > manager->speed_meter_usec_old);
-        interval_sec = (double) (manager->speed_meter_usec_new - manager->speed_meter_usec_old) / USEC_PER_SEC;
-
-        if (link->stats_new.tx_bytes > link->stats_old.tx_bytes)
-                tx = (uint64_t) ((link->stats_new.tx_bytes - link->stats_old.tx_bytes) / interval_sec);
-        else
-                tx = (uint64_t) ((UINT64_MAX - (link->stats_old.tx_bytes - link->stats_new.tx_bytes)) / interval_sec);
-
-        if (link->stats_new.rx_bytes > link->stats_old.rx_bytes)
-                rx = (uint64_t) ((link->stats_new.rx_bytes - link->stats_old.rx_bytes) / interval_sec);
-        else
-                rx = (uint64_t) ((UINT64_MAX - (link->stats_old.rx_bytes - link->stats_new.rx_bytes)) / interval_sec);
+        link_get_bit_rates(link, &tx, &rx);
 
         return sd_bus_message_append(reply, "(tt)", tx, rx);
 }
index ade6c7433174673c72e3fe46242df6ef7879d977..f04b11be9cf857f5c5a069aaba83336e86f5863c 100644 (file)
@@ -86,6 +86,38 @@ static int speed_meter_handler(sd_event_source *s, uint64_t usec, void *userdata
         return 0;
 }
 
+void link_get_bit_rates(Link *link, uint64_t *ret_tx, uint64_t *ret_rx) {
+        Manager *manager;
+        double interval_sec;
+
+        assert(link);
+        assert(ret_tx);
+        assert(ret_rx);
+
+        manager = link->manager;
+
+        if (!manager->use_speed_meter ||
+            manager->speed_meter_usec_old == 0 ||
+            !link->stats_updated) {
+                *ret_tx = UINT64_MAX;
+                *ret_rx = UINT64_MAX;
+                return;
+        }
+
+        assert(manager->speed_meter_usec_new > manager->speed_meter_usec_old);
+        interval_sec = (double) (manager->speed_meter_usec_new - manager->speed_meter_usec_old) / USEC_PER_SEC;
+
+        if (link->stats_new.tx_bytes > link->stats_old.tx_bytes)
+                *ret_tx = (uint64_t) ((link->stats_new.tx_bytes - link->stats_old.tx_bytes) / interval_sec);
+        else
+                *ret_tx = (uint64_t) ((UINT64_MAX - (link->stats_old.tx_bytes - link->stats_new.tx_bytes)) / interval_sec);
+
+        if (link->stats_new.rx_bytes > link->stats_old.rx_bytes)
+                *ret_rx = (uint64_t) ((link->stats_new.rx_bytes - link->stats_old.rx_bytes) / interval_sec);
+        else
+                *ret_rx = (uint64_t) ((UINT64_MAX - (link->stats_old.rx_bytes - link->stats_new.rx_bytes)) / interval_sec);
+}
+
 int manager_start_speed_meter(Manager *manager) {
         _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
         int r;
index f7ef5a45697ddb10da455c8233e2a08a97186d76..8f98005322651b815dcdb77d18bf49925f446afb 100644 (file)
@@ -9,4 +9,5 @@
 #define SPEED_METER_DEFAULT_TIME_INTERVAL (10 * USEC_PER_SEC)
 #define SPEED_METER_MINIMUM_TIME_INTERVAL (100 * USEC_PER_MSEC)
 
+void link_get_bit_rates(Link *link, uint64_t *ret_tx, uint64_t *ret_rx);
 int manager_start_speed_meter(Manager *m);