All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] getsockopt.2, packet.7: improve sockopt documentation for packet sockets
@ 2014-04-24 16:14 Carsten Andrich
       [not found] ` <1398356057.1966.14.camel-DYJrb7SVE5twFLYp8hBm2A@public.gmane.org>
  0 siblings, 1 reply; 14+ messages in thread
From: Carsten Andrich @ 2014-04-24 16:14 UTC (permalink / raw)
  To: Michael Kerrisk (man-pages)
  Cc: lnx-man, Willem de Bruijn, Daniel Borkmann, Neil Horman,
	Stefan Puiu

Hello everyone,

building up on Stefan's and my patches and Daniel's useful hint
regarding filter.txt, I assembled this short patch.

It attempts to clarify the tp_status situtation, considering that zero
has a special meaning and most bits are actually mutually exclusive.

I added filter.txt and and Daniel's and Chetan's excellent
psock_tpacket.c (IIRC Michael has already done that, but not yet pushed
to the public git repo) to the "see also" section.
I also appended packet.7 to getsockopt.2's "see also" section.

Cheers,
Carsten


diff --git a/man2/getsockopt.2 b/man2/getsockopt.2
index 925fa90..151cd31 100644
--- a/man2/getsockopt.2
+++ b/man2/getsockopt.2
@@ -205,6 +205,7 @@ system.
 .BR getprotoent (3),
 .BR protocols (5),
 .BR ip (7),
+.BR packet (7),
 .BR socket (7),
 .BR tcp (7),
 .BR udp (7),
diff --git a/man7/packet.7 b/man7/packet.7
index d8257f9..1ffcf32 100644
--- a/man7/packet.7
+++ b/man7/packet.7
@@ -319,9 +319,20 @@ 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 reset its
+.I tp_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, any malformed packet will be skipped, its
+.I tp_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
@@ -353,15 +364,21 @@ Packet socket and application communicate the head and tail of the ring
 through the
 .I tp_status
 field.
-The packet socket owns all slots with status
+The packet socket owns all slots with
+.I tp_status
+equal to
 .BR TP_STATUS_KERNEL .
 After filling a slot, it changes the status of the slot to transfer
 ownership to the application.
-During normal operation, the new status is
-.BR TP_STATUS_USER ,
-to signal that a correctly received packet has been stored.
+During normal operation, the new
+.I tp_status
+value has at least the
+.BR TP_STATUS_USER
+bit set, to signal that a received packet has been stored.
 When the application has finished processing a packet, it transfers
-ownership of the slot back to the socket by setting the status to
+ownership of the slot back to the socket by setting
+.I tp_status
+equal to
 .BR TP_STATUS_KERNEL .
 Packet sockets implement multiple variants of the packet ring.
 The implementation details are described in
@@ -400,9 +417,13 @@ Create a memory-mapped ring buffer for packet transmission.
 This option is similar to
 .BR PACKET_RX_RING
 and takes the same arguments.
-The application writes packets into slots with status
+The application writes packets into slots with
+.I tp_status
+equal to
 .BR TP_STATUS_AVAILABLE
-and schedules them for transmission by changing the status to
+and schedules them for transmission by changing 
+.I tp_status
+to
 .BR TP_STATUS_SEND_REQUEST .
 When packets are ready to be transmitted, the application calls
 .BR send (2)
@@ -417,9 +438,11 @@ If an address is passed using
 or
 .BR sendmsg (2),
 then that overrides the socket default.
-On successful transmission, the socket resets the slot to
+On successful transmission, the socket resets
+.I tp_status
+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
@@ -625,3 +648,12 @@ RFC\ 1700 for the IEEE 802.3 IP encapsulation.
 The
 .I <linux/if_ether.h>
 include file for physical layer protocols.
+
+The Linux kernel source tree.
+.IR /Documentation/networking/filter.txt
+describes how to apply Berkeley Packet Filters to packet sockets.
+.IR /tools/testing/selftests/net/psock_tpacket.c
+contains usage examples for all available versions of
+.BR PACKET_RX_RING
+and
+.BR PACKET_TX_RING .

--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 14+ messages in thread
* Re: [patch] getsockopt.2, packet.7: improve sockopt documentation for packet sockets
@ 2014-04-29 11:22 Carsten Andrich
       [not found] ` <o3okqw7ix4iaf8ukfb6ufhie.1398770460424-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
  0 siblings, 1 reply; 14+ messages in thread
