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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user