network/ping: update to freebsd-current
* our ip modules don't support connect()/send(). Just use sendto(). * ping6 disappears, ping supports -4 or -6 to force IPv4 or IPv6 Change-Id: I1e982e354cc75d3a314c5bbbfffa0373e8f4d9af Reviewed-on: https://review.haiku-os.org/c/haiku/+/7427 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
parent
01dc1ea4cf
commit
3bf4cdb73b
@ -19,7 +19,7 @@ SYSTEM_BIN = [ FFilterByBuildFeatures
|
|||||||
modifiers mount mountvolume
|
modifiers mount mountvolume
|
||||||
netstat notify
|
netstat notify
|
||||||
open
|
open
|
||||||
package package_repo passwd pc ping ping6 pkgman prio profile ps
|
package package_repo passwd pc ping pkgman prio profile ps
|
||||||
query quit
|
query quit
|
||||||
ramdisk rc reindex release renice resattr resizefs rmattr rmindex roster
|
ramdisk rc reindex release renice resattr resizefs rmattr rmindex roster
|
||||||
route
|
route
|
||||||
|
@ -84,6 +84,8 @@ struct icmp {
|
|||||||
#define icmp_data icmp_dun.id_data
|
#define icmp_data icmp_dun.id_data
|
||||||
|
|
||||||
#define ICMP_MINLEN 8 /* absolute minimum length */
|
#define ICMP_MINLEN 8 /* absolute minimum length */
|
||||||
|
#define ICMP_TSLEN (8 + 3 * sizeof (uint32_t)) /* timestamp */
|
||||||
|
#define ICMP_MASKLEN 12 /* address mask */
|
||||||
#define ICMP_ADVLENMIN (8 + sizeof(struct ip) + 8)
|
#define ICMP_ADVLENMIN (8 + sizeof(struct ip) + 8)
|
||||||
#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
|
#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ SubInclude HAIKU_TOP src bin network netstat ;
|
|||||||
SubInclude HAIKU_TOP src bin network pppconfig ;
|
SubInclude HAIKU_TOP src bin network pppconfig ;
|
||||||
SubInclude HAIKU_TOP src bin network ppp_up ;
|
SubInclude HAIKU_TOP src bin network ppp_up ;
|
||||||
SubInclude HAIKU_TOP src bin network ping ;
|
SubInclude HAIKU_TOP src bin network ping ;
|
||||||
SubInclude HAIKU_TOP src bin network ping6 ;
|
|
||||||
SubInclude HAIKU_TOP src bin network route ;
|
SubInclude HAIKU_TOP src bin network route ;
|
||||||
SubInclude HAIKU_TOP src bin network telnet ;
|
SubInclude HAIKU_TOP src bin network telnet ;
|
||||||
SubInclude HAIKU_TOP src bin network telnetd ;
|
SubInclude HAIKU_TOP src bin network telnetd ;
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
SubDir HAIKU_TOP src bin network ping ;
|
SubDir HAIKU_TOP src bin network ping ;
|
||||||
|
|
||||||
|
SubDirSysHdrs $(HAIKU_TOP) headers compatibility bsd ;
|
||||||
|
|
||||||
|
DEFINES += INET INET6 ;
|
||||||
|
|
||||||
BinCommand ping :
|
BinCommand ping :
|
||||||
|
main.c
|
||||||
ping.c
|
ping.c
|
||||||
: $(TARGET_NETWORK_LIBS) $(TARGET_SELECT_UNAME_ETC_LIB) ;
|
ping6.c
|
||||||
|
utils.c
|
||||||
|
: $(TARGET_NETWORK_LIBS) $(TARGET_SELECT_UNAME_ETC_LIB) libbsd.so ;
|
||||||
|
|
||||||
# Installation -- in the test directory for the time being
|
# Installation -- in the test directory for the time being
|
||||||
HaikuInstall install-networking
|
HaikuInstall install-networking
|
||||||
|
310
src/bin/network/ping/main.c
Normal file
310
src/bin/network/ping/main.c
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jan Sucan <jansucan@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sysexits.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#ifdef INET
|
||||||
|
#include "ping.h"
|
||||||
|
#endif
|
||||||
|
#ifdef INET6
|
||||||
|
#include "ping6.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(INET) && defined(INET6)
|
||||||
|
#define OPTSTR PING6OPTS PING4OPTS
|
||||||
|
#elif defined(INET)
|
||||||
|
#define OPTSTR PING4OPTS
|
||||||
|
#elif defined(INET6)
|
||||||
|
#define OPTSTR PING6OPTS
|
||||||
|
#else
|
||||||
|
#error At least one of INET and INET6 is required
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __HAIKU__
|
||||||
|
#define optreset optind
|
||||||
|
#define feature_present(x) true
|
||||||
|
#ifndef restrict
|
||||||
|
#define restrict
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* various options */
|
||||||
|
u_int options;
|
||||||
|
|
||||||
|
char *hostname;
|
||||||
|
|
||||||
|
/* counters */
|
||||||
|
long nreceived; /* # of packets we got back */
|
||||||
|
long nrepeats; /* number of duplicates */
|
||||||
|
long ntransmitted; /* sequence # for outbound packets = #sent */
|
||||||
|
long nrcvtimeout = 0; /* # of packets we got back after waittime */
|
||||||
|
|
||||||
|
/* nonzero if we've been told to finish up */
|
||||||
|
volatile sig_atomic_t seenint;
|
||||||
|
volatile sig_atomic_t seeninfo;
|
||||||
|
|
||||||
|
/* timing */
|
||||||
|
int timing; /* flag to do timing */
|
||||||
|
double tmin = 999999999.0; /* minimum round trip time */
|
||||||
|
double tmax = 0.0; /* maximum round trip time */
|
||||||
|
double tsum = 0.0; /* sum of all times, for doing average */
|
||||||
|
double tsumsq = 0.0; /* sum of all times squared, for std. dev. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
#if defined(INET)
|
||||||
|
struct in_addr a;
|
||||||
|
#endif
|
||||||
|
#if defined(INET6)
|
||||||
|
struct in6_addr a6;
|
||||||
|
#endif
|
||||||
|
#if defined(INET) && defined(INET6)
|
||||||
|
struct addrinfo hints, *res, *ai;
|
||||||
|
const char *target;
|
||||||
|
int error;
|
||||||
|
#endif
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
if (strcmp(getprogname(), "ping6") == 0)
|
||||||
|
return ping6(argc, argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, ":" OPTSTR)) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
#ifdef INET
|
||||||
|
case '4':
|
||||||
|
goto ping4;
|
||||||
|
#endif
|
||||||
|
#ifdef INET6
|
||||||
|
case '6':
|
||||||
|
goto ping6;
|
||||||
|
#endif
|
||||||
|
case 'S':
|
||||||
|
/*
|
||||||
|
* If -S is given with a numeric parameter,
|
||||||
|
* force use of the corresponding version.
|
||||||
|
*/
|
||||||
|
#ifdef INET
|
||||||
|
if (inet_pton(AF_INET, optarg, &a) == 1)
|
||||||
|
goto ping4;
|
||||||
|
#endif
|
||||||
|
#ifdef INET6
|
||||||
|
if (inet_pton(AF_INET6, optarg, &a6) == 1)
|
||||||
|
goto ping6;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For IPv4, only one positional argument, the target, is allowed.
|
||||||
|
* For IPv6, multiple positional argument are allowed; the last
|
||||||
|
* one is the target, and preceding ones are intermediate hops.
|
||||||
|
* This nuance is lost here, but the only case where it matters is
|
||||||
|
* an error.
|
||||||
|
*/
|
||||||
|
if (optind >= argc)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
#if defined(INET) && defined(INET6)
|
||||||
|
target = argv[argc - 1];
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_socktype = SOCK_RAW;
|
||||||
|
if (feature_present("inet") && !feature_present("inet6"))
|
||||||
|
hints.ai_family = AF_INET;
|
||||||
|
if (feature_present("inet6") && !feature_present("inet"))
|
||||||
|
hints.ai_family = AF_INET6;
|
||||||
|
else
|
||||||
|
hints.ai_family = AF_UNSPEC;
|
||||||
|
error = getaddrinfo(target, NULL, &hints, &res);
|
||||||
|
if (res == NULL)
|
||||||
|
errx(EX_NOHOST, "cannot resolve %s: %s",
|
||||||
|
target, gai_strerror(error));
|
||||||
|
for (ai = res; ai != NULL; ai = ai->ai_next) {
|
||||||
|
if (ai->ai_family == AF_INET) {
|
||||||
|
freeaddrinfo(res);
|
||||||
|
goto ping4;
|
||||||
|
}
|
||||||
|
if (ai->ai_family == AF_INET6) {
|
||||||
|
freeaddrinfo(res);
|
||||||
|
goto ping6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
freeaddrinfo(res);
|
||||||
|
errx(EX_NOHOST, "cannot resolve %s", target);
|
||||||
|
#endif
|
||||||
|
#ifdef INET
|
||||||
|
ping4:
|
||||||
|
optreset = 1;
|
||||||
|
optind = 1;
|
||||||
|
return ping(argc, argv);
|
||||||
|
#endif
|
||||||
|
#ifdef INET6
|
||||||
|
ping6:
|
||||||
|
optreset = 1;
|
||||||
|
optind = 1;
|
||||||
|
return ping6(argc, argv);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* onsignal --
|
||||||
|
* Set the global bit that causes the main loop to quit.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
onsignal(int sig)
|
||||||
|
{
|
||||||
|
switch (sig) {
|
||||||
|
case SIGALRM:
|
||||||
|
case SIGINT:
|
||||||
|
/*
|
||||||
|
* When doing reverse DNS lookups, the seenint flag might not
|
||||||
|
* be noticed for a while. Just exit if we get a second SIGINT.
|
||||||
|
*/
|
||||||
|
if (!(options & F_HOSTNAME) && seenint != 0)
|
||||||
|
_exit(nreceived ? 0 : 2);
|
||||||
|
seenint++;
|
||||||
|
break;
|
||||||
|
#ifndef __HAIKU__
|
||||||
|
case SIGINFO:
|
||||||
|
seeninfo++;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* pr_summary --
|
||||||
|
* Print out summary statistics to the given output stream.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pr_summary(FILE * restrict stream)
|
||||||
|
{
|
||||||
|
fprintf(stream, "\n--- %s ping statistics ---\n", hostname);
|
||||||
|
fprintf(stream, "%ld packets transmitted, ", ntransmitted);
|
||||||
|
fprintf(stream, "%ld packets received, ", nreceived);
|
||||||
|
if (nrepeats)
|
||||||
|
fprintf(stream, "+%ld duplicates, ", nrepeats);
|
||||||
|
if (ntransmitted) {
|
||||||
|
if (nreceived > ntransmitted)
|
||||||
|
fprintf(stream, "-- somebody's duplicating packets!");
|
||||||
|
else
|
||||||
|
fprintf(stream, "%.1f%% packet loss",
|
||||||
|
((((double)ntransmitted - nreceived) * 100.0) /
|
||||||
|
ntransmitted));
|
||||||
|
}
|
||||||
|
if (nrcvtimeout)
|
||||||
|
fprintf(stream, ", %ld packets out of wait time", nrcvtimeout);
|
||||||
|
fputc('\n', stream);
|
||||||
|
if (nreceived && timing) {
|
||||||
|
/* Only display average to microseconds */
|
||||||
|
double num = nreceived + nrepeats;
|
||||||
|
double avg = tsum / num;
|
||||||
|
double stddev = sqrt(fmax(0, tsumsq / num - avg * avg));
|
||||||
|
fprintf(stream,
|
||||||
|
"round-trip min/avg/max/stddev = %.3f/%.3f/%.3f/%.3f ms\n",
|
||||||
|
tmin, avg, tmax, stddev);
|
||||||
|
}
|
||||||
|
fflush(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr,
|
||||||
|
"usage:\n"
|
||||||
|
#ifdef INET
|
||||||
|
"\tping [-4AaDdfHnoQqRrv] [-C pcp] [-c count] "
|
||||||
|
"[-G sweepmaxsize]\n"
|
||||||
|
"\t [-g sweepminsize] [-h sweepincrsize] [-i wait] "
|
||||||
|
"[-l preload]\n"
|
||||||
|
"\t [-M mask | time] [-m ttl] "
|
||||||
|
#ifdef IPSEC
|
||||||
|
"[-P policy] "
|
||||||
|
#endif
|
||||||
|
"[-p pattern] [-S src_addr] \n"
|
||||||
|
"\t [-s packetsize] [-t timeout] [-W waittime] [-z tos] "
|
||||||
|
"IPv4-host\n"
|
||||||
|
"\tping [-4AaDdfHLnoQqRrv] [-C pcp] [-c count] [-I iface] "
|
||||||
|
"[-i wait]\n"
|
||||||
|
"\t [-l preload] [-M mask | time] [-m ttl] "
|
||||||
|
#ifdef IPSEC
|
||||||
|
"[-P policy] "
|
||||||
|
#endif
|
||||||
|
"[-p pattern]\n"
|
||||||
|
"\t [-S src_addr] [-s packetsize] [-T ttl] [-t timeout] [-W waittime]\n"
|
||||||
|
"\t [-z tos] IPv4-mcast-group\n"
|
||||||
|
#endif /* INET */
|
||||||
|
#ifdef INET6
|
||||||
|
"\tping [-6AaDd"
|
||||||
|
#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
|
||||||
|
"E"
|
||||||
|
#endif
|
||||||
|
"fHnNoOq"
|
||||||
|
#ifdef IPV6_USE_MIN_MTU
|
||||||
|
"u"
|
||||||
|
#endif
|
||||||
|
"vyY"
|
||||||
|
#if defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
|
||||||
|
"Z"
|
||||||
|
#endif
|
||||||
|
"] "
|
||||||
|
"[-b bufsiz] [-C pcp] [-c count] [-e gateway]\n"
|
||||||
|
"\t [-I interface] [-i wait] [-k addrtype] [-l preload] "
|
||||||
|
"[-m hoplimit]\n"
|
||||||
|
"\t [-p pattern]"
|
||||||
|
#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
|
||||||
|
" [-P policy]"
|
||||||
|
#endif
|
||||||
|
" [-S sourceaddr] [-s packetsize] [-t timeout]\n"
|
||||||
|
"\t [-W waittime] [-z tclass] [IPv6-hops ...] IPv6-host\n"
|
||||||
|
#endif /* INET6 */
|
||||||
|
);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
79
src/bin/network/ping/main.h
Normal file
79
src/bin/network/ping/main.h
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jan Sucan <jansucan@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAIN_H
|
||||||
|
#define MAIN_H 1
|
||||||
|
|
||||||
|
#ifdef IPSEC
|
||||||
|
#include <netipsec/ipsec.h>
|
||||||
|
#endif /*IPSEC*/
|
||||||
|
|
||||||
|
#if defined(INET) && defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
|
||||||
|
#define PING4ADDOPTS "P:"
|
||||||
|
#else
|
||||||
|
#define PING4ADDOPTS
|
||||||
|
#endif
|
||||||
|
#define PING4OPTS ".::4AaC:c:DdfG:g:Hh:I:i:Ll:M:m:nop:QqRrS:s:T:t:vW:z:" PING4ADDOPTS
|
||||||
|
|
||||||
|
#if defined(INET6) && defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
|
||||||
|
#define PING6ADDOPTS "P:"
|
||||||
|
#elif defined(INET6) && defined(IPSEC) && !defined(IPSEC_POLICY_IPSEC)
|
||||||
|
#define PING6ADDOPTS "ZE"
|
||||||
|
#else
|
||||||
|
#define PING6ADDOPTS
|
||||||
|
#endif
|
||||||
|
#define PING6OPTS ".::6Aab:C:c:Dde:fHI:i:k:l:m:nNoOp:qS:s:t:uvyYW:z:" PING6ADDOPTS
|
||||||
|
|
||||||
|
/* various options */
|
||||||
|
extern u_int options;
|
||||||
|
#define F_HOSTNAME 0x0004
|
||||||
|
|
||||||
|
extern char *hostname;
|
||||||
|
|
||||||
|
/* counters */
|
||||||
|
extern long nreceived; /* # of packets we got back */
|
||||||
|
extern long nrepeats; /* number of duplicates */
|
||||||
|
extern long ntransmitted; /* sequence # for outbound packets = #sent */
|
||||||
|
extern long nrcvtimeout; /* # of packets we got back after waittime */
|
||||||
|
|
||||||
|
/* nonzero if we've been told to finish up */
|
||||||
|
extern volatile sig_atomic_t seenint;
|
||||||
|
extern volatile sig_atomic_t seeninfo;
|
||||||
|
|
||||||
|
/* timing */
|
||||||
|
extern int timing; /* flag to do timing */
|
||||||
|
extern double tmin; /* minimum round trip time */
|
||||||
|
extern double tmax; /* maximum round trip time */
|
||||||
|
extern double tsum; /* sum of all times, for doing average */
|
||||||
|
extern double tsumsq; /* sum of all times squared, for std. dev. */
|
||||||
|
|
||||||
|
void onsignal(int);
|
||||||
|
void pr_summary(FILE * __restrict);
|
||||||
|
void usage(void) __dead2;
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
34
src/bin/network/ping/ping.h
Normal file
34
src/bin/network/ping/ping.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jan Sucan <jansucan@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PING_H
|
||||||
|
#define PING_H 1
|
||||||
|
|
||||||
|
int ping(int argc, char *const *argv);
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
34
src/bin/network/ping/ping6.h
Normal file
34
src/bin/network/ping/ping6.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jan Sucan <jansucan@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PING6_H
|
||||||
|
#define PING6_H 1
|
||||||
|
|
||||||
|
int ping6(int argc, char *argv[]);
|
||||||
|
|
||||||
|
#endif
|
84
src/bin/network/ping/utils.c
Normal file
84
src/bin/network/ping/utils.c
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*
|
||||||
|
* Copyright (c) 1989, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Mike Muuss.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* in_cksum --
|
||||||
|
* Checksum routine for Internet Protocol family headers (C Version)
|
||||||
|
*/
|
||||||
|
u_short
|
||||||
|
in_cksum(u_char *addr, int len)
|
||||||
|
{
|
||||||
|
int nleft, sum;
|
||||||
|
u_char *w;
|
||||||
|
union {
|
||||||
|
u_short us;
|
||||||
|
u_char uc[2];
|
||||||
|
} last;
|
||||||
|
u_short answer;
|
||||||
|
|
||||||
|
nleft = len;
|
||||||
|
sum = 0;
|
||||||
|
w = addr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Our algorithm is simple, using a 32 bit accumulator (sum), we add
|
||||||
|
* sequential 16 bit words to it, and at the end, fold back all the
|
||||||
|
* carry bits from the top 16 bits into the lower 16 bits.
|
||||||
|
*/
|
||||||
|
while (nleft > 1) {
|
||||||
|
u_short data;
|
||||||
|
|
||||||
|
memcpy(&data, w, sizeof(data));
|
||||||
|
sum += data;
|
||||||
|
w += sizeof(data);
|
||||||
|
nleft -= sizeof(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* mop up an odd byte, if necessary */
|
||||||
|
if (nleft == 1) {
|
||||||
|
last.uc[0] = *w;
|
||||||
|
last.uc[1] = 0;
|
||||||
|
sum += last.us;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add back carry outs from top 16 bits to low 16 bits */
|
||||||
|
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
||||||
|
sum += (sum >> 16); /* add carry */
|
||||||
|
answer = ~sum; /* truncate to 16 bits */
|
||||||
|
return(answer);
|
||||||
|
}
|
36
src/bin/network/ping/utils.h
Normal file
36
src/bin/network/ping/utils.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jan Sucan <jansucan@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UTILS_H
|
||||||
|
#define UTILS_H 1
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
u_short in_cksum(u_char *, int);
|
||||||
|
|
||||||
|
#endif
|
@ -1,7 +0,0 @@
|
|||||||
SubDir HAIKU_TOP src bin network ping6 ;
|
|
||||||
|
|
||||||
UseHeaders [ FDirName $(HAIKU_TOP) headers compatibility bsd ] : true ;
|
|
||||||
|
|
||||||
BinCommand ping6 :
|
|
||||||
ping6.c
|
|
||||||
: libbsd.so $(TARGET_NETWORK_LIBS) $(TARGET_SELECT_UNAME_ETC_LIB) ;
|
|
@ -36,7 +36,6 @@ provides {
|
|||||||
cmd:passwd
|
cmd:passwd
|
||||||
cmd:pidof
|
cmd:pidof
|
||||||
cmd:ping
|
cmd:ping
|
||||||
cmd:ping6
|
|
||||||
cmd:prio
|
cmd:prio
|
||||||
cmd:ps
|
cmd:ps
|
||||||
cmd:renice
|
cmd:renice
|
||||||
|
Loading…
Reference in New Issue
Block a user