aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2011-12-14 07:01:32 -0500
committerPablo Neira Ayuso <pablo@netfilter.org>2011-12-17 19:31:49 -0500
commitc4042a339f40fe00d85e31055b1c0808dd025539 (patch)
tree0a32ceb3fe5399323f314ff17b07166f7a74cac7 /net
parent35dba1d7f3ae669128a42c969d599ab8c604d61d (diff)
netfilter: ctnetlink: support individual atomic-get-and-reset of counters
This allows to use the get operation to atomically get-and-reset counters. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/nf_conntrack_netlink.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index 77d209c235a0..636617ccfe25 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -1015,6 +1015,17 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb,
1015 if (err < 0) 1015 if (err < 0)
1016 goto out; 1016 goto out;
1017 1017
1018 if (NFNL_MSG_TYPE(nlh->nlmsg_type) == IPCTNL_MSG_CT_GET_CTRZERO) {
1019 struct nf_conn_counter *acct;
1020
1021 acct = nf_conn_acct_find(ct);
1022 if (acct) {
1023 atomic64_set(&acct[IP_CT_DIR_ORIGINAL].bytes, 0);
1024 atomic64_set(&acct[IP_CT_DIR_ORIGINAL].packets, 0);
1025 atomic64_set(&acct[IP_CT_DIR_REPLY].bytes, 0);
1026 atomic64_set(&acct[IP_CT_DIR_REPLY].packets, 0);
1027 }
1028 }
1018 return 0; 1029 return 0;
1019 1030
1020free: 1031free: