summaryrefslogtreecommitdiffstats
path: root/sys/netgraph/netflow/netflow.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2005-11-27 02:43:08 +0000
committerglebius <glebius@FreeBSD.org>2005-11-27 02:43:08 +0000
commita2a648724d37c622200ca649779265031354646c (patch)
treef6ad856754c25af8df87ea73ec8d0e29cc06f2db /sys/netgraph/netflow/netflow.c
parentd81e111959fa889d8351e1666473d0ac71cc8665 (diff)
downloadFreeBSD-src-a2a648724d37c622200ca649779265031354646c.zip
FreeBSD-src-a2a648724d37c622200ca649779265031354646c.tar.gz
- Update the flow sequence before converting count to
network byte order. - Update the flow sequence in one atomic op instead of two. Reported by: Denis Shaposhnikov <dsh vlink.ru> Reported by: Daniil Kharoun <kdl chelcom.ru> PR: kern/89417
Diffstat (limited to 'sys/netgraph/netflow/netflow.c')
-rw-r--r--sys/netgraph/netflow/netflow.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/sys/netgraph/netflow/netflow.c b/sys/netgraph/netflow/netflow.c
index 327a5c6..b22e697 100644
--- a/sys/netgraph/netflow/netflow.c
+++ b/sys/netgraph/netflow/netflow.c
@@ -621,12 +621,9 @@ export_send(priv_p priv, item_p item)
getnanotime(&ts);
header->unix_secs = htonl(ts.tv_sec);
header->unix_nsecs = htonl(ts.tv_nsec);
+ header->flow_seq = htonl(atomic_fetchadd_32(&priv->flow_seq,
+ header->count));
header->count = htons(header->count);
- header->flow_seq = htonl(atomic_load_acq_32(&priv->flow_seq));
-
- /* Flow sequence contains number of first record, so it
- is updated after being put in header. */
- atomic_add_32(&priv->flow_seq, header->count);
if (priv->export != NULL)
/* Should also NET_LOCK_GIANT(). */
OpenPOWER on IntegriCloud