All of lore.kernel.org
 help / color / mirror / Atom feed
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Joe Damato <joe@dama.to>,
	 netdev@vger.kernel.org,  "David S. Miller" <davem@davemloft.net>,
	 Eric Dumazet <edumazet@google.com>,
	 Jakub Kicinski <kuba@kernel.org>,
	 Paolo Abeni <pabeni@redhat.com>,
	 Simon Horman <horms@kernel.org>,  Shuah Khan <shuah@kernel.org>
Cc: andrew+netdev@lunn.ch,  linux-kernel@vger.kernel.org,
	 willemb@google.com,  Joe Damato <joe@dama.to>,
	 linux-kselftest@vger.kernel.org
Subject: Re: [net-next 3/3] selftests/net: Test PACKET_AUXDATA
Date: Fri, 03 Apr 2026 11:37:10 -0400	[thread overview]
Message-ID: <willemdebruijn.kernel.fd5e56c96ff3@gmail.com> (raw)
In-Reply-To: <20260402232203.2004496-4-joe@dama.to>

Joe Damato wrote:
> Extend the packet socket selftest, adding a recvmsg path, to test
> PACKET_AUXDATA. Check basic attributes of tpacket_auxdata.
> 
> Signed-off-by: Joe Damato <joe@dama.to>
> ---
>  tools/testing/selftests/net/psock_snd.c  | 57 ++++++++++++++++++++++--
>  tools/testing/selftests/net/psock_snd.sh |  5 +++
>  2 files changed, 59 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/testing/selftests/net/psock_snd.c b/tools/testing/selftests/net/psock_snd.c
> index 7bbce274b9f0..682e0afe364d 100644
> --- a/tools/testing/selftests/net/psock_snd.c
> +++ b/tools/testing/selftests/net/psock_snd.c
> @@ -40,6 +40,7 @@ static bool	cfg_use_qdisc_bypass;
>  static bool	cfg_use_vlan;
>  static bool	cfg_use_vnet;
>  static bool	cfg_drop;
> +static bool	cfg_aux_data;
>  
>  static char	*cfg_ifname = "lo";
>  static int	cfg_mtu	= 1500;
> @@ -281,9 +282,26 @@ static int setup_rx(void)
>  
>  static void do_rx(int fd, int expected_len, char *expected)
>  {
> +	char cmsg_buf[1024] = {};
> +	struct msghdr msg = {};
> +	struct iovec iov[1];
>  	int ret;
>  
> -	ret = recv(fd, rbuf, sizeof(rbuf), 0);
> +	if (cfg_aux_data) {
> +		iov[0].iov_base = rbuf;
> +		iov[0].iov_len = sizeof(rbuf);
> +
> +		msg.msg_iov = iov;
> +		msg.msg_iovlen = 1;
> +
> +		msg.msg_control = cmsg_buf;
> +		msg.msg_controllen = sizeof(cmsg_buf);
> +
> +		ret = recvmsg(fd, &msg, 0);
> +	} else {
> +		ret = recv(fd, rbuf, sizeof(rbuf), 0);
> +	}
> +
>  	if (ret == -1)
>  		error(1, errno, "recv");
>  	if (ret != expected_len)
> @@ -292,6 +310,31 @@ static void do_rx(int fd, int expected_len, char *expected)
>  	if (memcmp(rbuf, expected, ret))
>  		error(1, 0, "recv: data mismatch");
>  
> +	if (cfg_aux_data) {
> +		struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
> +		struct tpacket_auxdata *adata;
> +
> +		if (!cmsg)
> +			error(1, 0, "auxdata null");
> +
> +		if (cmsg->cmsg_level != SOL_PACKET)
> +			error(1, 0, "cmsg_level != SOL_PACKET");
> +
> +		if (cmsg->cmsg_type != PACKET_AUXDATA)
> +			error(1, 0, "cmsg_type != PACKET_AUXDATA");
> +
> +		adata = (struct tpacket_auxdata *)CMSG_DATA(cmsg);
> +
> +		if (adata->tp_net != ETH_HLEN)
> +			error(1, 0, "cmsg tp_net != ETH_HLEN");
> +
> +		if (adata->tp_len != expected_len)
> +			error(1, 0, "cmsg tp_len != %u", expected_len);
> +
> +		if (adata->tp_snaplen != expected_len)
> +			error(1, 0, "cmsg tp_snaplen != %u", expected_len);
> +	}
> +
>  	fprintf(stderr, "rx: %u\n", ret);
>  }
>  
> @@ -312,6 +355,10 @@ static int setup_sniffer(void)
>  		if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &one, sizeof(one)))
>  			error(1, errno, "setsockopt SO_RCVBUF");
>  
> +	if (cfg_aux_data)
> +		if (setsockopt(fd, SOL_PACKET, PACKET_AUXDATA, &one, sizeof(one)))
> +			error(1, errno, "setsockopt PACKET_AUXDATA");
> +
>  	pair_udp_setfilter(fd);
>  	do_bind(fd);
>  
> @@ -322,8 +369,11 @@ static void parse_opts(int argc, char **argv)
>  {
>  	int c;
>  
> -	while ((c = getopt(argc, argv, "bcCdDgl:qt:vV")) != -1) {
> +	while ((c = getopt(argc, argv, "abcCdDgl:qt:vV")) != -1) {
>  		switch (c) {
> +		case 'a':
> +			cfg_aux_data = true;
> +			break;
>  		case 'b':
>  			cfg_use_bind = true;
>  			break;
> @@ -436,7 +486,8 @@ static void run_test(void)
>  		check_packet_stats(fds);
>  	}
>  
> -	do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len);
> +	if (!cfg_aux_data)
> +		do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len);

Slight preference to instead detect that this is a read not from a packet
socket and skip the cmsg processing inside do_rx as a result.

A roundabout way would be using getsockname. Simpler may be just to pass a new
boolean to do_rx is_psock or os.

      reply	other threads:[~2026-04-03 15:37 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02 23:21 [net-next 0/3] Extend packet socket selftests Joe Damato
2026-04-02 23:21 ` [net-next 1/3] selftests/net: Test PACKET_STATISTICS Joe Damato
2026-04-02 23:21 ` [net-next 2/3] selftests/net: Test PACKET_STATISTICS drops Joe Damato
2026-04-03 15:26   ` Willem de Bruijn
2026-04-03 17:02     ` Joe Damato
2026-04-02 23:21 ` [net-next 3/3] selftests/net: Test PACKET_AUXDATA Joe Damato
2026-04-03 15:37   ` Willem de Bruijn [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=willemdebruijn.kernel.fd5e56c96ff3@gmail.com \
    --to=willemdebruijn.kernel@gmail.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=joe@dama.to \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    --cc=willemb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.