Revision tags: release/8.3.0_cvs, release/8.3.0 |
|
#
51ec1eb7 |
| 06-Apr-2012 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
- Improve performace for writer-only BPF users.
Linux and Solaris (at least OpenSolaris) has PF_PACKET socket families to send raw ethernet frames. The only FreeBSD interface that can be used to sen
- Improve performace for writer-only BPF users.
Linux and Solaris (at least OpenSolaris) has PF_PACKET socket families to send raw ethernet frames. The only FreeBSD interface that can be used to send raw frames is BPF. As a result, many programs like cdpd, lldpd, various dhcp stuff uses BPF only to send data. This leads us to the situation when software like cdpd, being run on high-traffic-volume interface significantly reduces overall performance since we have to acquire additional locks for every packet.
Here we add sysctl that changes BPF behavior in the following way: If program came and opens BPF socket without explicitly specifyin read filter we assume it to be write-only and add it to special writer-only per-interface list. This makes bpf_peers_present() return 0, so no additional overhead is introduced. After filter is supplied, descriptor is added to original per-interface list permitting packets to be captured.
Unfortunately, pcap_open_live() sets catch-all filter itself for the purpose of setting snap length.
Fortunately, most programs explicitly sets (event catch-all) filter after that. tcpdump(1) is a good example.
So a bit hackis approach is taken: we upgrade description only after second BIOCSETF is received.
Sysctl is named net.bpf.optimize_writers and is turned off by default.
- While here, document all sysctl variables in bpf.4
Sponsored by Yandex LLC
Reviewed by: glebius (previous version) Reviewed by: silence on -net@ Approved by: (mentor)
MFC after: 4 weeks
show more ...
|
Revision tags: release/9.0.0 |
|
#
253a3814 |
| 31-Dec-2011 |
Lawrence Stewart <lstewart@FreeBSD.org> |
Revert r228986 until it can be reworked to avoid panicing the kernel when the same interface is attached multiple times with different DLTs, as is done in net80211 for example.
Reported by: adrian
|
#
0f89fc22 |
| 30-Dec-2011 |
Lawrence Stewart <lstewart@FreeBSD.org> |
- Introduce the net.bpf.tscfg sysctl tree and associated code so as to make one aspect of time stamp configuration per interface rather than per BPF descriptor. Prior to this, the order in which
- Introduce the net.bpf.tscfg sysctl tree and associated code so as to make one aspect of time stamp configuration per interface rather than per BPF descriptor. Prior to this, the order in which BPF devices were opened and the per descriptor time stamp configuration settings could cause non-deterministic and unintended behaviour with respect to time stamping. With the new scheme, a BPF attached interface's tscfg sysctl entry can be set to "default", "none", "fast", "normal" or "external". Setting "default" means use the system default option (set with the net.bpf.tscfg.default sysctl), "none" means do not generate time stamps for tapped packets, "fast" means generate time stamps for tapped packets using a hz granularity system clock read, "normal" means generate time stamps for tapped packets using a full timecounter granularity system clock read and "external" (currently unimplemented) means use the time stamp provided with the packet from an underlying source.
- Utilise the recently introduced sysclock_getsnapshot() and sysclock_snap2bintime() KPIs to ensure the system clock is only read once per packet, regardless of the number of BPF descriptors and time stamp formats requested. Use the per BPF attached interface time stamp configuration to control if sysclock_getsnapshot() is called and whether the system clock read is fast or normal. The per BPF descriptor time stamp configuration is then used to control how the system clock snapshot is converted to a bintime by sysclock_snap2bintime().
- Remove all FAST related BPF descriptor flag variants. Performing a "fast" read of the system clock is now controlled per BPF attached interface using the net.bpf.tscfg sysctl tree.
- Update the bpf.4 man page.
Committed on behalf of Julien Ridoux and Darryl Veitch from the University of Melbourne, Australia, as part of the FreeBSD Foundation funded "Feed-Forward Clock Synchronization Algorithms" project.
For more information, see http://www.synclab.org/radclock/
In collaboration with: Julien Ridoux (jridoux at unimelb edu au)
show more ...
|
Revision tags: release/7.4.0_cvs, release/8.2.0_cvs, release/7.4.0, release/8.2.0 |
|
#
0d9deed5 |
| 08-Oct-2010 |
Ulrich Spörlein <uqs@FreeBSD.org> |
mdoc: drop redundant .Pp and .LP calls
They have no effect when coming in pairs, or before .Bl/.Bd
|
#
e7f8dd75 |
| 28-Aug-2010 |
Rebecca Cran <brucec@FreeBSD.org> |
Fix incorrect usage of 'assure' and 'insure'.
Approved by: rrs (mentor)
|
#
b06cfd40 |
| 31-Jul-2010 |
Joel Dahl <joel@FreeBSD.org> |
Fix a bunch of typos and spelling mistakes.
|
Revision tags: release/8.1.0_cvs, release/8.1.0 |
|
#
547d94bd |
| 15-Jun-2010 |
Jung-uk Kim <jkim@FreeBSD.org> |
Implement flexible BPF timestamping framework.
- Allow setting format, resolution and accuracy of BPF time stamps per listener. Previously, we were only able to use microtime(9). Now we can set va
Implement flexible BPF timestamping framework.
- Allow setting format, resolution and accuracy of BPF time stamps per listener. Previously, we were only able to use microtime(9). Now we can set various resolutions and accuracies with ioctl(2) BIOCSTSTAMP command. Similarly, we can get the current resolution and accuracy with BIOCGTSTAMP command. Document all supported options in bpf(4) and their uses.
- Introduce new time stamp 'struct bpf_ts' and header 'struct bpf_xhdr'. The new time stamp has both 64-bit second and fractional parts. bpf_xhdr has this time stamp instead of 'struct timeval' for bh_tstamp. The new structures let us use bh_tstamp of same size on both 32-bit and 64-bit platforms without adding additional shims for 32-bit binaries. On 64-bit platforms, size of BPF header does not change compared to bpf_hdr as its members are already all 64-bit long. On 32-bit platforms, the size may increase by 8 bytes. For backward compatibility, struct bpf_hdr with struct timeval is still the default header unless new time stamp format is explicitly requested. However, the behaviour may change in the future and all relevant code is wrapped around "#ifdef BURN_BRIDGES" for now.
- Add experimental support for tagging mbufs with time stamps from a lower layer, e.g., device driver. Currently, mbuf_tags(9) is used to tag mbufs. The time stamps must be uptime in 'struct bintime' format as binuptime(9) and getbinuptime(9) do.
Reviewed by: net@
show more ...
|
Revision tags: release/7.3.0_cvs, release/7.3.0, release/8.0.0_cvs, release/8.0.0, release/7.2.0_cvs, release/7.2.0, release/7.1.0_cvs, release/7.1.0, release/6.4.0_cvs, release/6.4.0 |
|
#
8fced8fc |
| 13-Aug-2008 |
Ed Schouten <ed@FreeBSD.org> |
Bump __FreeBSD_version to 800043, because of the bpf(4) change.
bpf(4) now uses cdevpriv to distinguish multiple file descriptors, where it used to be implemented using device cloning. Ports like li
Bump __FreeBSD_version to 800043, because of the bpf(4) change.
bpf(4) now uses cdevpriv to distinguish multiple file descriptors, where it used to be implemented using device cloning. Ports like libpcap properly detect the change in their configure scripts, but it doesn't hurt to increase __FreeBSD_version.
While there, change the bpf(4) manual page to refer to /dev/bpf instead of /dev/bpfN.
Requested by: mlaier
show more ...
|
#
0d1532e0 |
| 07-Jul-2008 |
David Malone <dwmalone@FreeBSD.org> |
Update man page for addition of BIOCSETFNR. Subversion didn't want to commit this at the same time for some reason.
|
#
a7a91e65 |
| 07-Apr-2008 |
Robert Watson <rwatson@FreeBSD.org> |
Maintain and observe a ZBUF_FLAG_IMMUTABLE flag on zero-copy BPF buffer kernel descriptors, which is used to allow the buffer currently in the BPF "store" position to be assigned to userspace when it
Maintain and observe a ZBUF_FLAG_IMMUTABLE flag on zero-copy BPF buffer kernel descriptors, which is used to allow the buffer currently in the BPF "store" position to be assigned to userspace when it fills, even if userspace hasn't acknowledged the buffer in the "hold" position yet. To implement this, notify the buffer model when a buffer becomes full, and check that the store buffer is writable, not just for it being full, before trying to append new packet data. Shared memory buffers will be assigned to userspace at most once per fill, be it in the store or in the hold position.
This removes the restriction that at most one shared memory can by owned by userspace, reducing the chances that userspace will need to call select() after acknowledging one buffer in order to wait for the next buffer when under high load. This more fully realizes the goal of zero system calls in order to process a high-speed packet stream from BPF.
Update bpf.4 to reflect that both buffers may be owned by userspace at once; caution against assuming this.
show more ...
|
#
4d621040 |
| 24-Mar-2008 |
Christian S.J. Peron <csjp@FreeBSD.org> |
Introduce support for zero-copy BPF buffering, which reduces the overhead of packet capture by allowing a user process to directly "loan" buffer memory to the kernel rather than using read(2) to expl
Introduce support for zero-copy BPF buffering, which reduces the overhead of packet capture by allowing a user process to directly "loan" buffer memory to the kernel rather than using read(2) to explicitly copy data from kernel address space.
The user process will issue new BPF ioctls to set the shared memory buffer mode and provide pointers to buffers and their size. The kernel then wires and maps the pages into kernel address space using sf_buf(9), which on supporting architectures will use the direct map region. The current "buffered" access mode remains the default, and support for zero-copy buffers must, for the time being, be explicitly enabled using a sysctl for the kernel to accept requests to use it.
The kernel and user process synchronize use of the buffers with atomic operations, avoiding the need for system calls under load; the user process may use select()/poll()/kqueue() to manage blocking while waiting for network data if the user process is able to consume data faster than the kernel generates it. Patchs to libpcap are available to allow libpcap applications to transparently take advantage of this support. Detailed information on the new API may be found in bpf(4), including specific atomic operations and memory barriers required to synchronize buffer use safely.
These changes modify the base BPF implementation to (roughly) abstrac the current buffer model, allowing the new shared memory model to be added, and add new monitoring statistics for netstat to print. The implementation, with the exception of some monitoring hanges that break the netstat monitoring ABI for BPF, will be MFC'd.
Zerocopy bpf buffers are still considered experimental are disabled by default. To experiment with this new facility, adjust the net.bpf.zerocopy_enable sysctl variable to 1.
Changes to libpcap will be made available as a patch for the time being, and further refinements to the implementation are expected.
Sponsored by: Seccuris Inc. In collaboration with: rwatson Tested by: pwood, gallatin MFC after: 4 months [1]
[1] Certain portions will probably not be MFCed, specifically things that can break the monitoring ABI.
show more ...
|
Revision tags: release/7.0.0_cvs, release/7.0.0, release/6.3.0_cvs, release/6.3.0 |
|
#
560a54e1 |
| 26-Feb-2007 |
Jung-uk Kim <jkim@FreeBSD.org> |
Add three new ioctl(2) commands for bpf(4).
- BIOCGDIRECTION and BIOCSDIRECTION get or set the setting determining whether incoming, outgoing, or all packets on the interface should be returned by B
Add three new ioctl(2) commands for bpf(4).
- BIOCGDIRECTION and BIOCSDIRECTION get or set the setting determining whether incoming, outgoing, or all packets on the interface should be returned by BPF. Set to BPF_D_IN to see only incoming packets on the interface. Set to BPF_D_INOUT to see packets originating locally and remotely on the interface. Set to BPF_D_OUT to see only outgoing packets on the interface. This setting is initialized to BPF_D_INOUT by default. BIOCGSEESENT and BIOCSSEESENT are obsoleted by these but kept for backward compatibility.
- BIOCFEEDBACK sets packet feedback mode. This allows injected packets to be fed back as input to the interface when output via the interface is successful. When BPF_D_INOUT direction is set, injected outgoing packet is not returned by BPF to avoid duplication. This flag is initialized to zero by default.
Note that libpcap has been modified to support BPF_D_OUT direction for pcap_setdirection(3) and PCAP_D_OUT direction is functional now.
Reviewed by: rwatson
show more ...
|
Revision tags: release/6.2.0_cvs, release/6.2.0, release/5.5.0_cvs, release/5.5.0, release/6.1.0_cvs, release/6.1.0 |
|
#
78ad5421 |
| 18-Nov-2005 |
Ruslan Ermilov <ru@FreeBSD.org> |
-mdoc sweep.
|
Revision tags: release/6.0.0_cvs, release/6.0.0 |
|
#
49db78b0 |
| 23-Aug-2005 |
Christian S.J. Peron <csjp@FreeBSD.org> |
Add documentation for the BIOCLOCK and BIOCSETWF ioctl commands. Also modify the documentation for BIOCSETF to note that it sets the read filter.
Pointed out by: simon
|
Revision tags: release/5.4.0_cvs, release/5.4.0 |
|
#
0227791b |
| 13-Feb-2005 |
Ruslan Ermilov <ru@FreeBSD.org> |
Expand *n't contractions.
|
Revision tags: release/4.11.0_cvs, release/4.11.0 |
|
#
9cbda590 |
| 21-Jan-2005 |
Ruslan Ermilov <ru@FreeBSD.org> |
Sort sections.
|
#
c5f116aa |
| 21-Dec-2004 |
Christian Brueffer <brueffer@FreeBSD.org> |
(fast) ethernet -> (Fast) Ethernet
MFC after: 3 days
|
Revision tags: release/5.3.0_cvs, release/5.3.0 |
|
#
5203edcd |
| 03-Jul-2004 |
Ruslan Ermilov <ru@FreeBSD.org> |
Mechanically kill hard sentence breaks and double whitespaces.
|
#
bf7f20c2 |
| 16-Jun-2004 |
Ruslan Ermilov <ru@FreeBSD.org> |
Assorted markup, spelling, and grammar fixes.
|
Revision tags: release/4.10.0_cvs, release/4.10.0 |
|
#
83676de9 |
| 19-May-2004 |
David Malone <dwmalone@FreeBSD.org> |
Add a man page for the kernel part of bpf. I made some edits to the man page after Orla, so the mistakes are probably mine. Leave a note on the door welcoming the mdoc police.
Submitted by: Orla McG
Add a man page for the kernel part of bpf. I made some edits to the man page after Orla, so the mistakes are probably mine. Leave a note on the door welcoming the mdoc police.
Submitted by: Orla McGann <orly@cnri.dit.ie>
show more ...
|
Revision tags: release/5.2.1_cvs, release/5.2.1, release/5.2.0_cvs, release/5.2.0, release/4.9.0_cvs, release/4.9.0 |
|
#
fe08efe6 |
| 08-Sep-2003 |
Ruslan Ermilov <ru@FreeBSD.org> |
mdoc(7): Use the new feature of the .In macro.
|
#
b5e7e999 |
| 29-Jun-2003 |
Ruslan Ermilov <ru@FreeBSD.org> |
Hiten's patchset for section four manpages, slightly edited by me.
|
Revision tags: release/5.1.0_cvs, release/5.1.0, release/4.8.0_cvs, release/4.8.0, release/5.0.0_cvs, release/5.0.0, release/4.7.0_cvs, release/4.6.2_cvs, release/4.6.2, release/4.6.1, release/4.6.0_cvs |
|
#
5320cc6b |
| 31-Mar-2002 |
Dima Dorfman <dd@FreeBSD.org> |
Correct typo.
PR: 36544 Submitted by: dak@klemm.delta6.net
|
#
b8fdc2f9 |
| 18-Mar-2002 |
Ruslan Ermilov <ru@FreeBSD.org> |
mdoc(7) police: markup nit.
|
#
9ed55d10 |
| 13-Mar-2002 |
Robert Watson <rwatson@FreeBSD.org> |
Add a bugs notice indicating that the SEESENT flag may behave incorrectly on interfaces with hardware loopback, and point-to-point interfaces (unclear why that is, may need to be tracked down).
|