From 97315cd612790f282e01696bd39577fc50e84c82 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Tue, 17 Jul 2018 18:33:28 +0200 Subject: [PATCH 01/14] Add a standard autogen.sh script --- autogen.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 autogen.sh diff --git a/autogen.sh b/autogen.sh new file mode 100644 index 0000000..bb05f17 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,13 @@ +#! /bin/sh +srcdir=`dirname "$0"` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd "$srcdir" + +autoreconf -v --install || exit 1 +cd "$ORIGDIR" || exit $? + +if test -z "$NOCONFIGURE"; then + exec "$srcdir"/configure "$@" +fi From 22d0ef76971b410a7e5d93272edf611a10aa7870 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Tue, 17 Jul 2018 18:36:57 +0200 Subject: [PATCH 02/14] Add build instructions --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index da2894e..9c3fb52 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,29 @@ echoc is a small network test program that sends UDP packets to the echo service (it should be activated in [x]inetd on the target host). echoc displays the start/end date of loss of connectivity. -It is distributed under the ISC license: +Building +-------- + +From git, run: + +``` +./autogen.sh +make +make install +``` + +From a source tarball, run: + +``` +./configure +make +make install +``` + +Licence +------- + +Echoc is distributed under the ISC license: Copyright (c) 2012-2015 Matthieu Herrb From c66fae7c45e35ca4e69f9cfaf1f52c4e70035c51 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Wed, 18 Jul 2018 10:54:23 +0200 Subject: [PATCH 03/14] Make autogen.sh executable --- autogen.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 autogen.sh diff --git a/autogen.sh b/autogen.sh old mode 100644 new mode 100755 From 2d3d859d9b0de7a394bc465ff66d0a6f57357d86 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Wed, 18 Jul 2018 10:55:27 +0200 Subject: [PATCH 04/14] Release 0.5 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index bcd0906..8f24152 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([echoc], 0.4, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) +AC_INIT([echoc], 0.5, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC From d791054cfe14c311fffd65c96da3d36a433028fa Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 18 Jul 2018 10:50:33 +0200 Subject: [PATCH 05/14] Set sockets parameters before activating up send_packet timer --- echoc.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/echoc.c b/echoc.c index a337cfe..2e99be1 100644 --- a/echoc.c +++ b/echoc.c @@ -161,18 +161,6 @@ main(int argc, char *argv[]) disconnected = 0; memset(&client, 0, sizeof(client)); - /* timer values */ - itv.it_interval.tv_usec = interval*1000; - itv.it_interval.tv_sec = 0; - itv.it_value.tv_usec = interval*1000; - itv.it_value.tv_sec = 0; - if (setitimer(ITIMER_REAL, &itv, NULL) == -1) - err(2, "setitimer"); - - signal(SIGALRM, send_packet); - - gettimeofday(&last_ts, NULL); - recvbuf = malloc(len); if (recvbuf == NULL) err(2, "malloc receive buffer"); @@ -186,6 +174,18 @@ main(int argc, char *argv[]) if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0) err(2, "setsockopt IP_MTU_DISCOVER"); #endif + /* timer values */ + itv.it_interval.tv_usec = interval*1000; + itv.it_interval.tv_sec = 0; + itv.it_value.tv_usec = interval*1000; + itv.it_value.tv_sec = 0; + if (setitimer(ITIMER_REAL, &itv, NULL) == -1) + err(2, "setitimer"); + + signal(SIGALRM, send_packet); + + gettimeofday(&last_ts, NULL); + while (1) { /* poll() loop to handle interruptions by SIGALRM */ while (1) { From 0f96d32d4c9136ba330d85f444236ea3fb4414a2 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 18 Jul 2018 10:56:06 +0200 Subject: [PATCH 06/14] Set SIGALRM handler before setting timer --- echoc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/echoc.c b/echoc.c index 2e99be1..eaed4e5 100644 --- a/echoc.c +++ b/echoc.c @@ -174,6 +174,8 @@ main(int argc, char *argv[]) if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0) err(2, "setsockopt IP_MTU_DISCOVER"); #endif + signal(SIGALRM, send_packet); + /* timer values */ itv.it_interval.tv_usec = interval*1000; itv.it_interval.tv_sec = 0; @@ -182,8 +184,6 @@ main(int argc, char *argv[]) if (setitimer(ITIMER_REAL, &itv, NULL) == -1) err(2, "setitimer"); - signal(SIGALRM, send_packet); - gettimeofday(&last_ts, NULL); while (1) { From 16d5383fb8153a4bd48c7cdee1163349ad7e6e98 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 18 Jul 2018 11:05:54 +0200 Subject: [PATCH 07/14] Add timestamped "starting" message --- echoc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/echoc.c b/echoc.c index eaed4e5..5eeaaa6 100644 --- a/echoc.c +++ b/echoc.c @@ -185,6 +185,9 @@ main(int argc, char *argv[]) err(2, "setitimer"); gettimeofday(&last_ts, NULL); + tm = localtime((time_t *)&last_ts.tv_sec); + strftime(date, sizeof(date), "%F %T", tm); + printf("%s.%06ld: starting\n", date, last_ts.tv_usec); while (1) { /* poll() loop to handle interruptions by SIGALRM */ From 4a15bdac0a016b065f89405a3b36a1655f21dfc7 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Wed, 18 Jul 2018 12:39:23 +0200 Subject: [PATCH 08/14] Add timestamped "aborting" message --- echoc.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/echoc.c b/echoc.c index 5eeaaa6..0d592bd 100644 --- a/echoc.c +++ b/echoc.c @@ -37,6 +37,7 @@ int sock = -1; int verbose = 0; +int aborting = 0; struct sockaddr *server; socklen_t serverlen; unsigned int seq = 0; @@ -48,11 +49,16 @@ usage(void) errx(2, "usage: echoc [-c nbr][-d][-i ms][-l len][-p port][-t ms][-v] server"); } +static void +sigint_handler(int unused) +{ + aborting = 1; +} + static void send_packet(int unused) { - char *buf; - + char *buf; buf = malloc(len); if (buf == NULL) return; @@ -172,9 +178,10 @@ main(int argc, char *argv[]) else ch = IP_PMTUDISC_DONT; if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0) - err(2, "setsockopt IP_MTU_DISCOVER"); + err(2, "setsockopt IP_MTU_DISCOVER"); #endif signal(SIGALRM, send_packet); + signal(SIGINT, sigint_handler); /* timer values */ itv.it_interval.tv_usec = interval*1000; @@ -189,9 +196,9 @@ main(int argc, char *argv[]) strftime(date, sizeof(date), "%F %T", tm); printf("%s.%06ld: starting\n", date, last_ts.tv_usec); - while (1) { + while (!aborting) { /* poll() loop to handle interruptions by SIGALRM */ - while (1) { + while (!aborting) { pfd[0].fd = sock; pfd[0].events = POLLIN; nfds = poll(pfd, 1, timeout); @@ -207,11 +214,13 @@ main(int argc, char *argv[]) break; } } + if (aborting) + break; if ((nfds == 0)) { if (verbose) printf("%d packet(s) dropped in %ld.%06ld s\n", seq - last, (long)diff.tv_sec, diff.tv_usec); - + if (disconnected == 1) { tm = localtime((time_t *)&last_ts.tv_sec); strftime(date, sizeof(date), "%F %T", tm); @@ -227,11 +236,11 @@ main(int argc, char *argv[]) &addrlen)) != len) { warn("recvfrom"); } - + if (verbose && (serverlen != addrlen || memcmp(&client, server, addrlen) != 0)) { if ((error = getnameinfo((struct sockaddr *)&client, - addrlen, name, sizeof(name), + addrlen, name, sizeof(name), NULL, 0, NI_DGRAM)) != 0) { warnx("%s", gai_strerror(error)); } else { @@ -262,6 +271,12 @@ main(int argc, char *argv[]) } } } + if (aborting) { + gettimeofday(&now, NULL); + tm = localtime((time_t *)&now.tv_sec); + strftime(date, sizeof(date), "%F %T", tm); + printf("%s.%06ld: aborting\n", date, now.tv_usec); + } close(sock); exit(0); } From 0153b223c0a9a8f4ff78607c33e2ad6e49e2fbb5 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Wed, 18 Jul 2018 19:04:42 +0200 Subject: [PATCH 09/14] white space police --- echoc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/echoc.c b/echoc.c index 0d592bd..269f4f6 100644 --- a/echoc.c +++ b/echoc.c @@ -89,7 +89,7 @@ main(int argc, char *argv[]) struct tm *tm; struct pollfd pfd[1]; socklen_t addrlen; - long interval = 100; /* default interval (ms) */ + long interval = 100; /* default interval (ms) */ long timeout = 500; /* default timeout (ms) */ int ch; int nfds, received = 0; @@ -175,10 +175,10 @@ main(int argc, char *argv[]) /* set the DF flag ? */ if (nofragment) ch = IP_PMTUDISC_DO; - else + else ch = IP_PMTUDISC_DONT; if (setsockopt(sock, IPPROTO_IP, IP_MTU_DISCOVER, &ch, sizeof(ch)) < 0) - err(2, "setsockopt IP_MTU_DISCOVER"); + err(2, "setsockopt IP_MTU_DISCOVER"); #endif signal(SIGALRM, send_packet); signal(SIGINT, sigint_handler); @@ -220,7 +220,7 @@ main(int argc, char *argv[]) if (verbose) printf("%d packet(s) dropped in %ld.%06ld s\n", seq - last, (long)diff.tv_sec, diff.tv_usec); - + if (disconnected == 1) { tm = localtime((time_t *)&last_ts.tv_sec); strftime(date, sizeof(date), "%F %T", tm); @@ -236,7 +236,7 @@ main(int argc, char *argv[]) &addrlen)) != len) { warn("recvfrom"); } - + if (verbose && (serverlen != addrlen || memcmp(&client, server, addrlen) != 0)) { if ((error = getnameinfo((struct sockaddr *)&client, From e757fa859503b9de32cf261f5ea70127383b4499 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Wed, 4 Aug 2021 07:57:39 +0000 Subject: [PATCH 10/14] Add LICENSE --- LICENSE | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..914ee49 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ + Copyright (c) 2012-2015 Matthieu Herrb + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. From b29605e530c7ac4c6504a6999cefabf1f44dd6be Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Wed, 4 Aug 2021 10:03:20 +0200 Subject: [PATCH 11/14] release echoc 0.6 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 8f24152..c0a27d3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([echoc], 0.5, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) +AC_INIT([echoc], 0.6, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC From 7b587fd59fdb177a4e2f1ee24a5629e1dcaaf5fe Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Thu, 27 Apr 2023 13:55:23 +0200 Subject: [PATCH 12/14] Prepare for future development --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index c0a27d3..79db8aa 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([echoc], 0.6, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) +AC_INIT([echoc], 0.6.99, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC From 72eba42917b00ccd39b99a2ca69efb3b7370e505 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Thu, 27 Apr 2023 14:00:21 +0200 Subject: [PATCH 13/14] Update project URL --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 79db8aa..150ba8a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([echoc], 0.6.99, [https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/echoc], echoc) +AC_INIT([echoc], 0.6.99, [https://gitlab.laas.fr/matthieu/echoc], echoc) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC From 98a53d9bd231849beb6ec335cb2b828345e70c8d Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Tue, 16 Apr 2024 12:17:38 +0200 Subject: [PATCH 14/14] configure.ac: modernize for autoconf 2.71 --- configure.ac | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 150ba8a..f4e1c5d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ -AC_PREREQ([2.65]) -AC_INIT([echoc], 0.6.99, [https://gitlab.laas.fr/matthieu/echoc], echoc) +AC_PREREQ([2.71]) +AC_INIT([echoc],[0.6.99],[https://gitlab.laas.fr/matthieu/echoc],[echoc]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC @@ -7,4 +7,5 @@ AC_PROG_CC AC_CHECK_HEADERS([bsd/stdlib.h]) AC_SEARCH_LIBS(strtonum, [bsd]) -AC_OUTPUT([Makefile]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT