Date: Wed, 08 Sep 2004 11:26:16 -0700 From: Julian Elischer <julian@elischer.org> To: Bruce M Simpson <bms@spc.org> Cc: tcpdump-workers@tcpdump.org Subject: Re: [PATCH] Add ioctl to disable bpf timestamping Message-ID: <413F4EC8.8030401@elischer.org> In-Reply-To: <20040908092624.GD793@empiric.icir.org> References: <20040908092624.GD793@empiric.icir.org>
next in thread | previous in thread | raw e-mail | index | archive | help
how much bandwidth change does this give? is teh timestamp really a big load? fo a 4% increase I wouldn't bother. for a 50% increase I would.. Bruce M Simpson wrote: >Here's a patch against 5.3 to add a per-instance switch which allows >the user to specify if captured packets should be timestamped (and, >if so, whether microtime() or the faster but less accurate >getmicrotime() call should be used). > >Comments/flames/etc to the usual... > >BMS > > >------------------------------------------------------------------------ > >Index: bpf.c >=================================================================== >RCS file: /home/ncvs/src/sys/net/bpf.c,v >retrieving revision 1.130 >diff -u -p -r1.130 bpf.c >--- bpf.c 5 Jul 2004 16:28:31 -0000 1.130 >+++ bpf.c 8 Sep 2004 09:22:09 -0000 >@@ -347,6 +347,7 @@ bpfopen(dev, flags, fmt, td) > d->bd_bufsize = bpf_bufsize; > d->bd_sig = SIGIO; > d->bd_seesent = 1; >+ d->bd_tstamp = BPF_TSTAMP_MICROTIME; > #ifdef MAC > mac_init_bpfdesc(d); > mac_create_bpfdesc(td->td_ucred, d); >@@ -629,6 +630,7 @@ reset_d(d) > * BIOCSHDRCMPLT Set "header already complete" flag > * BIOCGSEESENT Get "see packets sent" flag > * BIOCSSEESENT Set "see packets sent" flag >+ * BIOCSTSTAMP Set "timestamp preference" flag > */ > /* ARGSUSED */ > static int >@@ -880,6 +882,13 @@ bpfioctl(dev, cmd, addr, flags, td) > d->bd_seesent = *(u_int *)addr; > break; > >+ /* >+ * Set "timestamp preference" flag >+ */ >+ case BIOCSTSTAMP: >+ d->bd_tstamp = *(u_int *)addr; >+ break; >+ > case FIONBIO: /* Non-blocking I/O */ > break; > >@@ -1331,7 +1340,14 @@ catchpacket(d, pkt, pktlen, snaplen, cpf > * Append the bpf header. > */ > hp = (struct bpf_hdr *)(d->bd_sbuf + curlen); >- microtime(&hp->bh_tstamp); >+ /* >+ * Only prepend a timestamp if instructed to do so. >+ * getmicrotime() is less accurate but potentially faster. >+ */ >+ if (d->bd_tstamp == BPF_TSTAMP_MICROTIME) >+ microtime(&hp->bh_tstamp); >+ else if (d->bd_tstamp == BPF_TSTAMP_GETMICROTIME) >+ getmicrotime(&hp->bh_tstamp); > hp->bh_datalen = pktlen; > hp->bh_hdrlen = hdrlen; > /* >Index: bpf.h >=================================================================== >RCS file: /home/ncvs/src/sys/net/bpf.h,v >retrieving revision 1.36 >diff -u -p -r1.36 bpf.h >--- bpf.h 30 May 2004 17:03:48 -0000 1.36 >+++ bpf.h 8 Sep 2004 09:15:35 -0000 >@@ -113,6 +113,7 @@ struct bpf_version { > #define BIOCSSEESENT _IOW('B',119, u_int) > #define BIOCSDLT _IOW('B',120, u_int) > #define BIOCGDLTLIST _IOWR('B',121, struct bpf_dltlist) >+#define BIOCSTSTAMP _IOW('B',122, u_int) > > /* > * Structure prepended to each packet. >@@ -491,4 +492,13 @@ u_int bpf_filter(const struct bpf_insn > */ > #define BPF_MEMWORDS 16 > >+/* >+ * Defines to specify timestamping preference for a BPF instance. >+ * BPF_TSTAMP_MICROTIME is the default when none is specified. >+ * Other settings may increase BPF capture performance under load. >+ */ >+#define BPF_TSTAMP_NONE 0x00 /* Don't timestamp packets */ >+#define BPF_TSTAMP_MICROTIME 0x01 /* Use microtime() (slower) */ >+#define BPF_TSTAMP_GETMICROTIME 0x02 /* Use getmicrotime() */ >+ > #endif /* _NET_BPF_H_ */ >Index: bpfdesc.h >=================================================================== >RCS file: /home/ncvs/src/sys/net/bpfdesc.h,v >retrieving revision 1.27 >diff -u -p -r1.27 bpfdesc.h >--- bpfdesc.h 7 Apr 2004 20:46:11 -0000 1.27 >+++ bpfdesc.h 8 Sep 2004 09:17:16 -0000 >@@ -73,6 +73,7 @@ struct bpf_d { > 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_tstamp; /* timestamping preferences */ > int bd_hdrcmplt; /* false to fill in src lladdr automatically */ > int bd_seesent; /* true if bpf should see sent packets */ > int bd_async; /* non-zero if packet reception should generate signal */ > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?413F4EC8.8030401>