From nobody Sun Jun 14 12:45:21 2026 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFBC4346A0A for ; Fri, 3 Apr 2026 23:32:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259167; cv=none; b=n3HfE88zkPfdx7HO10GT7/keUbhkQuwiJ2Ou7gkb7LGqLjjstoyjl6ou78qnVYG+03F+26EOz+qNaFCgLm/aoRyhOVSmeMlqCt4J5ZEgAgbHvmkpeQ8zTyrNhJyLXuvMXPxe7A9/UxokHACpr/2WC1W2lNmZ82F/fbUzJWsC5S4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259167; c=relaxed/simple; bh=J4kk90yuxxA42SHtt+Ov+rBowYEAkbWXfw9oGJun+BU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M62gKo+4TYg3whPzp5TCvsQz2b0QK2JDDPbAAjHMPau/Bh9DlGJOidelup6dohooYG98GSP5LUkgzGNX0J6nay8UQghIX3OiSyXUWuXdGNXHWiDnEmRD7rNOHmK4bsyo2Hc7Lf6k0Sd8UYXeKwdhhIwGNPsBiwQCHnqfLtBDn/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=tsb+mveU; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="tsb+mveU" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-82ce49785a0so1005664b3a.2 for ; Fri, 03 Apr 2026 16:32:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1775259166; x=1775863966; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+/znVnDeXjnXzaaF0D3QPKaN1Wp2D3MlfOCy7zxinTk=; b=tsb+mveUsa7Pmiu5IYzZiavh8HSMrGf6c2vj6hg3GZ/H2NTGLqYJumUc1n99wxA/sC 93DY+s6zmB+dvNWOJJpJRMeV8xYVwI0LLyqhzYkj94XMaKJJbTy2FkxmUx6Jv8c6Wp61 BFXxcMcI04H3eBnjZYhw1ywPK0f/Y5HblnXon6y0sLUfcbpLhSHQBUpUepUZPzcy0zvi fgAM8eleeBXccIJd55CSBP9GI2vTRTtwx5aIFn1BT1BZPBO1Lw6IVnmM20NMDE25kaE+ 13SUhC8Yr1XMle9PZYLhgkB/vu+uHviRqFABNvMxI5S1VXAFngS10BUFOuHSu4x9KSph vdjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775259166; x=1775863966; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+/znVnDeXjnXzaaF0D3QPKaN1Wp2D3MlfOCy7zxinTk=; b=I2r0vB17Vz7HKQQamG5RHc5T+k18pVKsOpE5NRPDxPR5PTsVstr9BeLHv0tGkfw5S8 /lL8rwG9hIda120vwkwgA4rZC0QDJ5cItSqjQUCeOml/5Dm8SoJkMgecwFzXHp0+GtY3 txnaChKHQloGcbb1qFsOU9JSnMO8P7Ho8+N+fxg1QQ0/onLqilwgvt9ktfFUAOFA4HyF UO40DhXIjW1kmbWPOXtT4EQXdhlu+cpaPEbLMIDRwJN/fkbF4QBQr9SzJroiryRujND+ qU13TRQNah7iD02ruDiiQVjzWhwXZVVTcht5GClCDblRmhu/2ErcvSIqqHZgJ264WQwP JrKw== X-Forwarded-Encrypted: i=1; AJvYcCWMIGbxUEjhQrTcJ5jWR/Fo5WQPF8xY36J5lQIP7CEuoopEkkHIpTJ4Gad8X2mybSiswoafLKXbe83LVLM=@vger.kernel.org X-Gm-Message-State: AOJu0YwshOsTFAyJv+I8LYw4ylY4RbuaZ8RnPPJnVYxFJ51ZnorzODYl 47ZmZdprsURntLJXFcxjTy/6nlAcs4evh9FUcknfV6CsrPXGl39kSAMxDSNt3fFnEkn5s5exFiz XyMWUoj0= X-Gm-Gg: AeBDiesJCtlTV6YQnoslA8W+hb9ALa/oD9AsEVEpn5GzCo4E/beGc4w+MYOo7pjF+Wb qvWDQBsifAa/no93QRrabrQXzf6hsbGjEDH1ceW66/Ujl0/pQoA71HeF34Bn9Tcdj72PK7GwUpO T3HoXbY3k/ldIdDkwtSoIeN8ffR5NYQ3lrLKXBcc3VF3yeoF1Nz+wUbwsm+w1pIj/EqOQCX7Msc pw5/GLzYM4SMz4qUvILGhjEo/+gtejEo/7K+Rus8wdHVimY+zH7mHfi6UyqshSNog0yFQc39fxO uo3UI7gpSp9Iw+CPYqpNCEr4ZKKnv3FcZdTJlkVVCDaMMlncXticMplQVi6IbzAKrr4Sy8qHycE MjaQnJTHjWOueDd6A26pEyjhVdTk8NpHktoDmtXQYu1a40RImUu8VTTTYf+8koiwD+6ND7cPru6 bCPaOp X-Received: by 2002:a05:6a00:4b4c:b0:81f:ac78:ed22 with SMTP id d2e1a72fcca58-82d0db53f18mr5221546b3a.37.1775259166173; Fri, 03 Apr 2026 16:32:46 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:5e::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82cf9c3d439sm7229853b3a.35.2026.04.03.16.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 16:32:45 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: andrew+netdev@lunn.ch, linux-kernel@vger.kernel.org, willemb@google.com, Joe Damato , linux-kselftest@vger.kernel.org Subject: [net-next v2 1/3] selftests/net: Test PACKET_STATISTICS Date: Fri, 3 Apr 2026 16:32:36 -0700 Message-ID: <20260403233240.178948-2-joe@dama.to> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260403233240.178948-1-joe@dama.to> References: <20260403233240.178948-1-joe@dama.to> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the existing packet socket test to include a test for the sockopt PACKET_STATISTICS. Signed-off-by: Joe Damato --- tools/testing/selftests/net/psock_snd.c | 32 ++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/psock_snd.c b/tools/testing/selfte= sts/net/psock_snd.c index edf1e6f80d41..5be481a3d2bd 100644 --- a/tools/testing/selftests/net/psock_snd.c +++ b/tools/testing/selftests/net/psock_snd.c @@ -359,6 +359,34 @@ static void parse_opts(int argc, char **argv) error(1, 0, "option gso (-g) requires csum offload (-c)"); } =20 +static void check_packet_stats(int fd) +{ + struct tpacket_stats st =3D {}; + socklen_t len =3D sizeof(st); + + if (getsockopt(fd, SOL_PACKET, PACKET_STATISTICS, &st, &len)) + error(1, errno, "getsockopt packet statistics"); + + if (st.tp_packets !=3D 1) + error(1, 0, "stats: tp_packets %u !=3D 1", st.tp_packets); + + if (st.tp_drops !=3D 0) + error(1, 0, "stats: tp_drops %u !=3D 0", st.tp_drops); + + /* verify clear on read */ + memset(&st, 0xff, sizeof(st)); + len =3D sizeof(st); + + if (getsockopt(fd, SOL_PACKET, PACKET_STATISTICS, &st, &len)) + error(1, errno, "getsockopt packet statistics"); + + if (st.tp_packets !=3D 0) + error(1, 0, "stats: tp_packets %u !=3D 0 after clear", st.tp_packets); + + if (st.tp_drops !=3D 0) + error(1, 0, "stats: tp_drops %u !=3D 0 after clear", st.tp_drops); +} + static void run_test(void) { int fdr, fds, total_len; @@ -369,9 +397,11 @@ static void run_test(void) total_len =3D do_tx(); =20 /* BPF filter accepts only this length, vlan changes MAC */ - if (cfg_payload_len =3D=3D DATA_LEN && !cfg_use_vlan) + if (cfg_payload_len =3D=3D DATA_LEN && !cfg_use_vlan) { do_rx(fds, total_len - sizeof(struct virtio_net_hdr), tbuf + sizeof(struct virtio_net_hdr)); + check_packet_stats(fds); + } =20 do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len); =20 --=20 2.52.0 From nobody Sun Jun 14 12:45:21 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9132C390C99 for ; Fri, 3 Apr 2026 23:32:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259169; cv=none; b=Vp46GeSveM0Mq5mzRJiRtIB/Wit7bZr+8Lu3jnqyDzex/x64tNOYR7AmkAQ5sh6wOoVv1tfE3Ey10tvXm6xFmbpI3zxGdT1kCJ2N1M6dsReCQQIYzDCeJ/q7Vq4o16WkFEz2iGTXgTNYIWhc5T2pjPQofaCtrkIEK32Ig00t3Ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259169; c=relaxed/simple; bh=8u6Vcz4YEaqdwMjUhYyBFSVV6aDirjiazJWuyGBCAys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QCoJG9Hi1mG1UQM1HTOTyommSCzhUjBGb5Gu+pFdfao+cvy+aoBEHGIXBPE3a3yS3NWBr8Yly49AxaAoVpBdsbFHgXUDwn3AjKu2yXfKH2LGVHv3xb8LWNv7y6WJmmXgy3y1gzMjMWJ9cEs6mv00j4J0bDtLmM1RAKP46XVn2cs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=gmEdLujT; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="gmEdLujT" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2aae146b604so13909215ad.3 for ; Fri, 03 Apr 2026 16:32:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1775259168; x=1775863968; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ENmI8Ny0OErVg3hwraYcnSl67J/rk4Ki/13t8pRcNeM=; b=gmEdLujT/oYX1U0zkkB5QfBKgnGzae9znyVcJS+mdzOpYcSy3eLu3O0Ic1KlRaCpS2 nYwWhAizM9QhYIw3432SNbc1OgsHplYHEkAcPuUC9ftNQUAX0ePdM7EmaJPq76pdKhsw hoTcI4sX8bY5IPHfdnlZf8R10thUvrAcawtwkfZPN+V+uXqScNA8eGB3wIOeUqlniErA C73JAEENZQGnm6IlahInD0Kj5XiCMeBmZhbKBkUJ+a4ddPJQKbdUzYjy7lf9Vu3gzDc+ OhxHben3W/sTmL+1dQfEz5djq7OKtLX/aDxtGKzsJtW56bCSjJLX/he3LfAKelVTk99e 53Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775259168; x=1775863968; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ENmI8Ny0OErVg3hwraYcnSl67J/rk4Ki/13t8pRcNeM=; b=Bivyay7jPGX/9zuF1+5xmyZZ/gDocHOuDZ71dBm0sLaLg3oXnkn30fWrT/xicqK5sF sg3M2MBfyXDzEoQVvFTU/iJ7FzRUjN9MxHINH5qQbRvFl0/thC1WEMUMhIJOm4Mh3lBT 0JSQEdxRcTb9M0WvrU74QadO5lbEIdQHLIMImf3DfQ207KuRRNi5S9rpBiVVxZxUq4Rs 9W7Mg/ZQcs9VFCXaD3/25Ce/vmfgGPyPjhrioyzSJqB4DTUN3L1ktq5RCloVWiMrHDjs KvTvRK29VwGEJILaOJm1o/RmufaGtCDqpb9VIGFeVuNqKnZexzvVQ+uXd/vxgOYrXLbY jMzA== X-Forwarded-Encrypted: i=1; AJvYcCULjyYxfGWCi5ODJczSLR2x+ilUx+Cv4vsAQLuja9OIogaqvSEdZAtZUdPDhMhaG81JSFMRbXoLG0PQWZ8=@vger.kernel.org X-Gm-Message-State: AOJu0YyMvUv0dkDS/HuxSUYM/bnjPGPS1r+I73fNHe5VGBtA4YRGB+29 4SvuruqNWDsySzppyEi3UN5g9fdPVz88hzpYx0pFzAo9l6Usi6hdx2aHA1vuZPl9SAc= X-Gm-Gg: AeBDiesgSf/L5giQlvvBsEJVqHc4YqYRB8rqwpQreCcaOE49iQZGLpzDwfsLdq++Di1 bl2XHZn9J12EBhogEv0yQeqhe+r/c+mVkHadAdGd4hMs4nuBBMOKUK4GxHs/hrDRlHP+EWkOcFB nTacUZhpxTPEN03I8q1XmP+XA934AaTYgmqKRsf1/09HoQ3VWeNPHrDcwb++Nfyy0EH8i27eEFB Grw1m+YtuXdyWrzaQ4bA95FmsS2d5PkMl5xyS7aS8YF6d4iVXjgJaYpcmhV+fX9i8hf8PcrKSsR MPv+SzK+yFpjA2hyqGuZ8QIZi7IEX/oWSH890Hh+z7riANAphCCLXvmIReJRb/hioD/JMahYSFX BtU6opmxMJ3X+5JKJf+IWcrluGAYEbiMqJKk8RQwzcHDDgGNTZpvnVUsgldUf6QMa5ewNm7ho68 WWbx0= X-Received: by 2002:a17:903:b0e:b0:2b2:52af:52b8 with SMTP id d9443c01a7336-2b28184a5cfmr45941305ad.11.1775259168002; Fri, 03 Apr 2026 16:32:48 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:6::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27478cb4fsm75994305ad.29.2026.04.03.16.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 16:32:47 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: andrew+netdev@lunn.ch, linux-kernel@vger.kernel.org, willemb@google.com, Joe Damato , linux-kselftest@vger.kernel.org Subject: [net-next v2 2/3] selftests/net: Test PACKET_STATISTICS drops Date: Fri, 3 Apr 2026 16:32:37 -0700 Message-ID: <20260403233240.178948-3-joe@dama.to> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260403233240.178948-1-joe@dama.to> References: <20260403233240.178948-1-joe@dama.to> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend psock_snd to test drops by setting a tiny receive buffer and sending a large burst of packets. Signed-off-by: Joe Damato --- tools/testing/selftests/net/psock_snd.c | 48 ++++++++++++++++++++---- tools/testing/selftests/net/psock_snd.sh | 5 +++ 2 files changed, 46 insertions(+), 7 deletions(-) v2: - Remove do_tx argument and use global cfg_drop instead diff --git a/tools/testing/selftests/net/psock_snd.c b/tools/testing/selfte= sts/net/psock_snd.c index 5be481a3d2bd..81096df5cffc 100644 --- a/tools/testing/selftests/net/psock_snd.c +++ b/tools/testing/selftests/net/psock_snd.c @@ -39,6 +39,7 @@ static bool cfg_use_gso; static bool cfg_use_qdisc_bypass; static bool cfg_use_vlan; static bool cfg_use_vnet; +static bool cfg_drop; =20 static char *cfg_ifname =3D "lo"; static int cfg_mtu =3D 1500; @@ -49,6 +50,8 @@ static uint16_t cfg_port =3D 8000; /* test sending up to max mtu + 1 */ #define TEST_SZ (sizeof(struct virtio_net_hdr) + ETH_HLEN + ETH_MAX_MTU + = 1) =20 +#define BURST_CNT (1000) + static char tbuf[TEST_SZ], rbuf[TEST_SZ]; =20 static unsigned long add_csum_hword(const uint16_t *start, int num_u16) @@ -212,13 +215,14 @@ static void do_send(int fd, char *buf, int len) if (ret !=3D len) error(1, 0, "write: %u %u", ret, len); =20 - fprintf(stderr, "tx: %u\n", ret); + if (!cfg_drop) + fprintf(stderr, "tx: %u\n", ret); } =20 static int do_tx(void) { const int one =3D 1; - int fd, len; + int i, fd, len; =20 fd =3D socket(PF_PACKET, cfg_use_dgram ? SOCK_DGRAM : SOCK_RAW, 0); if (fd =3D=3D -1) @@ -242,6 +246,10 @@ static int do_tx(void) =20 do_send(fd, tbuf, len); =20 + if (cfg_drop) + for (i =3D 0; i < BURST_CNT; i++) + do_send(fd, tbuf, len); + if (close(fd)) error(1, errno, "close t"); =20 @@ -290,6 +298,7 @@ static void do_rx(int fd, int expected_len, char *expec= ted) static int setup_sniffer(void) { struct timeval tv =3D { .tv_usec =3D 100 * 1000 }; + const int one =3D 1; int fd; =20 fd =3D socket(PF_PACKET, SOCK_RAW, 0); @@ -299,6 +308,10 @@ static int setup_sniffer(void) if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) error(1, errno, "setsockopt rcv timeout"); =20 + if (cfg_drop) + if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &one, sizeof(one))) + error(1, errno, "setsockopt SO_RCVBUF"); + pair_udp_setfilter(fd); do_bind(fd); =20 @@ -309,7 +322,7 @@ static void parse_opts(int argc, char **argv) { int c; =20 - while ((c =3D getopt(argc, argv, "bcCdgl:qt:vV")) !=3D -1) { + while ((c =3D getopt(argc, argv, "bcCdDgl:qt:vV")) !=3D -1) { switch (c) { case 'b': cfg_use_bind =3D true; @@ -323,6 +336,9 @@ static void parse_opts(int argc, char **argv) case 'd': cfg_use_dgram =3D true; break; + case 'D': + cfg_drop =3D true; + break; case 'g': cfg_use_gso =3D true; break; @@ -367,11 +383,23 @@ static void check_packet_stats(int fd) if (getsockopt(fd, SOL_PACKET, PACKET_STATISTICS, &st, &len)) error(1, errno, "getsockopt packet statistics"); =20 - if (st.tp_packets !=3D 1) - error(1, 0, "stats: tp_packets %u !=3D 1", st.tp_packets); + if (cfg_drop) { + /* PACKET_STATISTICS reports all packets seen (including + * drops) in tp_packets + */ + if (st.tp_packets < st.tp_drops) + error(1, 0, "stats: tp_packets %u < tp_drops %u", + st.tp_packets, st.tp_drops); =20 - if (st.tp_drops !=3D 0) - error(1, 0, "stats: tp_drops %u !=3D 0", st.tp_drops); + if (st.tp_drops =3D=3D 0) + error(1, 0, "stats: expected drops but tp_drops =3D=3D 0"); + } else { + if (st.tp_packets !=3D 1) + error(1, 0, "stats: tp_packets %u !=3D 1", st.tp_packets); + + if (st.tp_drops !=3D 0) + error(1, 0, "stats: tp_drops %u !=3D 0", st.tp_drops); + } =20 /* verify clear on read */ memset(&st, 0xff, sizeof(st)); @@ -396,6 +424,11 @@ static void run_test(void) =20 total_len =3D do_tx(); =20 + if (cfg_drop) { + check_packet_stats(fds); + goto out; + } + /* BPF filter accepts only this length, vlan changes MAC */ if (cfg_payload_len =3D=3D DATA_LEN && !cfg_use_vlan) { do_rx(fds, total_len - sizeof(struct virtio_net_hdr), @@ -405,6 +438,7 @@ static void run_test(void) =20 do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len); =20 +out: if (close(fds)) error(1, errno, "close s"); if (close(fdr)) diff --git a/tools/testing/selftests/net/psock_snd.sh b/tools/testing/selft= ests/net/psock_snd.sh index 1cbfeb5052ec..b6ef12fad5d5 100755 --- a/tools/testing/selftests/net/psock_snd.sh +++ b/tools/testing/selftests/net/psock_snd.sh @@ -92,4 +92,9 @@ echo "raw gso max size" echo "raw gso max size + 1 (expected to fail)" (! ./in_netns.sh ./psock_snd -v -c -g -l "${max_mss_exceeds}") =20 +# test drops statistics + +echo "test drops statistics" +./in_netns.sh ./psock_snd -D + echo "OK. All tests passed" --=20 2.52.0 From nobody Sun Jun 14 12:45:21 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5086E3909A2 for ; Fri, 3 Apr 2026 23:32:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259171; cv=none; b=Z9+3E8iWCZkprLzoxNlIP6FnFmMSX66N2NQ82h4PlB11qadAjVNqp0nvib1+UMqyk7RTYiu35kaZ3jOI+LlyQov2cQNbyLU6Jpxh7wd92jMEi/p6ekdmvDmpJtbfKvjCN1lI42WscbO+Um//UYLkSvRXmRhKmMO4dCNM/hpcR14= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775259171; c=relaxed/simple; bh=eu5jZunTrftltps3rQrKaYDal1uU6Yu6GQaFaOvmB3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sAIe9h71lf/aF6rRbzIRDPE7P1Lsc1XddRQVRZAHt2Bsw4Z6a7Ha5u9bZdvwAv20XNNS74hyTDc6a/BrhnAzou5tBl0cFLp78/1piHyCuRgoI0Axu/LfsO4QEzhjU4DaE6LFfw5cm0cCmPityxN0D8YVipfyQkjQepTP65unyVY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=vwmasTSr; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="vwmasTSr" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2b0afa0210bso10887125ad.2 for ; Fri, 03 Apr 2026 16:32:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1775259170; x=1775863970; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ofx4AIZ9/cOO66oovYm6JD1XQUXd4lYsRtHMoCpiyu4=; b=vwmasTSrwDgJrVNAg/v98XxAetB1e8iW2pM3O7x3s+JnMPIFbDtyc1NQLyg53bnwRr XRNID9lousc98rEcvqkythqlWAz89Ci3k/pKGVGB4FzP6p6d7MZM9cwRNF0sn+t/FCVs QjRaMzhyAUe+lDia39mnKIU5wuwDnAJAQ9z/PEBLNxo/QQuACl1bw7nQu7nia1DuHBWS 3Ku6BAhTjGZimw3nMRM0yPq92Im9ZYxX0/nGYUDlmL6bSynNS6eMq86tBCRUbzM4LeW7 /SAVg+EvyvHBd94Y3v1ZGaLH/T998svDNtGXiIIoqSV/g+4DXUH55PtOs9QTlHImVoel BUQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775259170; x=1775863970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Ofx4AIZ9/cOO66oovYm6JD1XQUXd4lYsRtHMoCpiyu4=; b=adn3HOkth++NALlQUlQ3Xg12wnrWE+oweX79GebqaBpdXlRu6LqXo/DBAaZa/bT+9Q Nk7avVUWBkg4Y6ElfI9CGO+D2/94lAtyqSMW+CfD5WkDR9GNm3vnmTGGaJjVbz0IgPHf KkVpqTsAscFaFUUqa0DFJQ1AukVC2Hb3KlRO5WsowCRxnX/v530t1En69ibk9bjbK9wl SIYOE7ihGuhsbDwtsmhUb5T8QNS9lTAjD87yku6ig56G0e/kA4r8x2t7N6HIVn4g00uu QCdsPsIsoT67DQlU/bi/gzYQUo+tE73S+arZkA/W25hqXnF/hexn9HhncNpPqEK7IEFJ v3Dw== X-Forwarded-Encrypted: i=1; AJvYcCVYsIvou7BsY2f3Hk6cIOZrTLn+WeIKkyh+4Bs8W4NilnzSoZwxMWZcgloqwQLbiMQhjRJm7byfJMuOE+s=@vger.kernel.org X-Gm-Message-State: AOJu0YxzgwqlsPt4guoYjcc6FSo02NKq4MA2nwiwnty37XYZXEVqWilr VpU+RNwRPnXqrj93ZUAO0/rE0H2GEX80CgoqBRS7+1qemw1OQyxsMd1yNac0NSdqgj0= X-Gm-Gg: AeBDieuI5vd0vZiq7qeiGZTjY14CXzQqrZ2d/etLtLEIYGn5xKLsqw0q54qjh46tb+i R4jSPDBF5XTnXauCxbgbdkcncj6ZpJn7ZjzgTBaZqeJiLWxTBimz6Nbqle+dR3A61giigMH7S29 Ondh/dbv+QgBMS1cS9jT+EuTi4tzjq8ByhkkvdcNs5rzlhoI795g+jEXM2UMoCS7fu6eIPpD6p2 AzqKo2LOt39ZueSe7OXt6gIaoMBjMdg/W7yh3Q94Qha1uB9gynMNqSz110LLv74t1U/CpnLtS8S 2xAA0Gjv7TasTijx+fiFgLGpjdfpEqhOx2QSnUH8d3G/wT33GZGFE86AAnj1sGXlwOSHvqaouLh bqm4z52o8aTVWnKGEL68CEDoKH3dOrL+l/NJVIuSUpkYzJps34xYDA7EzDU9aa4jbwh5x2Nh8nd MqDKK6 X-Received: by 2002:a17:903:4b4c:b0:2ae:4cb8:484a with SMTP id d9443c01a7336-2b28182068amr49451485ad.17.1775259169762; Fri, 03 Apr 2026 16:32:49 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:73::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b27472d233sm70066325ad.2.2026.04.03.16.32.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 16:32:49 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: andrew+netdev@lunn.ch, linux-kernel@vger.kernel.org, willemb@google.com, Joe Damato , linux-kselftest@vger.kernel.org Subject: [net-next v2 3/3] selftests/net: Test PACKET_AUXDATA Date: Fri, 3 Apr 2026 16:32:38 -0700 Message-ID: <20260403233240.178948-4-joe@dama.to> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260403233240.178948-1-joe@dama.to> References: <20260403233240.178948-1-joe@dama.to> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the packet socket selftest, adding a recvmsg path, to test PACKET_AUXDATA. Check basic attributes of tpacket_auxdata. Signed-off-by: Joe Damato --- tools/testing/selftests/net/psock_snd.c | 67 ++++++++++++++++++++++-- tools/testing/selftests/net/psock_snd.sh | 5 ++ 2 files changed, 67 insertions(+), 5 deletions(-) v2: - Add is_psock bool argument to do_rx. - Factor out aux data check into its own function for readability. diff --git a/tools/testing/selftests/net/psock_snd.c b/tools/testing/selfte= sts/net/psock_snd.c index 81096df5cffc..5464317c1764 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; =20 static char *cfg_ifname =3D "lo"; static int cfg_mtu =3D 1500; @@ -279,11 +280,54 @@ static int setup_rx(void) return fd; } =20 -static void do_rx(int fd, int expected_len, char *expected) +static void check_aux_data(struct cmsghdr *cmsg, int expected_len) { + struct tpacket_auxdata *adata; + + if (!cmsg) + error(1, 0, "auxdata null"); + + if (cmsg->cmsg_level !=3D SOL_PACKET) + error(1, 0, "cmsg_level !=3D SOL_PACKET"); + + if (cmsg->cmsg_type !=3D PACKET_AUXDATA) + error(1, 0, "cmsg_type !=3D PACKET_AUXDATA"); + + adata =3D (struct tpacket_auxdata *)CMSG_DATA(cmsg); + + if (adata->tp_net !=3D ETH_HLEN) + error(1, 0, "cmsg tp_net !=3D ETH_HLEN"); + + if (adata->tp_len !=3D expected_len) + error(1, 0, "cmsg tp_len !=3D %u", expected_len); + + if (adata->tp_snaplen !=3D expected_len) + error(1, 0, "cmsg tp_snaplen !=3D %u", expected_len); +} + +static void do_rx(int fd, int expected_len, char *expected, bool is_psock) +{ + bool aux =3D is_psock && cfg_aux_data; + char cmsg_buf[1024] =3D {}; + struct msghdr msg =3D {}; + struct iovec iov[1]; int ret; =20 - ret =3D recv(fd, rbuf, sizeof(rbuf), 0); + if (aux) { + iov[0].iov_base =3D rbuf; + iov[0].iov_len =3D sizeof(rbuf); + + msg.msg_iov =3D iov; + msg.msg_iovlen =3D 1; + + msg.msg_control =3D cmsg_buf; + msg.msg_controllen =3D sizeof(cmsg_buf); + + ret =3D recvmsg(fd, &msg, 0); + } else { + ret =3D recv(fd, rbuf, sizeof(rbuf), 0); + } + if (ret =3D=3D -1) error(1, errno, "recv"); if (ret !=3D expected_len) @@ -292,6 +336,12 @@ static void do_rx(int fd, int expected_len, char *expe= cted) if (memcmp(rbuf, expected, ret)) error(1, 0, "recv: data mismatch"); =20 + if (aux) { + struct cmsghdr *cmsg =3D CMSG_FIRSTHDR(&msg); + + check_aux_data(cmsg, expected_len); + } + fprintf(stderr, "rx: %u\n", ret); } =20 @@ -312,6 +362,10 @@ static int setup_sniffer(void) if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &one, sizeof(one))) error(1, errno, "setsockopt SO_RCVBUF"); =20 + 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); =20 @@ -322,8 +376,11 @@ static void parse_opts(int argc, char **argv) { int c; =20 - while ((c =3D getopt(argc, argv, "bcCdDgl:qt:vV")) !=3D -1) { + while ((c =3D getopt(argc, argv, "abcCdDgl:qt:vV")) !=3D -1) { switch (c) { + case 'a': + cfg_aux_data =3D true; + break; case 'b': cfg_use_bind =3D true; break; @@ -432,11 +489,11 @@ static void run_test(void) /* BPF filter accepts only this length, vlan changes MAC */ if (cfg_payload_len =3D=3D DATA_LEN && !cfg_use_vlan) { do_rx(fds, total_len - sizeof(struct virtio_net_hdr), - tbuf + sizeof(struct virtio_net_hdr)); + tbuf + sizeof(struct virtio_net_hdr), true); check_packet_stats(fds); } =20 - do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len); + do_rx(fdr, cfg_payload_len, tbuf + total_len - cfg_payload_len, false); =20 out: if (close(fds)) diff --git a/tools/testing/selftests/net/psock_snd.sh b/tools/testing/selft= ests/net/psock_snd.sh index b6ef12fad5d5..111c9e2f0d21 100755 --- a/tools/testing/selftests/net/psock_snd.sh +++ b/tools/testing/selftests/net/psock_snd.sh @@ -97,4 +97,9 @@ echo "raw gso max size + 1 (expected to fail)" echo "test drops statistics" ./in_netns.sh ./psock_snd -D =20 +# test aux data + +echo "test aux data" +./in_netns.sh ./psock_snd -a + echo "OK. All tests passed" --=20 2.52.0