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

Reply via email to