From 8c26e99bce411d4a4937e8c6ae0a487247099d15 Mon Sep 17 00:00:00 2001 From: Carsten Andrich Date: Tue, 22 Apr 2014 18:01:59 +0200 Subject: [PATCH] packet.7: PACKET_LOSS has inverse meaning I stumbled upon an error in packet.7 regarding the meaning of the PACKET_LOSS socket option. According to the current git version of linux-man setting PACKET_LOSS causes malformed packets to *not* be silently dropped. However it is the other way round. If PACKET_LOSS is *not* set, malformed packets will be marked TP_STATUS_WRONG_FORMAT and the transmission process aborted, leaving untransmitted packets in the ring. If it *is* set, malformed packets will be silently skipped, their status set to TP_STATUS_AVAILABLE and the transmission process continued with the following packet. This behaviour can be clearly seen in net/packet/af_packet.c: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/packet/af_packet.c#n2300 The value accompanying TP_PACKET_LOSS translates into po->tp_loss: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/packet/af_packet.c#n3304 I inverted the meaning of PACKET_LOSS and clarified the description in the attached patch. Reviewed-by: Willem de Bruijn Signed-off-by: Michael Kerrisk --- man7/packet.7 | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/man7/packet.7 b/man7/packet.7 index d8257f980..50858149b 100644 --- a/man7/packet.7 +++ b/man7/packet.7 @@ -319,9 +319,15 @@ original fanout algorithm selects a backlogged socket, the packet rolls over to the next available one. .TP .BR PACKET_LOSS " (with " PACKET_TX_RING ) -If set, do not silently drop a packet on transmission error, but -return it with status set to -.BR TP_STATUS_WRONG_FORMAT . +When a malformed packet is encountered on a transmit ring, the default is to +set its status to +.BR TP_STATUS_WRONG_FORMAT +and abort the transmission immediately (it and following packets are left +lingering on the ring). However if +.BR PACKET_LOSS +is set, malformed packets will be skipped, their status reset to +.BR TP_STATUS_AVAILABLE +and the transmission process continued. .TP .BR PACKET_RESERVE " (with " PACKET_RX_RING ) By default, a packet receive ring writes packets immediately following the @@ -419,7 +425,7 @@ or then that overrides the socket default. On successful transmission, the socket resets the slot to .BR TP_STATUS_AVAILABLE . -It discards packets silently on error unless +It immediately aborts the transmission on error unless .BR PACKET_LOSS is set. .TP