1 use std::sync::atomic::{AtomicU64, Ordering}; 2 3 #[derive(Default, Debug)] 4 pub(crate) struct AssociationStats { 5 n_datas: AtomicU64, 6 n_sacks: AtomicU64, 7 n_t3timeouts: AtomicU64, 8 n_ack_timeouts: AtomicU64, 9 n_fast_retrans: AtomicU64, 10 } 11 12 impl AssociationStats { inc_datas(&self)13 pub(crate) fn inc_datas(&self) { 14 self.n_datas.fetch_add(1, Ordering::SeqCst); 15 } 16 get_num_datas(&self) -> u6417 pub(crate) fn get_num_datas(&self) -> u64 { 18 self.n_datas.load(Ordering::SeqCst) 19 } 20 inc_sacks(&self)21 pub(crate) fn inc_sacks(&self) { 22 self.n_sacks.fetch_add(1, Ordering::SeqCst); 23 } 24 get_num_sacks(&self) -> u6425 pub(crate) fn get_num_sacks(&self) -> u64 { 26 self.n_sacks.load(Ordering::SeqCst) 27 } 28 inc_t3timeouts(&self)29 pub(crate) fn inc_t3timeouts(&self) { 30 self.n_t3timeouts.fetch_add(1, Ordering::SeqCst); 31 } 32 get_num_t3timeouts(&self) -> u6433 pub(crate) fn get_num_t3timeouts(&self) -> u64 { 34 self.n_t3timeouts.load(Ordering::SeqCst) 35 } 36 inc_ack_timeouts(&self)37 pub(crate) fn inc_ack_timeouts(&self) { 38 self.n_ack_timeouts.fetch_add(1, Ordering::SeqCst); 39 } 40 get_num_ack_timeouts(&self) -> u6441 pub(crate) fn get_num_ack_timeouts(&self) -> u64 { 42 self.n_ack_timeouts.load(Ordering::SeqCst) 43 } 44 inc_fast_retrans(&self)45 pub(crate) fn inc_fast_retrans(&self) { 46 self.n_fast_retrans.fetch_add(1, Ordering::SeqCst); 47 } 48 get_num_fast_retrans(&self) -> u6449 pub(crate) fn get_num_fast_retrans(&self) -> u64 { 50 self.n_fast_retrans.load(Ordering::SeqCst) 51 } 52 reset(&self)53 pub(crate) fn reset(&self) { 54 self.n_datas.store(0, Ordering::SeqCst); 55 self.n_sacks.store(0, Ordering::SeqCst); 56 self.n_t3timeouts.store(0, Ordering::SeqCst); 57 self.n_ack_timeouts.store(0, Ordering::SeqCst); 58 self.n_fast_retrans.store(0, Ordering::SeqCst); 59 } 60 } 61