[Intel-wired-lan] [PATCH net-next v4 4/6] selftests: drv-net: refactor so_txtime errqueue handling
Willem de Bruijn <[email protected]> Thu, 6 Aug 2026 19:26:01 -0400
| Newsgroups | org.osuosl.intel-wired-lan,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
From: Willem de Bruijn <[email protected]> Prepare error queue handling for upcoming SO_EE_ORIGIN_TIMESTAMPING messages in the next patch in this series. Convert do_recv_errqueue_timeout into dispatcher do_recv_errqueue and move SO_EE_ORIGIN_TXTIME specific code into a separate helper. This will make the next patch a lot more readable. No functional changes. Signed-off-by: Willem de Bruijn <[email protected]> -- Changes v3 -> v4 - rename func to do_recv_errqueue_txtime --- .../testing/selftests/drivers/net/so_txtime.c | 66 ++++++++++--------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/tools/testing/selftests/drivers/net/so_txtime.c b/tools/testing/selftests/drivers/net/so_txtime.c index 55a386f3d1b9..f6f3253ed174 100644 --- a/tools/testing/selftests/drivers/net/so_txtime.c +++ b/tools/testing/selftests/drivers/net/so_txtime.c @@ -158,7 +158,40 @@ static void do_recv_verify_empty(int fdr) error(1, 0, "recv: not empty as expected (%d, %d)", ret, errno); } -static int do_recv_errqueue_timeout(int fdt) +static int do_recv_errqueue_txtime(struct sock_extended_err *err, + const char payload_char) +{ + const char *reason = NULL; + int64_t tstamp = 0; + + switch (err->ee_errno) { + case ECANCELED: + if (err->ee_code != SO_EE_CODE_TXTIME_MISSED) + error(1, 0, "errqueue: unknown ECANCELED %u\n", + err->ee_code); + reason = "missed txtime"; + break; + case EINVAL: + if (err->ee_code != SO_EE_CODE_TXTIME_INVALID_PARAM) + error(1, 0, "errqueue: unknown EINVAL %u\n", + err->ee_code); + reason = "invalid txtime"; + break; + default: + error(1, 0, "errqueue: errno %u code %u\n", + err->ee_errno, err->ee_code); + } + + tstamp = ((int64_t)err->ee_data) << 32 | err->ee_info; + tstamp -= (int64_t)glob_tstart; + tstamp /= 1000 * 1000; + fprintf(stderr, "send: pkt %c at %" PRId64 "ms dropped: %s\n", + payload_char, tstamp, reason); + + return 1; +} + +static int do_recv_errqueue(int fdt) { char control[CMSG_SPACE(sizeof(struct sock_extended_err)) + CMSG_SPACE(sizeof(struct sockaddr_in6))] = {0}; @@ -169,7 +202,6 @@ static int do_recv_errqueue_timeout(int fdt) struct msghdr msg = {0}; struct iovec iov = {0}; struct cmsghdr *cm; - int64_t tstamp = 0; iov.iov_base = data; iov.iov_len = sizeof(data); @@ -181,8 +213,6 @@ static int do_recv_errqueue_timeout(int fdt) msg.msg_controllen = sizeof(control); while (1) { - const char *reason = NULL; - ret = recvmsg(fdt, &msg, MSG_ERRQUEUE); if (ret == -1 && errno == EAGAIN) break; @@ -201,33 +231,9 @@ static int do_recv_errqueue_timeout(int fdt) if (err->ee_origin != SO_EE_ORIGIN_TXTIME) error(1, 0, "errqueue: origin 0x%x\n", err->ee_origin); - switch (err->ee_errno) { - case ECANCELED: - if (err->ee_code != SO_EE_CODE_TXTIME_MISSED) - error(1, 0, "errqueue: unknown ECANCELED %u\n", - err->ee_code); - reason = "missed txtime"; - break; - case EINVAL: - if (err->ee_code != SO_EE_CODE_TXTIME_INVALID_PARAM) - error(1, 0, "errqueue: unknown EINVAL %u\n", - err->ee_code); - reason = "invalid txtime"; - break; - default: - error(1, 0, "errqueue: errno %u code %u\n", - err->ee_errno, err->ee_code); - } - - tstamp = ((int64_t) err->ee_data) << 32 | err->ee_info; - tstamp -= (int64_t) glob_tstart; - tstamp /= 1000 * 1000; - fprintf(stderr, "send: pkt %c at %" PRId64 "ms dropped: %s\n", - data[ret - 1], tstamp, reason); - + num_tstamp += do_recv_errqueue_txtime(err, data[ret - 1]); msg.msg_flags = 0; msg.msg_controllen = sizeof(control); - num_tstamp++; } return num_tstamp; @@ -245,7 +251,7 @@ static void recv_errqueue_msgs(int fdt) error(1, errno, "poll"); if (ret && (pfd.revents & POLLERR)) - num_tstamp += do_recv_errqueue_timeout(fdt); + num_tstamp += do_recv_errqueue(fdt); if (num_tstamp == cfg_num_pkt) break; -- 2.55.0.679.g6767b8d81c-goog