summaryrefslogtreecommitdiffstats
path: root/sys/net/if_var.h
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2009-04-14 00:27:59 +0000
committerkmacy <kmacy@FreeBSD.org>2009-04-14 00:27:59 +0000
commit81fc29cb4ec033baae01089e70eafecd3a2578d3 (patch)
tree11023163a537671db3ddf9283bb6e6ba29087c38 /sys/net/if_var.h
parentde9c351c80ae5cad56bd50b8f9bc334fa036ce81 (diff)
downloadFreeBSD-src-81fc29cb4ec033baae01089e70eafecd3a2578d3.zip
FreeBSD-src-81fc29cb4ec033baae01089e70eafecd3a2578d3.tar.gz
Adapt buf_ring abstraction interface to allow consumers to interoperate with ALTQ
Diffstat (limited to 'sys/net/if_var.h')
-rw-r--r--sys/net/if_var.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 7640d78..88ec559 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -560,6 +560,12 @@ drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m)
int len = m->m_pkthdr.len;
int mflags = m->m_flags;
+#ifdef ALTQ
+ if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
+ IFQ_ENQUEUE(&ifp->if_snd, m, error);
+ return (error);
+ }
+#endif
if ((error = buf_ring_enqueue(br, m)) == ENOBUFS) {
br->br_drops++;
_IF_DROP(&ifp->if_snd);
@@ -580,8 +586,31 @@ drbr_free(struct buf_ring *br, struct malloc_type *type)
buf_ring_free(br, type);
}
+
+static __inline struct mbuf *
+drbr_dequeue(struct ifnet *ifp, struct buf_ring *br)
+{
+#ifdef ALTQ
+ struct mbuf *m;
+
+ if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
+ IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
+ return (m);
+ }
#endif
+ return (buf_ring_dequeue_sc(br));
+}
+static __inline int
+drbr_empty(struct ifnet *ifp, struct buf_ring *br)
+{
+#ifdef ALTQ
+ if (ALTQ_IS_ENABLED(&ifp->if_snd))
+ return (IFQ_DRV_IS_EMPTY(&ifp->if_snd));
+#endif
+ return (buf_ring_empty(br));
+}
+#endif
/*
* 72 was chosen below because it is the size of a TCP/IP
* header (40) + the minimum mss (32).
OpenPOWER on IntegriCloud