Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137286291
D53870.id166930.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D53870.id166930.diff
View Options
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -674,7 +674,7 @@
else
m->m_flags |= M_MCAST;
}
- if (d->bd_hdrcmplt == 0) {
+ if (!(d->bd_flags & BPFD_HDRCMPLT)) {
memcpy(eh->ether_shost, IF_LLADDR(ifp),
sizeof(eh->ether_shost));
}
@@ -876,8 +876,8 @@
* Check if this descriptor had requested promiscuous mode.
* If so and ifnet is not detached, turn it off.
*/
- if (d->bd_promisc && !detached_ifp) {
- d->bd_promisc = 0;
+ if ((d->bd_flags & BPFD_PROMISC) && !detached_ifp) {
+ d->bd_flags &= ~BPFD_PROMISC;
CURVNET_SET(ifp->if_vnet);
error = ifpromisc(ifp, 0);
CURVNET_RESTORE();
@@ -957,7 +957,6 @@
bpf_buffer_init(d);
if ((flags & FREAD) == 0)
d->bd_writer = 2;
- d->bd_hbuf_in_use = 0;
d->bd_bufmode = BPF_BUFMODE_BUFFER;
d->bd_sig = SIGIO;
d->bd_direction = BPF_D_INOUT;
@@ -1011,9 +1010,9 @@
callout_stop(&d->bd_callout);
timed_out = (d->bd_state == BPF_TIMED_OUT);
d->bd_state = BPF_IDLE;
- while (d->bd_hbuf_in_use) {
- error = mtx_sleep(&d->bd_hbuf_in_use, &d->bd_lock,
- PRINET | PCATCH, "bd_hbuf", 0);
+ while (d->bd_flags & BPFD_HBUF_INUSE) {
+ error = mtx_sleep(&d->bd_hbuf, &d->bd_lock, PRINET | PCATCH,
+ "bd_hbuf", 0);
if (error != 0) {
BPFD_UNLOCK(d);
return (error);
@@ -1030,7 +1029,8 @@
* A packet(s) either arrived since the previous
* read or arrived while we were asleep.
*/
- if (d->bd_immediate || non_block || timed_out) {
+ if ((d->bd_flags & BPFD_IMMEDIATE) || non_block ||
+ timed_out) {
/*
* Rotate the buffers and return what's here
* if we are in immediate mode, non-blocking
@@ -1087,7 +1087,7 @@
/*
* At this point, we know we have something in the hold slot.
*/
- d->bd_hbuf_in_use = 1;
+ d->bd_flags |= BPFD_HBUF_INUSE;
BPFD_UNLOCK(d);
/*
@@ -1101,14 +1101,14 @@
error = bpf_uiomove(d, d->bd_hbuf, d->bd_hlen, uio);
BPFD_LOCK(d);
- if (d->bd_hbuf_in_use) {
+ if (d->bd_flags & BPFD_HBUF_INUSE) {
KASSERT(d->bd_hbuf != NULL, ("bpfread: lost bd_hbuf"));
d->bd_fbuf = d->bd_hbuf;
d->bd_hbuf = NULL;
d->bd_hlen = 0;
bpf_buf_reclaimed(d);
- d->bd_hbuf_in_use = 0;
- wakeup(&d->bd_hbuf_in_use);
+ d->bd_flags &= ~BPFD_HBUF_INUSE;
+ wakeup(&d->bd_hbuf);
}
BPFD_UNLOCK(d);
@@ -1128,7 +1128,7 @@
d->bd_state = BPF_IDLE;
}
wakeup(d);
- if (d->bd_async && d->bd_sig && d->bd_sigio)
+ if ((d->bd_flags & BPFD_ASYNC) && d->bd_sig && d->bd_sigio)
pgsigio(&d->bd_sigio, d->bd_sig, 0);
selwakeuppri(&d->bd_sel, PRINET);
@@ -1160,7 +1160,7 @@
if (!bpf_canfreebuf(d) && d->bd_hlen != 0)
return (1);
- if ((d->bd_immediate || d->bd_state == BPF_TIMED_OUT) &&
+ if (((d->bd_flags & BPFD_IMMEDIATE) || d->bd_state == BPF_TIMED_OUT) &&
d->bd_slen != 0)
return (1);
return (0);
@@ -1235,10 +1235,10 @@
return (ENXIO);
}
counter_u64_add(d->bd_wfcount, 1);
- if (d->bd_hdrcmplt)
+ if (d->bd_flags & BPFD_HDRCMPLT)
dst.sa_family = pseudo_AF_HDRCMPLT;
- if (d->bd_feedback) {
+ if (d->bd_flags & BPFD_FEEDBACK) {
mc = m_dup(m, M_NOWAIT);
if (mc != NULL)
mc->m_pkthdr.rcvif = ifp;
@@ -1307,9 +1307,8 @@
BPFD_LOCK_ASSERT(d);
- while (d->bd_hbuf_in_use)
- mtx_sleep(&d->bd_hbuf_in_use, &d->bd_lock, PRINET,
- "bd_hbuf", 0);
+ while (d->bd_flags & BPFD_HBUF_INUSE)
+ mtx_sleep(&d->bd_hbuf, &d->bd_lock, PRINET, "bd_hbuf", 0);
if ((d->bd_hbuf != NULL) &&
(d->bd_bufmode != BPF_BUFMODE_ZBUF || bpf_canfreebuf(d))) {
/* Free the hold buffer. */
@@ -1382,7 +1381,7 @@
d->bd_state = BPF_IDLE;
BPFD_UNLOCK(d);
- if (d->bd_locked == 1) {
+ if (d->bd_flags & BPFD_LOCKED) {
switch (cmd) {
case BIOCGBLEN:
case BIOCFLUSH:
@@ -1451,8 +1450,8 @@
BPFD_LOCK(d);
n = d->bd_slen;
- while (d->bd_hbuf_in_use)
- mtx_sleep(&d->bd_hbuf_in_use, &d->bd_lock,
+ while (d->bd_flags & BPFD_HBUF_INUSE)
+ mtx_sleep(&d->bd_hbuf, &d->bd_lock,
PRINET, "bd_hbuf", 0);
if (d->bd_hbuf)
n += d->bd_hlen;
@@ -1511,10 +1510,10 @@
* No interface attached yet.
*/
error = EINVAL;
- } else if (d->bd_promisc == 0) {
+ } else if (!(d->bd_flags & BPFD_PROMISC)) {
error = ifpromisc(d->bd_bif->bif_ifp, 1);
if (error == 0)
- d->bd_promisc = 1;
+ d->bd_flags |= BPFD_PROMISC;
}
BPF_UNLOCK();
break;
@@ -1702,7 +1701,7 @@
*/
case BIOCIMMEDIATE:
BPFD_LOCK(d);
- d->bd_immediate = *(u_int *)addr;
+ d->bd_flags |= *(u_int *)addr ? BPFD_IMMEDIATE : 0;
BPFD_UNLOCK(d);
break;
@@ -1720,7 +1719,7 @@
*/
case BIOCGHDRCMPLT:
BPFD_LOCK(d);
- *(u_int *)addr = d->bd_hdrcmplt;
+ *(u_int *)addr = d->bd_flags & BPFD_HDRCMPLT ? 1 : 0;
BPFD_UNLOCK(d);
break;
@@ -1729,7 +1728,7 @@
*/
case BIOCSHDRCMPLT:
BPFD_LOCK(d);
- d->bd_hdrcmplt = *(u_int *)addr ? 1 : 0;
+ d->bd_flags |= *(u_int *)addr ? BPFD_HDRCMPLT : 0;
BPFD_UNLOCK(d);
break;
@@ -1790,13 +1789,13 @@
case BIOCFEEDBACK:
BPFD_LOCK(d);
- d->bd_feedback = *(u_int *)addr;
+ d->bd_flags |= *(u_int *)addr ? BPFD_FEEDBACK : 0;
BPFD_UNLOCK(d);
break;
case BIOCLOCK:
BPFD_LOCK(d);
- d->bd_locked = 1;
+ d->bd_flags |= BPFD_LOCKED;
BPFD_UNLOCK(d);
break;
@@ -1805,7 +1804,7 @@
case FIOASYNC: /* Send signal on receive packets */
BPFD_LOCK(d);
- d->bd_async = *(int *)addr;
+ d->bd_flags |= *(u_int *)addr ? BPFD_ASYNC : 0;
BPFD_UNLOCK(d);
break;
@@ -2213,7 +2212,7 @@
/*
* Ignore the hold buffer if it is being copied to user space.
*/
- if (!d->bd_hbuf_in_use && d->bd_hbuf)
+ if (!(d->bd_flags & BPFD_HBUF_INUSE) && d->bd_hbuf)
kn->kn_data += d->bd_hlen;
} else if (d->bd_rtout > 0 && d->bd_state == BPF_IDLE) {
callout_reset(&d->bd_callout, d->bd_rtout,
@@ -2632,12 +2631,14 @@
counter_u64_add(d->bd_dcount, 1);
return;
}
- KASSERT(!d->bd_hbuf_in_use, ("hold buffer is in use"));
+ KASSERT(!(d->bd_flags & BPFD_HBUF_INUSE),
+ ("hold buffer is in use"));
ROTATE_BUFFERS(d);
do_wakeup = 1;
curlen = 0;
} else {
- if (d->bd_immediate || d->bd_state == BPF_TIMED_OUT) {
+ if ((d->bd_flags & BPFD_IMMEDIATE) ||
+ d->bd_state == BPF_TIMED_OUT) {
/*
* Immediate mode is set, or the read timeout has
* already expired during a select call. A packet
@@ -2929,9 +2930,10 @@
static int
bpf_setdlt(struct bpf_d *d, u_int dlt)
{
- int error, opromisc;
struct ifnet *ifp;
struct bpf_if *bp;
+ int error;
+ bool opromisc;
BPF_LOCK_ASSERT();
MPASS(d->bd_bif != NULL);
@@ -2951,7 +2953,7 @@
if (bp == NULL)
return (EINVAL);
- opromisc = d->bd_promisc;
+ opromisc = d->bd_flags & BPFD_PROMISC;
bpf_attachd(d, bp);
if (opromisc) {
error = ifpromisc(bp->bif_ifp, 1);
@@ -2959,7 +2961,7 @@
if_printf(bp->bif_ifp, "%s: ifpromisc failed (%d)\n",
__func__, error);
else
- d->bd_promisc = 1;
+ d->bd_flags |= BPFD_PROMISC;
}
return (0);
}
@@ -3014,12 +3016,12 @@
BPF_LOCK_ASSERT();
bzero(d, sizeof(*d));
d->bd_structsize = sizeof(*d);
- d->bd_immediate = bd->bd_immediate;
- d->bd_promisc = bd->bd_promisc;
- d->bd_hdrcmplt = bd->bd_hdrcmplt;
+ d->bd_immediate = bd->bd_flags & BPFD_IMMEDIATE ? 1 : 0;
+ d->bd_promisc = bd->bd_flags & BPFD_PROMISC ? 1 : 0;
+ d->bd_hdrcmplt = bd->bd_flags & BPFD_HDRCMPLT ? 1 : 0;
d->bd_direction = bd->bd_direction;
- d->bd_feedback = bd->bd_feedback;
- d->bd_async = bd->bd_async;
+ d->bd_feedback = bd->bd_flags & BPFD_FEEDBACK ? 1 : 0;
+ d->bd_async = bd->bd_flags & BPFD_ASYNC ? 1 : 0;
d->bd_rcount = counter_u64_fetch(bd->bd_rcount);
d->bd_dcount = counter_u64_fetch(bd->bd_dcount);
d->bd_fcount = counter_u64_fetch(bd->bd_fcount);
@@ -3030,7 +3032,7 @@
d->bd_pid = bd->bd_pid;
strlcpy(d->bd_ifname,
bd->bd_bif->bif_ifp->if_xname, IFNAMSIZ);
- d->bd_locked = bd->bd_locked;
+ d->bd_locked = bd->bd_flags & BPFD_LOCKED ? 1 : 0;
d->bd_wcount = counter_u64_fetch(bd->bd_wcount);
d->bd_wdcount = counter_u64_fetch(bd->bd_wdcount);
d->bd_wfcount = counter_u64_fetch(bd->bd_wfcount);
diff --git a/sys/net/bpfdesc.h b/sys/net/bpfdesc.h
--- a/sys/net/bpfdesc.h
+++ b/sys/net/bpfdesc.h
@@ -63,11 +63,17 @@
caddr_t bd_sbuf; /* store slot */
caddr_t bd_hbuf; /* hold slot */
caddr_t bd_fbuf; /* free slot */
- int bd_hbuf_in_use; /* don't rotate buffers */
int bd_slen; /* current length of store buffer */
int bd_hlen; /* current length of hold buffer */
-
int bd_bufsize; /* absolute length of buffers */
+ int bd_flags;
+#define BPFD_HBUF_INUSE 0x00000001 /* don't rotate buffers */
+#define BPFD_PROMISC 0x00000002 /* listening promiscuously */
+#define BPFD_IMMEDIATE 0x00000004 /* return on packet arrival */
+#define BPFD_HDRCMPLT 0x00000008 /* header already filled in */
+#define BPFD_FEEDBACK 0x00000010 /* feed back sent packets */
+#define BPFD_ASYNC 0x00000020 /* packet reception generates signal */
+#define BPFD_LOCKED 0x00000040 /* descriptor is locked */
struct bpf_if * bd_bif; /* interface descriptor */
u_long bd_rtout; /* Read timeout in 'ticks' */
@@ -77,15 +83,10 @@
counter_u64_t bd_rcount; /* number of packets received */
counter_u64_t bd_dcount; /* number of packets dropped */
- u_char bd_promisc; /* true if listening promiscuously */
u_char bd_state; /* idle, waiting, or timed out */
- u_char bd_immediate; /* true to return on packet arrival */
u_char bd_writer; /* non-zero if d is writer-only */
- int bd_hdrcmplt; /* false to fill in src lladdr automatically */
int bd_direction; /* select packet direction */
int bd_tstamp; /* select time stamping function */
- int bd_feedback; /* true to feed back sent packets */
- int bd_async; /* non-zero if packet reception should generate signal */
int bd_sig; /* signal to send upon packet reception */
int bd_pcp; /* VLAN pcp tag */
struct sigio * bd_sigio; /* information for async I/O */
@@ -95,7 +96,6 @@
struct label *bd_label; /* MAC label for descriptor */
counter_u64_t bd_fcount; /* number of packets which matched filter */
pid_t bd_pid; /* PID which created descriptor */
- int bd_locked; /* true if descriptor is locked */
u_int bd_bufmode; /* Current buffer mode. */
counter_u64_t bd_wcount; /* number of packets written */
counter_u64_t bd_wfcount; /* number of packets that matched write filter */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 23, 1:53 AM (7 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25998624
Default Alt Text
D53870.id166930.diff (10 KB)
Attached To
Mode
D53870: bpf: convert several boolean natured fields of bpf_d to flags
Attached
Detach File
Event Timeline
Log In to Comment