selftests: txtimestamp: add flag for timestamp validation tolerance.
authorJian Yang <jianyang@google.com>
Mon, 27 Jul 2020 21:14:38 +0000 (14:14 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Jul 2020 23:38:51 +0000 (16:38 -0700)
The txtimestamp selftest sets a fixed 500us tolerance. This value was
arrived at experimentally. Some platforms have higher variances. Make
this adjustable by adding the following flag:

-t N: tolerance (usec) for timestamp validation.

Signed-off-by: Jian Yang <jianyang@google.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/txtimestamp.c

index 011b0da6b0330b708cd81f97a5067fc317c37420..490a8cca708a81811a09b6ccf7ecc690ea02d60a 100644 (file)
@@ -64,6 +64,7 @@ static int cfg_payload_len = 10;
 static int cfg_poll_timeout = 100;
 static int cfg_delay_snd;
 static int cfg_delay_ack;
+static int cfg_delay_tolerance_usec = 500;
 static bool cfg_show_payload;
 static bool cfg_do_pktinfo;
 static bool cfg_busy_poll;
@@ -152,11 +153,12 @@ static void validate_key(int tskey, int tstype)
 
 static void validate_timestamp(struct timespec *cur, int min_delay)
 {
-       int max_delay = min_delay + 500 /* processing time upper bound */;
        int64_t cur64, start64;
+       int max_delay;
 
        cur64 = timespec_to_us64(cur);
        start64 = timespec_to_us64(&ts_usr);
+       max_delay = min_delay + cfg_delay_tolerance_usec;
 
        if (cur64 < start64 + min_delay || cur64 > start64 + max_delay) {
                fprintf(stderr, "ERROR: %lu us expected between %d and %d\n",
@@ -683,6 +685,7 @@ static void __attribute__((noreturn)) usage(const char *filepath)
                        "  -r:   use raw\n"
                        "  -R:   use raw (IP_HDRINCL)\n"
                        "  -S N: usec to sleep before reading error queue\n"
+                       "  -t N: tolerance (usec) for timestamp validation\n"
                        "  -u:   use udp\n"
                        "  -v:   validate SND delay (usec)\n"
                        "  -V:   validate ACK delay (usec)\n"
@@ -697,7 +700,7 @@ static void parse_opt(int argc, char **argv)
        int c;
 
        while ((c = getopt(argc, argv,
-                               "46bc:CeEFhIl:LnNp:PrRS:uv:V:x")) != -1) {
+                               "46bc:CeEFhIl:LnNp:PrRS:t:uv:V:x")) != -1) {
                switch (c) {
                case '4':
                        do_ipv6 = 0;
@@ -760,6 +763,9 @@ static void parse_opt(int argc, char **argv)
                case 'S':
                        cfg_sleep_usec = strtoul(optarg, NULL, 10);
                        break;
+               case 't':
+                       cfg_delay_tolerance_usec = strtoul(optarg, NULL, 10);
+                       break;
                case 'u':
                        proto_count++;
                        cfg_proto = SOCK_DGRAM;