network: extract link_get_bit_rates() into networkd-speed-meter.c
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>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user