Provided by: freebsd-manpages_12.2-1_all bug


     ptnet — Ethernet driver for passed-through netmap ports


     This network driver is included in netmap(4), and it can be compiled into the kernel by
     adding the following line in your kernel configuration file:

           device netmap


     The ptnet device driver provides direct access to host netmap ports, from within a Virtual
     Machine (VM).  Applications running inside the VM can access the TX/RX rings and buffers of
     a netmap port that the hypervisor has passed-through to the VM.  Hypervisor support for
     ptnet is currently available for QEMU/KVM.  Any netmap(4) port can be passed-through,
     including physical NICs, vale(4) ports, netmap pipes, etc.

     The main use-case for netmap passthrough is Network Function Virtualization (NFV), where
     middlebox applications running within VMs may want to process very high packet rates (e.g.,
     1-10 millions packets per second or more).  Note, however, that those applications must use
     the device in netmap mode in order to achieve such rates.  In addition to the general
     advantages of netmap, the improved performance of ptnet when compared to hypervisor device
     emulation or paravirtualization (e.g., vtnet(4), vmx(4)) comes from the hypervisor being
     completely bypassed in the data-path.  For example, when using vtnet(4) the VM has to
     convert each mbuf(9) to a VirtIO-specific packet representation and publish that to a VirtIO
     queue; on the hypervisor side, the packet is extracted from the VirtIO queue and converted
     to a hypervisor-specific packet representation.  The overhead of format conversions (and
     packet copies, in same cases) is not incured by ptnet in netmap mode, because mbufs are not
     used at all, and the packet format is the one defined by netmap (e.g., struct netmap_slot)
     along the whole data-path.  No format conversions or copies happen.

     It is also possible to use a ptnet device like a regular network interface, which interacts
     with the FreeBSD network stack (i.e., not in netmap mode).  However, in that case it is
     necessary to pay the cost of data copies between mbufs and netmap buffers, which generally
     results in lower TCP/UDP performance than vtnet(4) or other paravirtualized network devices.
     If the passed-through netmap port supports the VirtIO network header, ptnet is able to use
     it, and support TCP/UDP checksum offload (for both transmit and receive), TCP segmentation
     offload (TSO) and TCP large receive offload (LRO).  Currently, vale(4) ports support the
     header.  Note that the VirtIO network header is generally not used in NFV use-cases, because
     middleboxes are not endpoints of TCP/UDP connections.


     Tunables can be set at the loader(8) prompt before booting the kernel or stored in

             This tunable enables (1) or disables (0) the VirtIO network header.  If enabled,
             ptnet uses the same header used by vtnet(4) to exchange offload metadata with the
             hypervisor.  If disabled, no header is prepended to transmitted and received
             packets.  The metadata is necessary to support TCP/UDP checksum offloads, TSO, and
             LRO.  The default value is 1.


     netintro(4), netmap(4), vale(4), virtio(4), vmx(4), ifconfig(8)


     The ptnet driver was written by Vincenzo Maffione <>.  It first
     appeared in FreeBSD 12.0.