af_packet: TX_RING support for TPACKET_V3
Although TPACKET_V3 Rx has some benefits over TPACKET_V2 Rx, *_v3 does not currently have TX_RING support. As a result an application that wants the best perf for Tx and Rx (e.g. to handle request/response transacations) ends up needing 2 sockets, one with *_v2 for Tx and another with *_v3 for Rx. This patch enables TPACKET_V2 compatible Tx features in TPACKET_V3 so that an application can use a single descriptor to get the benefits of _v3 RX_RING and _v2 TX_RING. An application may do a block-send by first filling up multiple frames in the Tx ring and then triggering a transmit. This patch only support fixed size Tx frames for TPACKET_V3, and requires that tp_next_offset must be zero. Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

szülő
e7072f6669
commit
7f953ab2ba
@@ -565,7 +565,7 @@ TPACKET_V1 --> TPACKET_V2:
|
||||
(void *)hdr + TPACKET_ALIGN(sizeof(struct tpacket_hdr))
|
||||
|
||||
TPACKET_V2 --> TPACKET_V3:
|
||||
- Flexible buffer implementation:
|
||||
- Flexible buffer implementation for RX_RING:
|
||||
1. Blocks can be configured with non-static frame-size
|
||||
2. Read/poll is at a block-level (as opposed to packet-level)
|
||||
3. Added poll timeout to avoid indefinite user-space wait
|
||||
@@ -574,7 +574,12 @@ TPACKET_V2 --> TPACKET_V3:
|
||||
4.1 block::timeout
|
||||
4.2 tpkt_hdr::sk_rxhash
|
||||
- RX Hash data available in user space
|
||||
- Currently only RX_RING available
|
||||
- TX_RING semantics are conceptually similar to TPACKET_V2;
|
||||
use tpacket3_hdr instead of tpacket2_hdr, and TPACKET3_HDRLEN
|
||||
instead of TPACKET2_HDRLEN. In the current implementation,
|
||||
the tp_next_offset field in the tpacket3_hdr MUST be set to
|
||||
zero, indicating that the ring does not hold variable sized frames.
|
||||
Packets with non-zero values of tp_next_offset will be dropped.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
+ AF_PACKET fanout mode
|
||||
|
Reference in New Issue
Block a user