desactivate rrt tests
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 7 Oct 2025 17:29:11 +0000 (19:29 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 7 Oct 2025 17:29:11 +0000 (19:29 +0200)
attic/mq_rtt.c [new file with mode: 0644]
attic/pipe_rtt.c [new file with mode: 0644]
attic/udp_rtt.c [new file with mode: 0644]
mq_rtt.c [deleted file]
pipe_rtt.c [deleted file]
udp_rtt.c [deleted file]

diff --git a/attic/mq_rtt.c b/attic/mq_rtt.c
new file mode 100644 (file)
index 0000000..5f4ad41
--- /dev/null
@@ -0,0 +1,133 @@
+/* depend: */
+/* cflags: */
+/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fcntl.h>           /* For O_* constants */
+#include <sys/stat.h>        /* For mode constants */
+#include <mqueue.h>
+
+#include <signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "msg.h"
+#include "mtime.h"
+#include "test.h"
+
+/* global variables */
+
+dts_t *deltas = NULL;
+int nb_measurements = 0;
+
+char *message = "Message queue RTT";
+void (*usage_ext) (FILE *) = NULL;
+int (*parse_arg_ext) (char *) = NULL;
+
+#define MSGLEN 128
+#define MAXBUF 1024
+
+int ping (mqd_t mq)
+{
+
+    printf ("Sending ping...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        ts_t ts1;
+        sys_timestamp (&ts1);
+
+        if (mq_send (mq, msg, MSGLEN, 0) == -1) {
+            fprintf (stderr, "ping error: mq_send (%d)\n", i);
+            return 1;
+        }
+        //printf ("send '%s'\n", buffer);
+
+        if (mq_receive (mq, buffer, sizeof(buffer) - 1, NULL) == -1) {
+            fprintf (stderr, "ping error: mq_receive (%d)\n", i);
+            return 1;
+        }
+        //printf ("receive '%s'\n", buffer);
+
+        ts_t ts2;
+        sys_timestamp (&ts2);
+        deltas[i] = diff_timestamp (&ts2, &ts1);
+    }
+
+    return 0;
+}
+
+int pong (mqd_t mq)
+{
+
+    printf ("Responding pong...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        if (mq_receive (mq, buffer, sizeof(buffer) - 1, NULL) == -1) {
+            fprintf (stderr, "pong error: mq_receive (%d)\n", i);
+            return 1;
+        }
+        //printf ("receive '%s'\n", buffer);
+
+        if (mq_send (mq, msg, MSGLEN, 0) == -1) {
+            fprintf (stderr, "pong error: mq_send (%d)\n", i);
+            return 1;
+        }
+        //printf ("send '%s'\n", buffer);
+    }
+
+    return 0;
+}
+
+int test (dts_t *buffer, int nb)
+{
+
+    /* set global variables */
+
+    deltas = buffer;
+    nb_measurements = nb;
+
+    /* mq rtt test */
+
+    struct mq_attr attr;
+    attr.mq_flags = 0;
+    attr.mq_maxmsg = 5;
+    attr.mq_msgsize = MAXBUF;
+    attr.mq_curmsgs = 0;
+
+    mqd_t mq = mq_open ("/test_queue", O_CREAT | O_RDWR, 0644, &attr);
+    if (mq == -1) {
+        fprintf (stderr, "error: mq_open\n");
+        return 1;
+    }
+
+    pid_t pid = fork ();
+    if (pid == -1) {
+        fprintf (stderr, "error: fork\n");
+        return 1;
+    } else if (pid == 0) {
+        int rc = pong (mq);
+        mq_close (mq);
+        exit (rc);
+    }
+
+    int rc = ping (mq);
+    mq_close (mq);
+
+    if (kill (pid, SIGTERM) == 0) {
+        int wstatus;
+        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
+            fprintf (stderr, "error: waitpid\n");
+        }
+    }
+
+    return rc;
+}
diff --git a/attic/pipe_rtt.c b/attic/pipe_rtt.c
new file mode 100644 (file)
index 0000000..553f579
--- /dev/null
@@ -0,0 +1,126 @@
+/* depend: */
+/* cflags: */
+/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "msg.h"
+#include "mtime.h"
+#include "test.h"
+
+/* global variables */
+
+dts_t *deltas = NULL;
+int nb_measurements = 0;
+
+char *message = "Pipe RTT";
+void (*usage_ext) (FILE *) = NULL;
+int (*parse_arg_ext) (char *) = NULL;
+
+#define MSGLEN 128
+#define MAXBUF 1024
+
+int ping (int fdin, int fdout)
+{
+
+    printf ("Sending ping...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        ts_t ts1;
+        sys_timestamp (&ts1);
+
+        if (write (fdout, msg, MSGLEN) == -1) {
+            fprintf (stderr, "ping error: write (%d)\n", i);
+            return 1;
+        }
+        //printf ("write '%s'\n", buffer);
+
+        if (read (fdin, buffer, sizeof(buffer) - 1) == -1) {
+            fprintf (stderr, "ping error: read (%d)\n", i);
+            return 1;
+        }
+        //printf ("read '%s'\n", buffer);
+
+        ts_t ts2;
+        sys_timestamp (&ts2);
+        deltas[i] = diff_timestamp (&ts2, &ts1);
+    }
+
+    return 0;
+}
+
+int pong (int fdin, int fdout)
+{
+
+    printf ("Responding pong...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        if (read (fdin, buffer, sizeof(buffer) - 1) == -1) {
+            fprintf (stderr, "pong error: read (%d)\n", i);
+            return 1;
+        }
+        //printf ("read '%s'\n", buffer);
+
+        if (write (fdout, msg, MSGLEN) == -1) {
+            fprintf (stderr, "pong error: write (%d)\n", i);
+            return 1;
+        }
+        //printf ("write '%s'\n", buffer);
+    }
+
+    return 0;
+}
+
+int test (dts_t *buffer, int nb)
+{
+
+    /* set global variables */
+
+    deltas = buffer;
+    nb_measurements = nb;
+
+    /* pipe test */
+
+    int pipefd[2] = { 0 };
+
+    if (pipe (pipefd) == -1) {
+        fprintf (stderr, "error: pipe\n");
+        return 1;
+    }
+
+    pid_t pid = fork ();
+    if (pid == -1) {
+        fprintf (stderr, "error: fork\n");
+        return 1;
+    } else if (pid == 0) {
+        int rc = pong (pipefd[0], pipefd[1]);
+        close (pipefd[0]);
+        close (pipefd[1]);
+        exit (rc);
+    }
+
+    int rc = ping (pipefd[0], pipefd[1]);
+    close (pipefd[0]);
+    close (pipefd[1]);
+
+    if (kill (pid, SIGTERM) == 0) {
+        int wstatus;
+        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
+            fprintf (stderr, "error: waitpid\n");
+        }
+    }
+
+    return rc;
+}
diff --git a/attic/udp_rtt.c b/attic/udp_rtt.c
new file mode 100644 (file)
index 0000000..cbb545c
--- /dev/null
@@ -0,0 +1,219 @@
+/* depend: */
+/* cflags: */
+/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+#include "msg.h"
+#include "mtime.h"
+#include "test.h"
+
+/* global variables */
+
+dts_t *deltas = NULL;
+int nb_measurements = 0;
+
+char *local_host = "localhost";
+int local_port = 1024;
+char *remote_host = "localhost";
+int remote_port = 1025;
+int mode = 0;
+
+char *message = "UDP socket RTT";
+
+void _usage_ext (FILE *fd)
+{
+    fprintf (fd, "... lhost lport rhost rport [mode]\n");
+    fprintf (fd, " lhost: local host name (%s)\n", local_host);
+    fprintf (fd, " lport: local port number (%d)\n", local_port);
+    fprintf (fd, " rhost: remote host name (%s)\n", remote_host);
+    fprintf (fd, " rport: remote port number (%d)\n", remote_port);
+    fprintf (fd, " mode: 0 for ping-pong, 1 for ping, 2 for pong (%d)\n", mode);
+}
+void (*usage_ext) (FILE *) = _usage_ext;
+
+int _parse_arg_ext (char *arg)
+{
+    static int narg = 0;
+
+    int rc = 0;
+    switch (narg) {
+    case 0: local_host= arg; break;
+    case 1: local_port = atoi (arg); if (local_port < 0) rc = 1; break;
+    case 2: remote_host = arg; break;
+    case 3: remote_port = atoi (arg); if (remote_port < 0) rc = 1; break;
+    case 4: mode = atoi (arg); break;
+    default: rc = 1;
+    }
+    narg++;
+
+    return rc;
+}
+int (*parse_arg_ext) (char *) = _parse_arg_ext;
+
+#define MSGLEN 128
+#define MAXBUF 1024
+
+int ping (int local_port, int remote_addr, int remote_port)
+{
+
+    int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+    if (sock == -1) {
+        fprintf (stderr, "ping error: socket\n");
+        return 1;
+    }
+
+    struct sockaddr_in local = { 0 };
+    local.sin_family = AF_INET;
+    local.sin_port = htons (local_port);
+    local.sin_addr.s_addr = htonl (INADDR_ANY);
+
+    if (bind (sock, (struct sockaddr *)&local, sizeof (local)) == -1) {
+        fprintf (stderr, "ping error: bind\n");
+        return 1;
+    }
+
+    struct sockaddr_in remote = { 0 };
+    remote.sin_family = AF_INET;
+    remote.sin_port = htons (remote_port);
+    remote.sin_addr.s_addr = htonl (remote_addr);
+
+    printf ("Sending ping...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        ts_t ts1;
+        sys_timestamp (&ts1);
+
+        if (sendto (sock, msg, MSGLEN, 0, (struct sockaddr *)&remote, sizeof (remote)) == -1) {
+            fprintf (stderr, "ping error: sendto (%d)\n", i);
+            return 1;
+        }
+        //printf ("sendto '%s'\n", buffer);
+
+        int len = recv (sock, buffer, sizeof (buffer) - 1, 0);
+        if (len == -1) {
+            fprintf (stderr, "ping error: recv_from (%d)\n", i);
+            return 1;
+        }
+        //printf ("recv_from '%s'\n", buffer);
+
+        ts_t ts2;
+        sys_timestamp (&ts2);
+        deltas[i] = diff_timestamp (&ts2, &ts1);
+    }
+
+    close (sock);
+
+    return 0;
+}
+
+int pong (int local_port, int remote_addr, int remote_port)
+{
+
+    int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+    if (sock == -1) {
+        fprintf (stderr, "pong error: socket\n");
+        return 1;
+    }
+
+    struct sockaddr_in local = { 0 };
+    local.sin_family = AF_INET;
+    local.sin_port = htons (local_port);
+    local.sin_addr.s_addr = htonl (INADDR_ANY);
+
+    if (bind (sock, (struct sockaddr *)&local, sizeof (local)) == -1) {
+        fprintf (stderr, "pong error: bind\n");
+        return 1;
+    }
+
+    struct sockaddr_in remote = { 0 };
+    remote.sin_family = AF_INET;
+    remote.sin_port = htons (remote_port);
+    remote.sin_addr.s_addr = htonl (remote_addr);
+
+    printf ("Sending pong...\n");
+    for (int i = 0; i < nb_measurements; i++) {
+
+        char *msg = get_msg (MSGLEN);
+        char buffer[MAXBUF] = { 0 };
+
+        int len = recv (sock, buffer, sizeof (buffer) - 1, 0);
+        if (len == -1) {
+            fprintf (stderr, "pong error: recv_from (%d)\n", i);
+            return 1;
+        }
+        //printf ("recv_from '%s'\n", buffer);
+
+        if (sendto (sock, msg, MSGLEN, 0, (struct sockaddr *)&remote, sizeof (remote)) == -1) {
+            fprintf (stderr, "pong error: sendto (%d)\n", i);
+            return 1;
+        }
+        //printf ("sendto '%s'\n", buffer);
+    }
+
+    close (sock);
+
+    return 0;
+}
+
+int get_ip (char *hostname) {
+    struct hostent *he = gethostbyname (hostname);
+    if (he == NULL) {
+        fprintf (stderr, "error: gethostbyname (%s)\n", hostname);
+        return -1;
+    }
+    struct in_addr **addr_list = (struct in_addr **) he->h_addr_list;
+    return ntohl (addr_list[0]->s_addr);
+}
+
+int test (dts_t *buffer, int nb)
+{
+
+    /* set global variables */
+
+    deltas = buffer;
+    nb_measurements = nb;
+
+    /* udp socket test */
+    int local_ip = get_ip (local_host);
+    if (local_ip == -1) {
+        return 1;
+    }
+    int remote_ip = get_ip (remote_host);
+    if (remote_ip == -1) {
+        return 1;
+    }
+
+    pid_t pid = (mode == 0 ) ? fork () : -2;
+    if (pid == -1) {
+        fprintf (stderr, "error: fork\n");
+        return 1;
+    } else if ((pid == 0) || (mode == 2)) {
+        int rc = pong (remote_port, local_ip, local_port);
+        exit (rc);
+    }
+
+    int rc = ping (local_port, remote_ip, remote_port);
+
+    if ((pid > 0) && (kill (pid, SIGTERM) == 0)) {
+        int wstatus;
+        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
+            fprintf (stderr, "error: waitpid\n");
+        }
+    }
+
+    return rc;
+}
diff --git a/mq_rtt.c b/mq_rtt.c
deleted file mode 100644 (file)
index 5f4ad41..0000000
--- a/mq_rtt.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* depend: */
-/* cflags: */
-/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <fcntl.h>           /* For O_* constants */
-#include <sys/stat.h>        /* For mode constants */
-#include <mqueue.h>
-
-#include <signal.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "msg.h"
-#include "mtime.h"
-#include "test.h"
-
-/* global variables */
-
-dts_t *deltas = NULL;
-int nb_measurements = 0;
-
-char *message = "Message queue RTT";
-void (*usage_ext) (FILE *) = NULL;
-int (*parse_arg_ext) (char *) = NULL;
-
-#define MSGLEN 128
-#define MAXBUF 1024
-
-int ping (mqd_t mq)
-{
-
-    printf ("Sending ping...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        ts_t ts1;
-        sys_timestamp (&ts1);
-
-        if (mq_send (mq, msg, MSGLEN, 0) == -1) {
-            fprintf (stderr, "ping error: mq_send (%d)\n", i);
-            return 1;
-        }
-        //printf ("send '%s'\n", buffer);
-
-        if (mq_receive (mq, buffer, sizeof(buffer) - 1, NULL) == -1) {
-            fprintf (stderr, "ping error: mq_receive (%d)\n", i);
-            return 1;
-        }
-        //printf ("receive '%s'\n", buffer);
-
-        ts_t ts2;
-        sys_timestamp (&ts2);
-        deltas[i] = diff_timestamp (&ts2, &ts1);
-    }
-
-    return 0;
-}
-
-int pong (mqd_t mq)
-{
-
-    printf ("Responding pong...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        if (mq_receive (mq, buffer, sizeof(buffer) - 1, NULL) == -1) {
-            fprintf (stderr, "pong error: mq_receive (%d)\n", i);
-            return 1;
-        }
-        //printf ("receive '%s'\n", buffer);
-
-        if (mq_send (mq, msg, MSGLEN, 0) == -1) {
-            fprintf (stderr, "pong error: mq_send (%d)\n", i);
-            return 1;
-        }
-        //printf ("send '%s'\n", buffer);
-    }
-
-    return 0;
-}
-
-int test (dts_t *buffer, int nb)
-{
-
-    /* set global variables */
-
-    deltas = buffer;
-    nb_measurements = nb;
-
-    /* mq rtt test */
-
-    struct mq_attr attr;
-    attr.mq_flags = 0;
-    attr.mq_maxmsg = 5;
-    attr.mq_msgsize = MAXBUF;
-    attr.mq_curmsgs = 0;
-
-    mqd_t mq = mq_open ("/test_queue", O_CREAT | O_RDWR, 0644, &attr);
-    if (mq == -1) {
-        fprintf (stderr, "error: mq_open\n");
-        return 1;
-    }
-
-    pid_t pid = fork ();
-    if (pid == -1) {
-        fprintf (stderr, "error: fork\n");
-        return 1;
-    } else if (pid == 0) {
-        int rc = pong (mq);
-        mq_close (mq);
-        exit (rc);
-    }
-
-    int rc = ping (mq);
-    mq_close (mq);
-
-    if (kill (pid, SIGTERM) == 0) {
-        int wstatus;
-        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
-            fprintf (stderr, "error: waitpid\n");
-        }
-    }
-
-    return rc;
-}
diff --git a/pipe_rtt.c b/pipe_rtt.c
deleted file mode 100644 (file)
index 29a365d..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* depend: */
-/* cflags: */
-/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <signal.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "msg.h"
-#include "mtime.h"
-#include "test.h"
-
-/* global variables */
-
-dts_t *deltas = NULL;
-int nb_measurements = 0;
-
-char *message = "Pipe RTT";
-void (*usage_ext) (FILE *) = NULL;
-int (*parse_arg_ext) (char *) = NULL;
-
-#define MSGLEN 128
-#define MAXBUF 1024
-
-int ping (int fdin, int fdout)
-{
-
-    printf ("Sending ping...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        ts_t ts1;
-        sys_timestamp (&ts1);
-
-        if (write (fdout, msg, MSGLEN) == -1) {
-            fprintf (stderr, "ping error: write (%d)\n", i);
-            return 1;
-        }
-        //printf ("write '%s'\n", buffer);
-
-        if (read (fdin, buffer, sizeof(buffer) - 1) == -1) {
-            fprintf (stderr, "ping error: read (%d)\n", i);
-            return 1;
-        }
-        //printf ("read '%s'\n", buffer);
-
-        ts_t ts2;
-        sys_timestamp (&ts2);
-        deltas[i] = diff_timestamp (&ts2, &ts1);
-    }
-
-    return 0;
-}
-
-int pong (int fdin, int fdout)
-{
-
-    printf ("Responding pong...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        if (read (fdin, buffer, sizeof(buffer) - 1) == -1) {
-            fprintf (stderr, "ping error: read (%d)\n", i);
-            return 1;
-        }
-        //printf ("read '%s'\n", buffer);
-
-        if (write (fdout, msg, MSGLEN) == -1) {
-            fprintf (stderr, "ping error: write (%d)\n", i);
-            return 1;
-        }
-        //printf ("write '%s'\n", buffer);
-    }
-
-    return 0;
-}
-
-int test (dts_t *buffer, int nb)
-{
-
-    /* set global variables */
-
-    deltas = buffer;
-    nb_measurements = nb;
-
-    /* pipe test */
-
-    int pipefd[2] = { 0 };
-
-    if (pipe (pipefd) == -1) {
-        fprintf (stderr, "error: pipe\n");
-        return 1;
-    }
-
-    pid_t pid = fork ();
-    if (pid == -1) {
-        fprintf (stderr, "error: fork\n");
-        return 1;
-    } else if (pid == 0) {
-        int rc = pong (pipefd[0], pipefd[1]);
-        close (pipefd[0]);
-        close (pipefd[1]);
-        exit (rc);
-    }
-
-    int rc = ping (pipefd[0], pipefd[1]);
-    close (pipefd[0]);
-    close (pipefd[1]);
-
-    if (kill (pid, SIGTERM) == 0) {
-        int wstatus;
-        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
-            fprintf (stderr, "error: waitpid\n");
-        }
-    }
-
-    return rc;
-}
diff --git a/udp_rtt.c b/udp_rtt.c
deleted file mode 100644 (file)
index cbb545c..0000000
--- a/udp_rtt.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* depend: */
-/* cflags: */
-/* linker: msg.o mtime.o test.o stat.o -lm -lrt */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <signal.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <sys/socket.h>
-
-#include "msg.h"
-#include "mtime.h"
-#include "test.h"
-
-/* global variables */
-
-dts_t *deltas = NULL;
-int nb_measurements = 0;
-
-char *local_host = "localhost";
-int local_port = 1024;
-char *remote_host = "localhost";
-int remote_port = 1025;
-int mode = 0;
-
-char *message = "UDP socket RTT";
-
-void _usage_ext (FILE *fd)
-{
-    fprintf (fd, "... lhost lport rhost rport [mode]\n");
-    fprintf (fd, " lhost: local host name (%s)\n", local_host);
-    fprintf (fd, " lport: local port number (%d)\n", local_port);
-    fprintf (fd, " rhost: remote host name (%s)\n", remote_host);
-    fprintf (fd, " rport: remote port number (%d)\n", remote_port);
-    fprintf (fd, " mode: 0 for ping-pong, 1 for ping, 2 for pong (%d)\n", mode);
-}
-void (*usage_ext) (FILE *) = _usage_ext;
-
-int _parse_arg_ext (char *arg)
-{
-    static int narg = 0;
-
-    int rc = 0;
-    switch (narg) {
-    case 0: local_host= arg; break;
-    case 1: local_port = atoi (arg); if (local_port < 0) rc = 1; break;
-    case 2: remote_host = arg; break;
-    case 3: remote_port = atoi (arg); if (remote_port < 0) rc = 1; break;
-    case 4: mode = atoi (arg); break;
-    default: rc = 1;
-    }
-    narg++;
-
-    return rc;
-}
-int (*parse_arg_ext) (char *) = _parse_arg_ext;
-
-#define MSGLEN 128
-#define MAXBUF 1024
-
-int ping (int local_port, int remote_addr, int remote_port)
-{
-
-    int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-    if (sock == -1) {
-        fprintf (stderr, "ping error: socket\n");
-        return 1;
-    }
-
-    struct sockaddr_in local = { 0 };
-    local.sin_family = AF_INET;
-    local.sin_port = htons (local_port);
-    local.sin_addr.s_addr = htonl (INADDR_ANY);
-
-    if (bind (sock, (struct sockaddr *)&local, sizeof (local)) == -1) {
-        fprintf (stderr, "ping error: bind\n");
-        return 1;
-    }
-
-    struct sockaddr_in remote = { 0 };
-    remote.sin_family = AF_INET;
-    remote.sin_port = htons (remote_port);
-    remote.sin_addr.s_addr = htonl (remote_addr);
-
-    printf ("Sending ping...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        ts_t ts1;
-        sys_timestamp (&ts1);
-
-        if (sendto (sock, msg, MSGLEN, 0, (struct sockaddr *)&remote, sizeof (remote)) == -1) {
-            fprintf (stderr, "ping error: sendto (%d)\n", i);
-            return 1;
-        }
-        //printf ("sendto '%s'\n", buffer);
-
-        int len = recv (sock, buffer, sizeof (buffer) - 1, 0);
-        if (len == -1) {
-            fprintf (stderr, "ping error: recv_from (%d)\n", i);
-            return 1;
-        }
-        //printf ("recv_from '%s'\n", buffer);
-
-        ts_t ts2;
-        sys_timestamp (&ts2);
-        deltas[i] = diff_timestamp (&ts2, &ts1);
-    }
-
-    close (sock);
-
-    return 0;
-}
-
-int pong (int local_port, int remote_addr, int remote_port)
-{
-
-    int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-    if (sock == -1) {
-        fprintf (stderr, "pong error: socket\n");
-        return 1;
-    }
-
-    struct sockaddr_in local = { 0 };
-    local.sin_family = AF_INET;
-    local.sin_port = htons (local_port);
-    local.sin_addr.s_addr = htonl (INADDR_ANY);
-
-    if (bind (sock, (struct sockaddr *)&local, sizeof (local)) == -1) {
-        fprintf (stderr, "pong error: bind\n");
-        return 1;
-    }
-
-    struct sockaddr_in remote = { 0 };
-    remote.sin_family = AF_INET;
-    remote.sin_port = htons (remote_port);
-    remote.sin_addr.s_addr = htonl (remote_addr);
-
-    printf ("Sending pong...\n");
-    for (int i = 0; i < nb_measurements; i++) {
-
-        char *msg = get_msg (MSGLEN);
-        char buffer[MAXBUF] = { 0 };
-
-        int len = recv (sock, buffer, sizeof (buffer) - 1, 0);
-        if (len == -1) {
-            fprintf (stderr, "pong error: recv_from (%d)\n", i);
-            return 1;
-        }
-        //printf ("recv_from '%s'\n", buffer);
-
-        if (sendto (sock, msg, MSGLEN, 0, (struct sockaddr *)&remote, sizeof (remote)) == -1) {
-            fprintf (stderr, "pong error: sendto (%d)\n", i);
-            return 1;
-        }
-        //printf ("sendto '%s'\n", buffer);
-    }
-
-    close (sock);
-
-    return 0;
-}
-
-int get_ip (char *hostname) {
-    struct hostent *he = gethostbyname (hostname);
-    if (he == NULL) {
-        fprintf (stderr, "error: gethostbyname (%s)\n", hostname);
-        return -1;
-    }
-    struct in_addr **addr_list = (struct in_addr **) he->h_addr_list;
-    return ntohl (addr_list[0]->s_addr);
-}
-
-int test (dts_t *buffer, int nb)
-{
-
-    /* set global variables */
-
-    deltas = buffer;
-    nb_measurements = nb;
-
-    /* udp socket test */
-    int local_ip = get_ip (local_host);
-    if (local_ip == -1) {
-        return 1;
-    }
-    int remote_ip = get_ip (remote_host);
-    if (remote_ip == -1) {
-        return 1;
-    }
-
-    pid_t pid = (mode == 0 ) ? fork () : -2;
-    if (pid == -1) {
-        fprintf (stderr, "error: fork\n");
-        return 1;
-    } else if ((pid == 0) || (mode == 2)) {
-        int rc = pong (remote_port, local_ip, local_port);
-        exit (rc);
-    }
-
-    int rc = ping (local_port, remote_ip, remote_port);
-
-    if ((pid > 0) && (kill (pid, SIGTERM) == 0)) {
-        int wstatus;
-        if (waitpid (pid, &wstatus, WUNTRACED | WCONTINUED) == -1) {
-            fprintf (stderr, "error: waitpid\n");
-        }
-    }
-
-    return rc;
-}