Compare commits
No commits in common. "master" and "echoc-0.4" have entirely different histories.
5 changed files with 26 additions and 93 deletions
13
LICENSE
13
LICENSE
|
@ -1,13 +0,0 @@
|
|||
Copyright (c) 2012-2015 Matthieu Herrb <matthieu@herrb.eu>
|
||||
|
||||
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.
|
24
README.md
24
README.md
|
@ -5,29 +5,7 @@ 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.
|
||||
|
||||
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:
|
||||
It is distributed under the ISC license:
|
||||
|
||||
Copyright (c) 2012-2015 Matthieu Herrb <matthieu@herrb.eu>
|
||||
|
||||
|
|
13
autogen.sh
13
autogen.sh
|
@ -1,13 +0,0 @@
|
|||
#! /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
|
|
@ -1,5 +1,5 @@
|
|||
AC_PREREQ([2.71])
|
||||
AC_INIT([echoc],[0.6.99],[https://gitlab.laas.fr/matthieu/echoc],[echoc])
|
||||
AC_PREREQ([2.65])
|
||||
AC_INIT([echoc], 0.4, [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
|
||||
|
@ -7,5 +7,4 @@ AC_PROG_CC
|
|||
AC_CHECK_HEADERS([bsd/stdlib.h])
|
||||
AC_SEARCH_LIBS(strtonum, [bsd])
|
||||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
AC_OUTPUT([Makefile])
|
||||
|
|
48
echoc.c
48
echoc.c
|
@ -37,7 +37,6 @@
|
|||
|
||||
int sock = -1;
|
||||
int verbose = 0;
|
||||
int aborting = 0;
|
||||
struct sockaddr *server;
|
||||
socklen_t serverlen;
|
||||
unsigned int seq = 0;
|
||||
|
@ -49,16 +48,11 @@ 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;
|
||||
|
||||
buf = malloc(len);
|
||||
if (buf == NULL)
|
||||
return;
|
||||
|
@ -167,6 +161,18 @@ 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");
|
||||
|
@ -180,25 +186,9 @@ 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);
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
/* 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");
|
||||
|
||||
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 (!aborting) {
|
||||
while (1) {
|
||||
/* poll() loop to handle interruptions by SIGALRM */
|
||||
while (!aborting) {
|
||||
while (1) {
|
||||
pfd[0].fd = sock;
|
||||
pfd[0].events = POLLIN;
|
||||
nfds = poll(pfd, 1, timeout);
|
||||
|
@ -214,8 +204,6 @@ main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (aborting)
|
||||
break;
|
||||
if ((nfds == 0)) {
|
||||
if (verbose)
|
||||
printf("%d packet(s) dropped in %ld.%06ld s\n",
|
||||
|
@ -271,12 +259,6 @@ 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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue