summaryrefslogtreecommitdiffstats
path: root/sys/net/if_var.h
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2008-12-17 04:00:43 +0000
committerkmacy <kmacy@FreeBSD.org>2008-12-17 04:00:43 +0000
commit4b4aad01dc1f9b4b7b3a5e843c8a34629fb6fd67 (patch)
tree124e26067b399b2cf50dcf7d8c27225624203897 /sys/net/if_var.h
parent0d699e4383e0140c80269e315e36686906dddd3c (diff)
downloadFreeBSD-src-4b4aad01dc1f9b4b7b3a5e843c8a34629fb6fd67.zip
FreeBSD-src-4b4aad01dc1f9b4b7b3a5e843c8a34629fb6fd67.tar.gz
merge in 2 buf_ring helper routines for enqueueing and freeing buf_rings
Diffstat (limited to 'sys/net/if_var.h')
-rw-r--r--sys/net/if_var.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 7b2881e..6e6d2db 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -77,6 +77,7 @@ struct ifvlantrunk;
#ifdef _KERNEL
#include <sys/mbuf.h>
#include <sys/eventhandler.h>
+#include <sys/buf_ring.h>
#endif /* _KERNEL */
#include <sys/lock.h> /* XXX */
#include <sys/mutex.h> /* XXX */
@@ -548,6 +549,32 @@ do { \
IFQ_PURGE(ifq); \
} while (0)
+#ifdef _KERNEL
+static __inline int
+drbr_enqueue(struct buf_ring *br, struct mbuf *m)
+{
+ int error = 0;
+
+ if ((error = buf_ring_enqueue(br, m)) == ENOBUFS) {
+ br->br_drops++;
+ m_freem(m);
+ }
+
+ return (error);
+}
+
+static __inline void
+drbr_free(struct buf_ring *br, struct malloc_type *type)
+{
+ struct mbuf *m;
+
+ while ((m = buf_ring_dequeue_sc(br)) != NULL)
+ m_freem(m);
+
+ buf_ring_free(br, type);
+}
+#endif
+
/*
* 72 was chosen below because it is the size of a TCP/IP
* header (40) + the minimum mss (32).
OpenPOWER on IntegriCloud