svn commit: r255155 - in user/syuu/mq_bpf/sys: dev/e1000 dev/ixgbe dev/mxge net sys
Takuya ASADA
syuu at FreeBSD.org
Mon Sep 2 20:35:41 UTC 2013
Author: syuu
Date: Mon Sep 2 20:35:39 2013
New Revision: 255155
URL: http://svnweb.freebsd.org/changeset/base/255155
Log:
mbuf queueid/queuetype, bpf_qmask_bits_t(kernel part)
Modified:
user/syuu/mq_bpf/sys/dev/e1000/if_igb.c
user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c
user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c
user/syuu/mq_bpf/sys/net/bpf.c
user/syuu/mq_bpf/sys/net/bpf.h
user/syuu/mq_bpf/sys/net/bpfdesc.h
user/syuu/mq_bpf/sys/sys/mbuf.h
Modified: user/syuu/mq_bpf/sys/dev/e1000/if_igb.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/e1000/if_igb.c Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/dev/e1000/if_igb.c Mon Sep 2 20:35:39 2013 (r255155)
@@ -924,8 +924,9 @@ igb_start_locked(struct tx_ring *txr, st
break;
}
- m_head->m_pkthdr.rxqueue = (uint32_t)-1;
- m_head->m_pkthdr.txqueue = txr->me;
+ m_head->m_flags |= M_QUEUEID;
+ m_head->m_pkthdr.queueid = txr->me;
+ m_head->m_pkthdr.queuetype = QUEUETYPE_TX;
/* Send a copy of the frame to the BPF listener */
ETHER_BPF_MTAP(ifp, m_head);
@@ -1020,8 +1021,9 @@ igb_mq_start_locked(struct ifnet *ifp, s
ifp->if_obytes += next->m_pkthdr.len;
if (next->m_flags & M_MCAST)
ifp->if_omcasts++;
- next->m_pkthdr.rxqueue = (uint32_t)-1;
- next->m_pkthdr.txqueue = txr->me;
+ next->m_flags |= M_QUEUEID;
+ next->m_pkthdr.queueid = txr->me;
+ next->m_pkthdr.queuetype = QUEUETYPE_TX;
ETHER_BPF_MTAP(ifp, next);
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
break;
@@ -4896,10 +4898,10 @@ igb_rxeof(struct igb_queue *que, int cou
}
#ifndef IGB_LEGACY_TX
rxr->fmp->m_pkthdr.flowid = que->msix;
- rxr->fmp->m_flags |= M_FLOWID;
+ rxr->fmp->m_flags |= (M_FLOWID | M_QUEUEID);
#endif
- rxr->fmp->m_pkthdr.rxqueue = que->msix;
- rxr->fmp->m_pkthdr.txqueue = (uint32_t)-1;
+ rxr->fmp->m_pkthdr.queueid = que->msix;
+ rxr->fmp->m_pkthdr.queuetype = QUEUETYPE_TX;
sendmp = rxr->fmp;
/* Make sure to set M_PKTHDR. */
Modified: user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c Mon Sep 2 20:35:39 2013 (r255155)
@@ -760,8 +760,9 @@ ixgbe_start_locked(struct tx_ring *txr,
break;
}
- m_head->m_pkthdr.rxqueue = (uint32_t)-1;
- m_head->m_pkthdr.txqueue = txr->me;
+ m_head->m_flags |= M_QUEUEID;
+ m_head->m_pkthdr.queueid = txr->me;
+ m_head->m_pkthdr.queuetype = QUEUETYPE_TX;
/* Send a copy of the frame to the BPF listener */
ETHER_BPF_MTAP(ifp, m_head);
@@ -862,8 +863,9 @@ ixgbe_mq_start_locked(struct ifnet *ifp,
#endif
enqueued++;
- next->m_pkthdr.rxqueue = (uint32_t)-1;
- next->m_pkthdr.txqueue = txr->me;
+ next->m_flags |= M_QUEUEID;
+ next->m_pkthdr.queueid = txr->me;
+ next->m_pkthdr.queuetype = QUEUETYPE_TX;
/* Send a copy of the frame to the BPF listener */
ETHER_BPF_MTAP(ifp, next);
@@ -4564,10 +4566,10 @@ ixgbe_rxeof(struct ix_queue *que)
ixgbe_rx_checksum(staterr, sendmp, ptype);
#if __FreeBSD_version >= 800000
sendmp->m_pkthdr.flowid = que->msix;
- sendmp->m_flags |= M_FLOWID;
+ sendmp->m_flags |= (M_FLOWID | M_QUEUEID);
#endif
- sendmp->m_pkthdr.rxqueue = que->msix;
- sendmp->m_pkthdr.txqueue = (uint32_t)-1;
+ sendmp->m_pkthdr.queueid = que->msix;
+ sendmp->m_pkthdr.queuetype = QUEUETYPE_RX;
}
next_desc:
bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
Modified: user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c Mon Sep 2 20:35:39 2013 (r255155)
@@ -2277,8 +2277,9 @@ mxge_start_locked(struct mxge_slice_stat
if (m == NULL) {
return;
}
- m->m_pkthdr.rxqueue = (uint32_t)-1;
- m->m_pkthdr.txqueue = (ss - sc->ss);
+ m->m_flags |= M_QUEUEID;
+ m->m_pkthdr.queueid = (ss - sc->ss);
+ m->m_pkthdr.queuetype = QUEUETYPE_TX;
/* let BPF see it */
BPF_MTAP(ifp, m);
@@ -2314,8 +2315,9 @@ mxge_transmit_locked(struct mxge_slice_s
if (!drbr_needs_enqueue(ifp, tx->br) &&
((tx->mask - (tx->req - tx->done)) > tx->max_desc)) {
- m->m_pkthdr.rxqueue = (uint32_t)-1;
- m->m_pkthdr.txqueue = (ss - sc->ss);
+ m->m_flags |= M_QUEUEID;
+ m->m_pkthdr.queueid = (ss - sc->ss);
+ m->m_pkthdr.queuetype = QUEUETYPE_TX;
/* let BPF see it */
BPF_MTAP(ifp, m);
@@ -2729,9 +2731,9 @@ mxge_rx_done_big(struct mxge_slice_state
/* flowid only valid if RSS hashing is enabled */
if (sc->num_slices > 1) {
m->m_pkthdr.flowid = (ss - sc->ss);
- m->m_flags |= M_FLOWID;
- m->m_pkthdr.rxqueue = (ss - sc->ss);
- m->m_pkthdr.txqueue = (uint32_t)-1;
+ m->m_flags |= (M_FLOWID | M_QUEUEID);
+ m->m_pkthdr.queueid = (ss - sc->ss);
+ m->m_pkthdr.queuetype = QUEUETYPE_RX;
}
/* pass the frame up the stack */
(*ifp->if_input)(ifp, m);
Modified: user/syuu/mq_bpf/sys/net/bpf.c
==============================================================================
--- user/syuu/mq_bpf/sys/net/bpf.c Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/net/bpf.c Mon Sep 2 20:35:39 2013 (r255155)
@@ -820,10 +820,7 @@ bpfopen(struct cdev *dev, int flags, int
bpf_buffer_ioctl_sblen(d, &size);
d->bd_qmask.qm_enabled = FALSE;
- d->bd_qmask.qm_rxq_mask = NULL;
- d->bd_qmask.qm_txq_mask = NULL;
- d->bd_qmask.qm_other_mask = FALSE;
- rw_init(&d->bd_qmask.qm_lock, "qmask lock");
+ BPFQ_LOCK_INIT(&d->bd_qmask);
return (0);
}
@@ -1704,7 +1701,7 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = bpf_ioctl_rotzbuf(td, d, (struct bpf_zbuf *)addr);
break;
- case BIOCENAQMASK:
+ case BIOCQMASKENABLE:
{
struct ifnet *ifp;
@@ -1727,21 +1724,15 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
- KASSERT(ifp->if_get_num_rxqueue, ("ifp->if_get_num_rxqueue not set\n"));
- KASSERT(ifp->if_get_num_txqueue, ("ifp->if_get_num_rxqueue not set\n"));
+ BPFQ_ZERO(&d->bd_qmask.qm_rxqmask);
+ BPFQ_ZERO(&d->bd_qmask.qm_txqmask);
+ d->bd_qmask.qm_noqmask = FALSE;
d->bd_qmask.qm_enabled = TRUE;
- d->bd_qmask.qm_rxq_mask =
- malloc(ifp->if_get_num_rxqueue(ifp) * sizeof(boolean_t), M_BPF,
- M_WAITOK | M_ZERO);
- d->bd_qmask.qm_txq_mask =
- malloc(ifp->if_get_num_txqueue(ifp) * sizeof(boolean_t), M_BPF,
- M_WAITOK | M_ZERO);
- d->bd_qmask.qm_other_mask = FALSE;
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCDISQMASK:
+ case BIOCQMASKDISABLE:
{
if (d->bd_bif == NULL) {
/*
@@ -1757,23 +1748,19 @@ bpfioctl(struct cdev *dev, u_long cmd, c
break;
}
d->bd_qmask.qm_enabled = FALSE;
-
- free(d->bd_qmask.qm_rxq_mask, M_BPF);
- free(d->bd_qmask.qm_txq_mask, M_BPF);
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCSTRXQMASK:
+ case BIOCGRXQMASK:
{
- struct ifnet *ifp;
- int index;
+ bpf_qmask_bits_t *qmask = (bpf_qmask_bits_t *)addr;
if (d->bd_bif == NULL) {
/*
* No interface attached yet.
*/
- error = EINVAL;
+ error = EINVAL;
break;
}
BPFQ_WLOCK(&d->bd_qmask);
@@ -1782,28 +1769,21 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_rxqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- d->bd_qmask.qm_rxq_mask[index] = TRUE;
+ BPFQ_COPY(&d->bd_qmask.qm_rxqmask, qmask);
BPFQ_WUNLOCK(&d->bd_qmask);
break;
+
}
- case BIOCCRRXQMASK:
+ case BIOCSRXQMASK:
{
- int index;
- struct ifnet *ifp;
+ bpf_qmask_bits_t *qmask = (bpf_qmask_bits_t *)addr;
if (d->bd_bif == NULL) {
/*
* No interface attached yet.
*/
- error = EINVAL;
+ error = EINVAL;
break;
}
BPFQ_WLOCK(&d->bd_qmask);
@@ -1812,22 +1792,14 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_rxqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- d->bd_qmask.qm_rxq_mask[index] = FALSE;
+ BPFQ_COPY(qmask, &d->bd_qmask.qm_rxqmask);
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCGTRXQMASK:
+ case BIOCGTXQMASK:
{
- int index;
- struct ifnet *ifp;
+ bpf_qmask_bits_t *qmask = (bpf_qmask_bits_t *)addr;
if (d->bd_bif == NULL) {
/*
@@ -1842,28 +1814,20 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_rxqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- *(uint32_t *)addr = d->bd_qmask.qm_rxq_mask[index];
+ BPFQ_COPY(&d->bd_qmask.qm_txqmask, qmask);
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCSTTXQMASK:
+ case BIOCSTXQMASK:
{
- struct ifnet *ifp;
- int index;
+ bpf_qmask_bits_t *qmask = (bpf_qmask_bits_t *)addr;
if (d->bd_bif == NULL) {
/*
* No interface attached yet.
*/
- error = EINVAL;
+ error = EINVAL;
break;
}
BPFQ_WLOCK(&d->bd_qmask);
@@ -1872,24 +1836,14 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
-
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_txqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- d->bd_qmask.qm_txq_mask[index] = TRUE;
+ BPFQ_COPY(qmask, &d->bd_qmask.qm_txqmask);
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCCRTXQMASK:
+ case BIOCGNOQMASK:
{
- struct ifnet *ifp;
- int index;
-
+ boolean_t *noqmask = (boolean_t *)addr;
if (d->bd_bif == NULL) {
/*
* No interface attached yet.
@@ -1903,29 +1857,20 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
-
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_txqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- d->bd_qmask.qm_txq_mask[index] = FALSE;
+ *noqmask = d->bd_qmask.qm_noqmask;
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
- case BIOCGTTXQMASK:
+ case BIOCSNOQMASK:
{
- int index;
- struct ifnet *ifp;
+ boolean_t *noqmask = (boolean_t *)addr;
if (d->bd_bif == NULL) {
/*
* No interface attached yet.
*/
- error = EINVAL;
+ error = EINVAL;
break;
}
BPFQ_WLOCK(&d->bd_qmask);
@@ -1934,36 +1879,12 @@ bpfioctl(struct cdev *dev, u_long cmd, c
error = EINVAL;
break;
}
- ifp = d->bd_bif->bif_ifp;
- index = *(uint32_t *)addr;
- if (index > ifp->if_get_num_txqueue(ifp)) {
- BPFQ_WUNLOCK(&d->bd_qmask);
- error = EINVAL;
- break;
- }
- *(uint32_t *)addr = d->bd_qmask.qm_txq_mask[index];
+ d->bd_qmask.qm_noqmask = *noqmask;
BPFQ_WUNLOCK(&d->bd_qmask);
break;
}
-
- case BIOCSTOTHERMASK:
- BPFQ_WLOCK(&d->bd_qmask);
- d->bd_qmask.qm_other_mask = TRUE;
- BPFQ_WUNLOCK(&d->bd_qmask);
- break;
-
- case BIOCCROTHERMASK:
- BPFQ_WLOCK(&d->bd_qmask);
- d->bd_qmask.qm_other_mask = FALSE;
- BPFQ_WUNLOCK(&d->bd_qmask);
- break;
-
- case BIOCGTOTHERMASK:
- BPFQ_WLOCK(&d->bd_qmask);
- *(uint32_t *)addr = (uint32_t)d->bd_qmask.qm_other_mask;
- BPFQ_WUNLOCK(&d->bd_qmask);
- break;
}
+
CURVNET_RESTORE();
return (error);
}
@@ -2309,22 +2230,23 @@ bpf_tap(struct bpf_if *bp, u_char *pkt,
BPFIF_RLOCK(bp);
LIST_FOREACH(d, &bp->bif_dlist, bd_next) {
- /*
- * We are not using any locks for d here because:
- * 1) any filter change is protected by interface
- * write lock
- * 2) destroying/detaching d is protected by interface
- * write lock, too
- */
BPFQ_RLOCK(&d->bd_qmask);
if (d->bd_qmask.qm_enabled) {
- if (!d->bd_qmask.qm_other_mask) {
+ if (!d->bd_qmask.qm_noqmask) {
BPFQ_RUNLOCK(&d->bd_qmask);
continue;
}
}
BPFQ_RUNLOCK(&d->bd_qmask);
+ /*
+ * We are not using any locks for d here because:
+ * 1) any filter change is protected by interface
+ * write lock
+ * 2) destroying/detaching d is protected by interface
+ * write lock, too
+ */
+
/* XXX: Do not protect counter for the sake of performance. */
++d->bd_rcount;
/*
@@ -2394,36 +2316,34 @@ bpf_mtap(struct bpf_if *bp, struct mbuf
BPFQ_RLOCK(&d->bd_qmask);
if (d->bd_qmask.qm_enabled) {
M_ASSERTPKTHDR(m);
- if (!(m->m_flags & M_FLOWID)) {
- if (!d->bd_qmask.qm_other_mask) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- continue;
- }
- } else {
- struct ifnet *ifp = bp->bif_ifp;
- if (m->m_pkthdr.rxqueue != (uint32_t)-1) {
- if (m->m_pkthdr.rxqueue >= ifp->if_get_num_rxqueue(ifp)) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- BPFIF_RUNLOCK(bp);
- return;
- }
- if (!d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqueue]) {
+ if (m->m_flags & M_QUEUEID) {
+ switch (m->m_pkthdr.queuetype) {
+ case QUEUETYPE_RX:
+ if (!BPFQ_ISSET(m->m_pkthdr.queueid,
+ &d->bd_qmask.qm_rxqmask)) {
BPFQ_RUNLOCK(&d->bd_qmask);
continue;
}
- }
- if (m->m_pkthdr.txqueue != (uint32_t)-1) {
- if (m->m_pkthdr.txqueue >= ifp->if_get_num_txqueue(ifp)) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- BPFIF_RUNLOCK(bp);
- return;
- }
- if (!d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqueue]) {
+ break;
+ case QUEUETYPE_TX:
+ if (!BPFQ_ISSET(m->m_pkthdr.queueid,
+ &d->bd_qmask.qm_rxqmask)) {
BPFQ_RUNLOCK(&d->bd_qmask);
continue;
}
+ break;
+ default:
+ if (!d->bd_qmask.qm_noqmask) {
+ BPFQ_RUNLOCK(&d->bd_qmask);
+ continue;
+ }
}
- }
+ }else{
+ if (!d->bd_qmask.qm_noqmask) {
+ BPFQ_RUNLOCK(&d->bd_qmask);
+ continue;
+ }
+ }
}
BPFQ_RUNLOCK(&d->bd_qmask);
@@ -2490,42 +2410,40 @@ bpf_mtap2(struct bpf_if *bp, void *data,
BPFIF_RLOCK(bp);
LIST_FOREACH(d, &bp->bif_dlist, bd_next) {
- BPFQ_RLOCK(&d->bd_qmask);
+ BPFQ_RLOCK(&d->bd_qmask);
if (d->bd_qmask.qm_enabled) {
M_ASSERTPKTHDR(m);
- if (!(m->m_flags & M_FLOWID)) {
- if (!d->bd_qmask.qm_other_mask) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- continue;
- }
- } else {
- struct ifnet *ifp = bp->bif_ifp;
- if (m->m_pkthdr.rxqueue != (uint32_t)-1) {
- if (m->m_pkthdr.rxqueue >= ifp->if_get_num_rxqueue(ifp)) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- BPFIF_RUNLOCK(bp);
- return;
- }
- if (!d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqueue]) {
+ if (m->m_flags & M_QUEUEID) {
+ switch (m->m_pkthdr.queuetype) {
+ case QUEUETYPE_RX:
+ if (!BPFQ_ISSET(m->m_pkthdr.queueid,
+ &d->bd_qmask.qm_rxqmask)) {
BPFQ_RUNLOCK(&d->bd_qmask);
continue;
}
- }
- if (m->m_pkthdr.txqueue != (uint32_t)-1) {
- if (m->m_pkthdr.txqueue >= ifp->if_get_num_txqueue(ifp)) {
- BPFQ_RUNLOCK(&d->bd_qmask);
- BPFIF_RUNLOCK(bp);
- return;
- }
- if (!d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqueue]) {
+ break;
+ case QUEUETYPE_TX:
+ if (!BPFQ_ISSET(m->m_pkthdr.queueid,
+ &d->bd_qmask.qm_rxqmask)) {
BPFQ_RUNLOCK(&d->bd_qmask);
continue;
}
+ break;
+ default:
+ if (!d->bd_qmask.qm_noqmask) {
+ BPFQ_RUNLOCK(&d->bd_qmask);
+ continue;
+ }
}
- }
+ }else{
+ if (!d->bd_qmask.qm_noqmask) {
+ BPFQ_RUNLOCK(&d->bd_qmask);
+ continue;
+ }
+ }
}
BPFQ_RUNLOCK(&d->bd_qmask);
-
+
if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp))
continue;
++d->bd_rcount;
@@ -2790,11 +2708,6 @@ bpf_freed(struct bpf_d *d)
if (d->bd_wfilter != NULL)
free((caddr_t)d->bd_wfilter, M_BPF);
- if (d->bd_qmask.qm_enabled) {
- free(d->bd_qmask.qm_rxq_mask, M_BPF);
- free(d->bd_qmask.qm_txq_mask, M_BPF);
- }
-
mtx_destroy(&d->bd_lock);
}
Modified: user/syuu/mq_bpf/sys/net/bpf.h
==============================================================================
--- user/syuu/mq_bpf/sys/net/bpf.h Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/net/bpf.h Mon Sep 2 20:35:39 2013 (r255155)
@@ -147,17 +147,14 @@ struct bpf_zbuf {
#define BIOCSETFNR _IOW('B', 130, struct bpf_program)
#define BIOCGTSTAMP _IOR('B', 131, u_int)
#define BIOCSTSTAMP _IOW('B', 132, u_int)
-#define BIOCENAQMASK _IO('B', 133)
-#define BIOCDISQMASK _IO('B', 134)
-#define BIOCSTRXQMASK _IOWR('B', 135, uint32_t)
-#define BIOCCRRXQMASK _IOWR('B', 136, uint32_t)
-#define BIOCGTRXQMASK _IOR('B', 137, uint32_t)
-#define BIOCSTTXQMASK _IOWR('B', 138, uint32_t)
-#define BIOCCRTXQMASK _IOWR('B', 139, uint32_t)
-#define BIOCGTTXQMASK _IOR('B', 140, uint32_t)
-#define BIOCSTOTHERMASK _IO('B', 141)
-#define BIOCCROTHERMASK _IO('B', 142)
-#define BIOCGTOTHERMASK _IOR('B', 143, uint32_t)
+#define BIOCQMASKENABLE _IO('B', 133)
+#define BIOCQMASKDISABLE _IO('B', 134)
+#define BIOCGRXQMASK _IOR('B', 135, bpf_qmask_bits_t)
+#define BIOCSRXQMASK _IOW('B', 135, bpf_qmask_bits_t)
+#define BIOCGTXQMASK _IOR('B', 136, bpf_qmask_bits_t)
+#define BIOCSTXQMASK _IOW('B', 137, bpf_qmask_bits_t)
+#define BIOCGNOQMASK _IOR('B', 138, boolean_t)
+#define BIOCSNOQMASK _IOW('B', 139, boolean_t)
/* Obsolete */
#define BIOCGSEESENT BIOCGDIRECTION
Modified: user/syuu/mq_bpf/sys/net/bpfdesc.h
==============================================================================
--- user/syuu/mq_bpf/sys/net/bpfdesc.h Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/net/bpfdesc.h Mon Sep 2 20:35:39 2013 (r255155)
@@ -43,21 +43,28 @@
#include <sys/selinfo.h>
#include <sys/queue.h>
#include <sys/conf.h>
+#include <sys/cpuset.h>
#include <net/if.h>
+typedef cpuset_t bpf_qmask_bits_t;
+
struct bpf_qmask {
boolean_t qm_enabled;
- boolean_t * qm_rxq_mask;
- boolean_t * qm_txq_mask;
- boolean_t qm_other_mask;
+ bpf_qmask_bits_t qm_rxqmask;
+ bpf_qmask_bits_t qm_txqmask;
+ boolean_t qm_noqmask;
struct rwlock qm_lock;
};
-#define BPFQ_LOCK_DESTROY(qm) rw_destroy(&(qm)->qm_lock)
-#define BPFQ_RLOCK(qm) rw_rlock(&(qm)->qm_lock)
-#define BPFQ_RUNLOCK(qm) rw_runlock(&(qm)->qm_lock)
-#define BPFQ_WLOCK(qm) rw_wlock(&(qm)->qm_lock)
-#define BPFQ_WUNLOCK(qm) rw_wunlock(&(qm)->qm_lock)
+#define BPFQ_LOCK_INIT(qm) rw_init(&(qm)->qm_lock, "qmask lock")
+#define BPFQ_LOCK_DESTROY(qm) rw_destroy(&(qm)->qm_lock)
+#define BPFQ_RLOCK(qm) rw_rlock(&(qm)->qm_lock)
+#define BPFQ_RUNLOCK(qm) rw_runlock(&(qm)->qm_lock)
+#define BPFQ_WLOCK(qm) rw_wlock(&(qm)->qm_lock)
+#define BPFQ_WUNLOCK(qm) rw_wunlock(&(qm)->qm_lock)
+#define BPFQ_ZERO CPU_ZERO
+#define BPFQ_COPY CPU_COPY
+#define BPFQ_ISSET CPU_ISSET
/*
* Descriptor associated with each open bpf file.
Modified: user/syuu/mq_bpf/sys/sys/mbuf.h
==============================================================================
--- user/syuu/mq_bpf/sys/sys/mbuf.h Mon Sep 2 19:49:18 2013 (r255154)
+++ user/syuu/mq_bpf/sys/sys/mbuf.h Mon Sep 2 20:35:39 2013 (r255155)
@@ -110,6 +110,11 @@ struct m_tag {
void (*m_tag_free)(struct m_tag *);
};
+enum queuetype {
+ QUEUETYPE_RX,
+ QUEUETYPE_TX
+};
+
/*
* Record/packet header in first mbuf of chain; valid only if M_PKTHDR is set.
*/
@@ -121,8 +126,8 @@ struct pkthdr {
uint32_t flowid; /* packet's 4-tuple system
* flow identifier
*/
- uint32_t rxqueue;
- uint32_t txqueue;
+ u_int queueid; /* hw queue id */
+ int queuetype; /* hw queue type */
/* variables for hardware checksum */
int csum_flags; /* flags regarding checksum */
int csum_data; /* data field used by csum routines */
@@ -207,6 +212,7 @@ struct mbuf {
#define M_PROTO7 0x00100000 /* protocol-specific */
#define M_PROTO8 0x00200000 /* protocol-specific */
#define M_FLOWID 0x00400000 /* deprecated: flowid is valid */
+#define M_QUEUEID 0x00800000 /* packet has hw queue id */
#define M_HASHTYPEBITS 0x0F000000 /* mask of bits holding flowid hash type */
#define M_NOTIFICATION M_PROTO5 /* SCTP notification */
More information about the svn-src-user
mailing list