summaryrefslogtreecommitdiff
path: root/sys/netgraph
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2005-01-03 10:14:06 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2005-01-03 10:14:06 +0000
commit7954bc5d6e560d30ff09efd8a064ea1a2490b0cf (patch)
treefa6f9946ac1aa4e905609a1b56acf5e592e3bd4a /sys/netgraph
parentbc64f41f2c6da00b5df7580f97478dfe1543c797 (diff)
Notes
Diffstat (limited to 'sys/netgraph')
-rw-r--r--sys/netgraph/netflow/netflow.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/netgraph/netflow/netflow.c b/sys/netgraph/netflow/netflow.c
index 91a484b1b130..c5bfe2bbffc1 100644
--- a/sys/netgraph/netflow/netflow.c
+++ b/sys/netgraph/netflow/netflow.c
@@ -398,8 +398,10 @@ ng_netflow_cache_init(priv_p priv)
NBUCKETS * sizeof(struct flow_hash_entry),
M_NETFLOW, M_WAITOK | M_ZERO);
- if (priv->hash == NULL)
+ if (priv->hash == NULL) {
+ FREE(priv->cache, M_NETFLOW);
return (ENOMEM);
+ }
TAILQ_INIT(&priv->work_queue);
SLIST_INIT(&priv->free_list);
@@ -458,12 +460,10 @@ ng_netflow_flow_add(priv_p priv, struct mbuf **m, iface_p iface)
register struct flow_entry *fle;
struct flow_rec r;
int plen;
- int error = 1;
+ int error = 0;
uint32_t slot;
uint8_t tcp_flags = 0;
- priv->info.nfinfo_packets ++;
-
/* Try to fill *rec */
bzero(&r, sizeof(r));
if ((error = make_flow_rec(m, &plen, &r, &tcp_flags, iface->info.ifinfo_index)))
@@ -472,6 +472,11 @@ ng_netflow_flow_add(priv_p priv, struct mbuf **m, iface_p iface)
slot = ip_hash(&r);
mtx_lock(&priv->work_mtx);
+
+ /* Update node statistics. */
+ priv->info.nfinfo_packets ++;
+ priv->info.nfinfo_bytes += plen;
+
fle = hash_lookup(h, slot, &r); /* New flow entry or existent? */
if (fle) { /* an existent entry */
@@ -496,7 +501,6 @@ ng_netflow_flow_add(priv_p priv, struct mbuf **m, iface_p iface)
TAILQ_INSERT_TAIL(&priv->work_queue, fle, fle_work);
mtx_unlock(&priv->work_mtx);
- priv->info.nfinfo_bytes += plen;
} else { /* a new flow entry */
@@ -508,6 +512,7 @@ ng_netflow_flow_add(priv_p priv, struct mbuf **m, iface_p iface)
mtx_assert(&priv->work_mtx, MA_NOTOWNED);
mtx_assert(&priv->expire_mtx, MA_NOTOWNED);
mtx_assert(&priv->free_mtx, MA_NOTOWNED);
+
return (0);
}