From: Carsten Andrich @ 2014-04-29 11:22 UTC (permalink / raw)
  To: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w; +Cc: Neil Horman, lnx-man, Stefan Puiu

As far as I'm concerned, it is.
Thanks, Neil.

Cheers,
Carsten

"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> schrieb:

>Hi Carsten,
>
>On Tue, Apr 29, 2014 at 12:51 PM, Neil Horman <nhorman@tuxdriver.com> wrote:
>> On Mon, Apr 28, 2014 at 08:12:30PM +0200, Carsten Andrich wrote:
>>> Am Montag, den 28.04.2014, 13:28 -0400 schrieb Neil Horman:
>>> > Rather than 'lingernig' perhaps more exact language to indicate that positive
>>> > action is required from the application.  Perhaps:
>>> >
>>> > Packets in the WRONG_FORMAT state block the kernel from sending it and subsequent
>>> > packets on the ring.  Packet in the WRONG_FORMAT state must be moved to the
>>> > AVAILABLE or SEND_REQUEST state (after correcting format errors), so that the
>>> > next application call to send() properly transmits the frame.
>>>
>>> Thanks for the suggestion! I incorporated it into the following updated
>>> PACKET_LOSS description:
>>> When a malformed packet is encountered on a transmit ring, the default
>>> is to reset its tp_status to TP_STATUS_WRONG_FORMAT and abort the
>>> transmission immediately.  The malformed  packet  blocks  itself  and
>>> subsequent enqueued  packets from being sent.  The format error must be
>>> fixed, the associated tp_status reset to TP_STATUS_SEND_REQUEST and the
>>> transmission process restarted via send(2).  However, if PACKET_LOSS is
>>> set, any malformed packet will be skipped, its tp_status reset to
>>> TP_STATUS_AVAILABLE, and the transmission process continued.
>>>
>>> IMHO this should go into the PACKET_TX_RING description, but I'd like to
>>> defer that until I have a little more spare time on my hands, so I can
>>> tackle the entire PACKET_MMAP-related part of the man-page in a single
>>> effort.
>>>
>>> Updated patch follows.
>>>
>>> Cheers,
>>> Carsten
>>>
>>
>> Acked-by: Neil Horman <nhorman@tuxdriver.com>
>
>So, with Neil's Ack, is this patch ready to apply now?
>
>Cheers,
>
>Michael
>
>
>-- 
>Michael Kerrisk
>Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>Linux/UNIX System Programming Training: http://man7.org/training/

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2014-04-29 13:11 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-24 16:14 [patch] getsockopt.2, packet.7: improve sockopt documentation for packet sockets Carsten Andrich
     [not found] ` <1398356057.1966.14.camel-DYJrb7SVE5twFLYp8hBm2A@public.gmane.org>
2014-04-25 11:02   ` Neil Horman
     [not found]     ` <20140425110218.GA14074-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-04-25 22:42       ` Carsten Andrich
     [not found]         ` <1398465760.6683.33.camel-FQO4gtnRtnzkVFMGpb/cPg@public.gmane.org>
2014-04-28 13:34           ` Neil Horman
     [not found]             ` <20140428133444.GD16041-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-04-28 15:23               ` Carsten Andrich
     [not found]                 ` <1398698632.2988.10.camel-FQO4gtnRtnzkVFMGpb/cPg@public.gmane.org>
2014-04-28 17:28                   ` Neil Horman
     [not found]                     ` <20140428172815.GG16041-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-04-28 18:12                       ` Carsten Andrich
     [not found]                         ` <1398708750.2988.18.camel-FQO4gtnRtnzkVFMGpb/cPg@public.gmane.org>
2014-04-29 10:51                           ` Neil Horman
     [not found]                             ` <20140429105118.GA11686-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-04-29 11:16                               ` Michael Kerrisk (man-pages)
2014-04-29 12:02                           ` Michael Kerrisk (man-pages)
     [not found]                             ` <535F94D5.8050307-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-04-29 12:53                               ` Carsten Andrich
2014-04-29 12:58                                 ` Michael Kerrisk (man-pages)
  -- strict thread matches above, loose matches on Subject: below --
2014-04-29 11:22 Carsten Andrich
     [not found] ` <o3okqw7ix4iaf8ukfb6ufhie.1398770460424-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2014-04-29 13:11   ` Neil Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.