diff --git a/bpf_progs/netd.h b/bpf_progs/netd.h index 2995adad06..dcf6d6a554 100644 --- a/bpf_progs/netd.h +++ b/bpf_progs/netd.h @@ -55,6 +55,16 @@ typedef struct { } StatsValue; STRUCT_SIZE(StatsValue, 4 * 8); // 32 +#ifdef __cplusplus +static inline StatsValue& operator+=(StatsValue& lhs, const StatsValue& rhs) { + lhs.rxPackets += rhs.rxPackets; + lhs.rxBytes += rhs.rxBytes; + lhs.txPackets += rhs.txPackets; + lhs.txBytes += rhs.txBytes; + return lhs; +} +#endif + typedef struct { char name[IFNAMSIZ]; } IfaceValue; diff --git a/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp b/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp index 0d04c05c95..fed297919d 100644 --- a/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp +++ b/service-t/native/libs/libnetworkstats/BpfNetworkStats.cpp @@ -75,10 +75,7 @@ int bpfGetIfaceStatsInternal(const char* iface, StatsValue* stats, if (!statsEntry.ok()) { return statsEntry.error(); } - stats->rxPackets += statsEntry.value().rxPackets; - stats->txPackets += statsEntry.value().txPackets; - stats->rxBytes += statsEntry.value().rxBytes; - stats->txBytes += statsEntry.value().txBytes; + *stats += statsEntry.value(); } return Result(); };