[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <willemdebruijn.kernel.2bc58f76bed9b@gmail.com>
Date: Tue, 02 Sep 2025 14:34:36 -0400
From: Willem de Bruijn <willemdebruijn.kernel@...il.com>
To: Richard Gobert <richardbgobert@...il.com>,
netdev@...r.kernel.org
Cc: davem@...emloft.net,
edumazet@...gle.com,
kuba@...nel.org,
pabeni@...hat.com,
horms@...nel.org,
corbet@....net,
saeedm@...dia.com,
tariqt@...dia.com,
mbloch@...dia.com,
leon@...nel.org,
ecree.xilinx@...il.com,
dsahern@...nel.org,
ncardwell@...gle.com,
kuniyu@...gle.com,
shuah@...nel.org,
sdf@...ichev.me,
aleksander.lobakin@...el.com,
florian.fainelli@...adcom.com,
willemdebruijn.kernel@...il.com,
alexander.duyck@...il.com,
linux-kernel@...r.kernel.org,
linux-net-drivers@....com,
Richard Gobert <richardbgobert@...il.com>
Subject: Re: [PATCH net-next v4 5/5] selftests/net: test ipip packets in
gro.sh
Richard Gobert wrote:
> Add IPIP test-cases to the GRO selftest.
>
> This selftest already contains IP ID test-cases. They are now
> also tested for encapsulated packets.
>
> This commit also fixes ipip packet generation in the test.
>
> Signed-off-by: Richard Gobert <richardbgobert@...il.com>
> ---
> tools/testing/selftests/net/gro.c | 49 ++++++++++++++++++++++++------
> tools/testing/selftests/net/gro.sh | 5 +--
> 2 files changed, 42 insertions(+), 12 deletions(-)
>
> diff --git a/tools/testing/selftests/net/gro.c b/tools/testing/selftests/net/gro.c
> index 3d4a82a2607c..451dc1c1eac5 100644
> --- a/tools/testing/selftests/net/gro.c
> +++ b/tools/testing/selftests/net/gro.c
> @@ -93,6 +93,7 @@ static bool tx_socket = true;
> static int tcp_offset = -1;
> static int total_hdr_len = -1;
> static int ethhdr_proto = -1;
> +static bool ipip;
> static const int num_flush_id_cases = 6;
>
> static void vlog(const char *fmt, ...)
> @@ -114,7 +115,9 @@ static void setup_sock_filter(int fd)
> int ipproto_off, opt_ipproto_off;
> int next_off;
>
> - if (proto == PF_INET)
> + if (ipip)
> + next_off = sizeof(struct iphdr) + offsetof(struct iphdr, protocol);
> + else if (proto == PF_INET)
> next_off = offsetof(struct iphdr, protocol);
> else
> next_off = offsetof(struct ipv6hdr, nexthdr);
> @@ -244,7 +247,7 @@ static void fill_datalinklayer(void *buf)
> eth->h_proto = ethhdr_proto;
> }
>
> -static void fill_networklayer(void *buf, int payload_len)
> +static void fill_networklayer(void *buf, int payload_len, int protocol)
> {
> struct ipv6hdr *ip6h = buf;
> struct iphdr *iph = buf;
> @@ -254,7 +257,7 @@ static void fill_networklayer(void *buf, int payload_len)
>
> ip6h->version = 6;
> ip6h->payload_len = htons(sizeof(struct tcphdr) + payload_len);
> - ip6h->nexthdr = IPPROTO_TCP;
> + ip6h->nexthdr = protocol;
> ip6h->hop_limit = 8;
> if (inet_pton(AF_INET6, addr6_src, &ip6h->saddr) != 1)
> error(1, errno, "inet_pton source ip6");
> @@ -266,7 +269,7 @@ static void fill_networklayer(void *buf, int payload_len)
> iph->version = 4;
> iph->ihl = 5;
> iph->ttl = 8;
> - iph->protocol = IPPROTO_TCP;
> + iph->protocol = protocol;
> iph->tot_len = htons(sizeof(struct tcphdr) +
> payload_len + sizeof(struct iphdr));
> iph->frag_off = htons(0x4000); /* DF = 1, MF = 0 */
> @@ -313,9 +316,19 @@ static void create_packet(void *buf, int seq_offset, int ack_offset,
> {
> memset(buf, 0, total_hdr_len);
> memset(buf + total_hdr_len, 'a', payload_len);
> +
> fill_transportlayer(buf + tcp_offset, seq_offset, ack_offset,
> payload_len, fin);
> - fill_networklayer(buf + ETH_HLEN, payload_len);
> +
> + if (ipip) {
> + fill_networklayer(buf + ETH_HLEN + sizeof(struct iphdr),
> + payload_len, IPPROTO_TCP);
> + fill_networklayer(buf + ETH_HLEN, payload_len + sizeof(struct iphdr),
> + IPPROTO_IPIP);
if respinning, minor request to insert in the order of the headers,
so IPIP first.
> + } else {
> + fill_networklayer(buf + ETH_HLEN, payload_len, IPPROTO_TCP);
> + }
> +
> fill_datalinklayer(buf);
> }
>
> diff --git a/tools/testing/selftests/net/gro.sh b/tools/testing/selftests/net/gro.sh
> index 9e3f186bc2a1..d16ec365b3cf 100755
> --- a/tools/testing/selftests/net/gro.sh
> +++ b/tools/testing/selftests/net/gro.sh
> @@ -4,7 +4,7 @@
> readonly SERVER_MAC="aa:00:00:00:00:02"
> readonly CLIENT_MAC="aa:00:00:00:00:01"
> readonly TESTS=("data" "ack" "flags" "tcp" "ip" "large")
> -readonly PROTOS=("ipv4" "ipv6")
> +readonly PROTOS=("ipv4" "ipv6" "ipip")
> dev=""
> test="all"
> proto="ipv4"
> @@ -31,7 +31,8 @@ run_test() {
> 1>>log.txt
> wait "${server_pid}"
> exit_code=$?
> - if [[ ${test} == "large" && -n "${KSFT_MACHINE_SLOW}" && \
> + if [[ ( ${test} == "large" || ${protocol} == "ipip" ) && \
> + -n "${KSFT_MACHINE_SLOW}" && \
> ${exit_code} -ne 0 ]]; then
> echo "Ignoring errors due to slow environment" 1>&2
> exit_code=0
If you can no longer reproduce the need for this, and we see no
reason analytically why ipip would be more flaky than ipv4, then
please drop this. Else some future time we'll be scratching our heads
why this is here but will be afraid to touch it.
Powered by blists - more mailing lists