1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* OpenVPN data channel offload 3 * 4 * Copyright (C) 2020-2025 OpenVPN, Inc. 5 * 6 * Author: James Yonan <james@openvpn.net> 7 * Antonio Quartulli <antonio@openvpn.net> 8 * Lev Stipakov <lev@openvpn.net> 9 */ 10 11 #ifndef _NET_OVPN_OVPNSTATS_H_ 12 #define _NET_OVPN_OVPNSTATS_H_ 13 14 /* one stat */ 15 struct ovpn_peer_stat { 16 atomic64_t bytes; 17 atomic64_t packets; 18 }; 19 20 /* rx and tx stats combined */ 21 struct ovpn_peer_stats { 22 struct ovpn_peer_stat rx; 23 struct ovpn_peer_stat tx; 24 }; 25 26 void ovpn_peer_stats_init(struct ovpn_peer_stats *ps); 27 28 static inline void ovpn_peer_stats_increment(struct ovpn_peer_stat *stat, 29 const unsigned int n) 30 { 31 atomic64_add(n, &stat->bytes); 32 atomic64_inc(&stat->packets); 33 } 34 35 static inline void ovpn_peer_stats_increment_rx(struct ovpn_peer_stats *stats, 36 const unsigned int n) 37 { 38 ovpn_peer_stats_increment(&stats->rx, n); 39 } 40 41 static inline void ovpn_peer_stats_increment_tx(struct ovpn_peer_stats *stats, 42 const unsigned int n) 43 { 44 ovpn_peer_stats_increment(&stats->tx, n); 45 } 46 47 #endif /* _NET_OVPN_OVPNSTATS_H_ */ 48