diff options
author | glebius <glebius@FreeBSD.org> | 2005-11-27 02:43:08 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2005-11-27 02:43:08 +0000 |
commit | a2a648724d37c622200ca649779265031354646c (patch) | |
tree | f6ad856754c25af8df87ea73ec8d0e29cc06f2db /sys/netgraph/netflow | |
parent | d81e111959fa889d8351e1666473d0ac71cc8665 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/netgraph/netflow/netflow.c | 7 |
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(). */ |