Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Jun 2010 15:53:07 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: [RFC] BPF timestamping
Message-ID:  <201006091553.09621.jkim@FreeBSD.org>
In-Reply-To: <201006091542.37681.jkim@FreeBSD.org>
References:  <201006091444.50560.jkim@FreeBSD.org> <20100609191651.GR83316@deviant.kiev.zoral.com.ua> <201006091542.37681.jkim@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 09 June 2010 03:42 pm, Jung-uk Kim wrote:
> On Wednesday 09 June 2010 03:16 pm, Kostik Belousov wrote:
> > On Wed, Jun 09, 2010 at 02:44:47PM -0400, Jung-uk Kim wrote:
> > > bpf(4) can only timestamp packets with microtime(9).  I want to
> > > expand it to be able to use different format and resolution. 
> > > The patch is here:
> > >
> > > http://people.freebsd.org/~jkim/bpf_tstamp.diff
> > >
> > > With this patch, we can select different format and resolution
> > > of the timestamps.  It is done via ioctl(2) with BIOCSTSTAMP
> > > command. Similarly, you can get the current format and
> > > resolution with BIOCGTSTAMP command.  Currently, the following
> > > functions are available:
> > >
> > > 	BPF_T_MICROTIME		microtime(9)
> > > 	BPF_T_NANOTIME		nanotime(9)
> > > 	BPF_T_BINTIME		bintime(9)
> > > 	BPF_T_MICROTIME_FAST	getmicrotime(9)
> > > 	BPF_T_NANOTIME_FAST	getnanotime(9)
> > > 	BPF_T_BINTIME_FAST	getbintime(9)
> > > 	BPF_T_NONE		ignore time stamps
> > >
> > > (Note: Additionally, there is an experimental machanism to tag
> > > packets with timestamps in struct bintime format via
> > > mbuf_tags(9) from lower layer, e.g., device driver.  However, I
> > > didn't test it because I wasn't sure whether this is the right
> > > thing to do.)
> > >
> > > While I was here, I moved the bogus SIZEOF_BPF_HDR macro into
> > > bpf.c and tried to make it little bit more correct.  For
> > > example, the 32-bit shim should be able to handle alignment
> > > more properly for non-Ethernet DLTs.  I tried my best not to
> > > break ABI/API (especially for 32-bit platforms) and relevant
> > > places are all marked with BURN_BRIDGES.
> >
> > Putting COMPAT_FREEBSD32 under BURN_BRIDGES feels somewhat
> > strange.
>
> If we burn bridges, we don't need to convert 64-bit bh_tstamp to
> 32-bit version because the sizeof(struct bpf_xhdr) is fixed for
                             ^^^^^^^^^^^^^^^^^^^^^^^
                        SIZEOF_BPF_HDR(struct bpf_xhdr)

Argh...

Jung-uk Kim

> both 32-bit and 64-bit platforms.  The only difference is alignment
> and padding because of the evil u_short bh_hdrlen.  So, it was
> necessary evil if we don't want to break ABI between old 32-bit
> appliacations and bridge-burned 64-bit kernel.
>
> No, we are not going to burn bridges any time soon unless libpcap
> adopt the new structure.  Shrug...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006091553.09621.jkim>