OSDN Git Service

net/packet: add PACKET_FANOUT_FLAG_IGNORE_OUTGOING
authorWillem de Bruijn <willemb@google.com>
Thu, 27 Oct 2022 21:10:14 +0000 (17:10 -0400)
committerJakub Kicinski <kuba@kernel.org>
Sat, 29 Oct 2022 05:00:49 +0000 (22:00 -0700)
commit58ba426388d9fe56aa638f555b01d6e63cada88c
tree3709aa38f3e61c645912c7f0d765c9c04fb4e84a
parent637639cbfebb747406b9a57befc0b347057a3a24
net/packet: add PACKET_FANOUT_FLAG_IGNORE_OUTGOING

Extend packet socket option PACKET_IGNORE_OUTGOING to fanout groups.

The socket option sets ptype.ignore_outgoing, which makes
dev_queue_xmit_nit skip the socket.

When the socket joins a fanout group, the option is not reflected in
the struct ptype of the group. dev_queue_xmit_nit only tests the
fanout ptype, so the flag is ignored once a socket joins a
fanout group.

Inheriting the option from a socket would change established behavior.
Different sockets in the group can set different flags, and can also
change them at runtime.

Testing in packet_rcv_fanout defeats the purpose of the original
patch, which is to avoid skb_clone in dev_queue_xmit_nit (esp. for
MSG_ZEROCOPY packets).

Instead, introduce a new fanout group flag with the same behavior.

Tested with https://github.com/wdebruij/kerneltools/blob/master/tests/test_psock_fanout_ignore_outgoing.c

Signed-off-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20221027211014.3581513-1-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/uapi/linux/if_packet.h
net/packet/af_packet.c