netbsd ping & traceroute
. remove minix ping
. add support for socket(AF_INET, SOCK_RAW, {IPPROTO_ICMP,IPPROTO_UDP})
. gives test48 a better chance of detecting network connectivity
Change-Id: Ia678546d27ac378642f1160a141e1fc33458cce2
This commit is contained in:
committed by
Gerrit Code Review
parent
9a718e59fd
commit
7f5f010bbd
@@ -24,7 +24,7 @@ SUBDIR= \
|
||||
\
|
||||
rdate \
|
||||
\
|
||||
\
|
||||
traceroute \
|
||||
\
|
||||
\
|
||||
unlink user \
|
||||
|
||||
149
usr.sbin/traceroute/CHANGES
Normal file
149
usr.sbin/traceroute/CHANGES
Normal file
@@ -0,0 +1,149 @@
|
||||
$NetBSD: CHANGES,v 1.2 2011/09/11 01:06:26 christos Exp $
|
||||
@(#) Id: CHANGES,v 1.23 2000/12/14 06:53:11 leres Exp (LBL)
|
||||
|
||||
v1.4 Wed Dec 13 22:50:35 PST 2000
|
||||
|
||||
- Add an option to use icmp echo instead of udp datagrams.
|
||||
|
||||
- Add HPUX and Linux support.
|
||||
|
||||
- Handle hex argument values as suggested by John Hawkinson
|
||||
(jhawk@mit.edu)
|
||||
|
||||
- Added flags to set the first ttl and to set the don't fragment bit.
|
||||
|
||||
- Add a local autoconf macro to check for routines in libraries; the
|
||||
autoconf version is broken (it only puts the library name in the
|
||||
cache variable name). Thanks to John Hawkinson.
|
||||
|
||||
- Add a local autoconf macro to check for types; the autoconf version
|
||||
is broken (it uses grep instead of actually compiling a code fragment).
|
||||
|
||||
- Attempt to detect "egcs" versions of gcc.
|
||||
|
||||
- Fix problems caused by savestr().
|
||||
|
||||
- Detect when there are more interfaces than we can deal with. Thanks
|
||||
to Guy Harris guy@netapp.com.
|
||||
|
||||
- Accommodate changes made to FreeBSD 3.2-RELEASE network headers files.
|
||||
|
||||
- The ip header offset needs to be byte swapped under Solaris on the
|
||||
intel as well. Reported by John McDermott (jjm@jkintl.com) Also byte
|
||||
ip length and offset for linux.
|
||||
|
||||
- In wait_for_reply(), use passed socket instead of global one. Thanks
|
||||
to Richard Kettlewell (richard.kettlewell@kewill.com)
|
||||
|
||||
- Check for IFF_LOOPBACK as a define or an enum (concession to linux).
|
||||
Reported by Robert Bihlmeyer (robbe@orcus.priv.at)
|
||||
|
||||
- Increase size of SIOCGIFCONF buffer to accommodate systems with lots
|
||||
of virtual interfaces. Ignore sun virtual interfaces. Suggested by
|
||||
Ian Donaldson (iand@aone.com.au)
|
||||
|
||||
- Always calculate icmp checksums when using -I. Reported by Soumen
|
||||
(sbiswas@novell.com)
|
||||
|
||||
- Documentation fix for description of -p. Thanks to Jeffrey C Honig
|
||||
(jch@bsdi.com)
|
||||
|
||||
- Enable ip checksums for Solaris 2.6 and higher (since they seem to
|
||||
work correctly now).
|
||||
|
||||
- Avoid problems when broken routers return 0.0.0.0 as their source
|
||||
address. Thanks to John Hawkinson (jhawk@bbnplanet.com)
|
||||
|
||||
- Canonicalize hostname if gethostname() doesn't return a domain.
|
||||
|
||||
- Add -z flag (pause msecs) to allow optional pause between probes.
|
||||
Suggested by Dave Morrison (drmorris@uplanet.com)
|
||||
|
||||
- Fix max packet length test.
|
||||
|
||||
- Use "/dev/null" instead of "." for file descriptor fodder.
|
||||
Suggested by Tim Robbins (fyre@box3n.gumbynet.org)
|
||||
|
||||
- Watch for a NULL argv[0]. Suggested by Tim Robbins.
|
||||
|
||||
- Be careful with hostname legnths.
|
||||
|
||||
- Print RFC1191 Path MTU Discovery value on "needfrag" unreachables.
|
||||
|
||||
- Limit port size to 16 bits. Suggested by Tim Robbins.
|
||||
|
||||
- Limit wait time to 24 hours.
|
||||
|
||||
- Modified linux specific struct ipovly definition to avoid problems
|
||||
with 64 bit systems. Problem reported by Uros Prestor
|
||||
(uros@turbolinux.com)
|
||||
|
||||
- Use kernel routing tables to determine correct source address.
|
||||
Three styles are supported: bsd/socket, solaris/mib and linux.
|
||||
|
||||
- Fix configure to recognize older versions of Solaris.
|
||||
|
||||
v1.3.2 Thu Sep 26 18:06:16 PDT 1996
|
||||
|
||||
- Rewrite source routing code to eliminate a number of problems on
|
||||
systems using raw ip options. Also pad options with a noop so gateway
|
||||
addresses are aligned.
|
||||
|
||||
- Don't call inet_ntoa() twice in the same printf(). Thanks to NetBSD
|
||||
via Bill Fenner (fenner@parc.xerox.com)
|
||||
|
||||
- Decode "administratively prohibited filter" icmp code and print
|
||||
numeric value for unknown codes. Thanks to Bill Fenner.
|
||||
|
||||
v1.3.1 Wed Sep 18 21:08:16 PDT 1996
|
||||
|
||||
- Some systems (e.g. AIX) need sys/select.h. Thanks to Brett Hogden
|
||||
(hogden@rge.com)
|
||||
|
||||
- Byte swap ip header length under Solaris. (This has no effect on the
|
||||
sparc but is required on the i386.)
|
||||
|
||||
- Made optional packet length control total size of packet.
|
||||
|
||||
v1.3 Mon Sep 16 14:55:44 PDT 1996
|
||||
|
||||
- Overrun buffer security fixes. Thanks to Bill Fenner
|
||||
(fenner@parc.xerox.com)
|
||||
|
||||
- Wait for response packet relative to start of probe. Thanks to Bill
|
||||
Fenner.
|
||||
|
||||
- Fix bug that prevented changing the packet size. Thanks to Gregory
|
||||
Decker (gdecker@nate.dcrt.nih.gov)
|
||||
|
||||
- Add support for RAW_OPTIONS (e.g. 4.4 BSD systems such as BSD/OS and
|
||||
FreeBSD) thanks to Jeffrey C Honig (jch@bsdi.com)
|
||||
|
||||
- Remove ip header byte swap fix from v1.2; most kernels swap the ip
|
||||
header length in the kernel (and it causes OSF3 to crash).
|
||||
|
||||
- Fix to not exit when the number of probes is set to 1 (i.e. "-q 1")
|
||||
|
||||
- Improve autoconf configuration.
|
||||
|
||||
v1.2 Tue Oct 17 23:50:05 PDT 1995
|
||||
|
||||
- Convert to autoconf and ansify.
|
||||
|
||||
- Byte swap ip header length for little endian machines. Fix thanks to
|
||||
Y Badri (yb@greybox.demon.co.uk).
|
||||
|
||||
v1.1 Thu Jun 15 02:32:55 PDT 1995
|
||||
|
||||
- Check for too many arguments.
|
||||
|
||||
- Recode to make timing of packet's round trip more obvious and to
|
||||
tighten up code.
|
||||
|
||||
- Ifdef IP_OPTIONS code.
|
||||
|
||||
- Display time in microseconds.
|
||||
|
||||
v1.0 Tue Feb 28 23:50:05 PDT 1989
|
||||
|
||||
- Initial public release.
|
||||
29
usr.sbin/traceroute/Makefile
Normal file
29
usr.sbin/traceroute/Makefile
Normal file
@@ -0,0 +1,29 @@
|
||||
# $NetBSD: Makefile,v 1.19 2011/09/11 01:06:26 christos Exp $
|
||||
|
||||
USE_FORT?= yes # network client
|
||||
|
||||
RUMPPRG=traceroute
|
||||
MAN= traceroute.8
|
||||
|
||||
CPPFLAGS+=-DHAVE_MALLOC_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SOCKIO_H=1
|
||||
CPPFLAGS+=-DHAVE_STRERROR=1 -DHAVE_SETLINEBUF=1 -DHAVE_SOCKADDR_SA_LEN=1
|
||||
CPPFLAGS+=-DHAVE_RAW_OPTIONS=1
|
||||
CPPFLAGS+=-DHAVE_ICMP_NEXTMTU=1
|
||||
|
||||
#CPPFLAGS+=-DIPSEC
|
||||
#LDADD+= -lipsec
|
||||
#DPADD+= ${LIBIPSEC}
|
||||
|
||||
BINOWN= root
|
||||
BINMODE=4555
|
||||
|
||||
SRCS= traceroute.c ifaddrlist.c
|
||||
SRCS+= version.c as.c
|
||||
|
||||
.PATH: ${.CURDIR}/../../lib/libc/net
|
||||
RUMPSRCS= getifaddrs.c
|
||||
CPPFLAGS+= -DRUMP_ACTION
|
||||
|
||||
AWKS= median.awk mean.awk
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
224
usr.sbin/traceroute/as.c
Normal file
224
usr.sbin/traceroute/as.c
Normal file
@@ -0,0 +1,224 @@
|
||||
/* $NetBSD: as.c,v 1.4 2011/05/10 01:52:49 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Andrew Brown.
|
||||
*
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "as.h"
|
||||
|
||||
#define DEFAULT_AS_SERVER "whois.radb.net"
|
||||
#undef AS_DEBUG_FILE
|
||||
|
||||
struct aslookup {
|
||||
FILE *as_f;
|
||||
#ifdef AS_DEBUG_FILE
|
||||
FILE *as_debug;
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
};
|
||||
|
||||
void *
|
||||
as_setup(const char *server)
|
||||
{
|
||||
struct aslookup *asn;
|
||||
struct addrinfo hints, *res0, *res;
|
||||
FILE *f;
|
||||
int s, error;
|
||||
|
||||
s = -1;
|
||||
if (server == NULL)
|
||||
server = getenv("RA_SERVER");
|
||||
if (server == NULL)
|
||||
server = DEFAULT_AS_SERVER;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = PF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
error = getaddrinfo(server, "whois", &hints, &res0);
|
||||
if (error == EAI_SERVICE) {
|
||||
warnx("warning: whois/tcp service not found");
|
||||
error = getaddrinfo(server, "43", &hints, &res0);
|
||||
}
|
||||
|
||||
if (error != 0) {
|
||||
warnx("%s: %s", server, gai_strerror(error));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
for (res = res0; res; res = res->ai_next) {
|
||||
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||
if (s < 0)
|
||||
continue;
|
||||
if (connect(s, res->ai_addr, res->ai_addrlen) >= 0)
|
||||
break;
|
||||
close(s);
|
||||
s = -1;
|
||||
}
|
||||
freeaddrinfo(res0);
|
||||
if (s < 0) {
|
||||
warn("connect");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
f = fdopen(s, "r+");
|
||||
(void)fprintf(f, "!!\n");
|
||||
(void)fflush(f);
|
||||
|
||||
asn = malloc(sizeof(struct aslookup));
|
||||
if (asn == NULL)
|
||||
(void)fclose(f);
|
||||
else
|
||||
asn->as_f = f;
|
||||
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn) {
|
||||
asn->as_debug = fopen(AS_DEBUG_FILE, "w");
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug, ">> !!\n");
|
||||
(void)fflush(asn->as_debug);
|
||||
}
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
|
||||
return (asn);
|
||||
}
|
||||
|
||||
unsigned int
|
||||
as_lookup(void *_asn, char *addr, sa_family_t family)
|
||||
{
|
||||
struct aslookup *asn = _asn;
|
||||
char buf[1024];
|
||||
unsigned int as;
|
||||
int rc, dlen, plen;
|
||||
|
||||
as = 0;
|
||||
rc = dlen = 0;
|
||||
plen = (family == AF_INET6) ? 128 : 32;
|
||||
(void)fprintf(asn->as_f, "!r%s/%d,l\n", addr, plen);
|
||||
(void)fflush(asn->as_f);
|
||||
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug, ">> !r%s/%d,l\n", addr, plen);
|
||||
(void)fflush(asn->as_debug);
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
|
||||
while (fgets(buf, sizeof(buf), asn->as_f) != NULL) {
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug, "<< %s", buf);
|
||||
(void)fflush(asn->as_debug);
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
|
||||
if (rc == 0) {
|
||||
rc = buf[0];
|
||||
switch (rc) {
|
||||
case 'A':
|
||||
/* A - followed by # bytes of answer */
|
||||
sscanf(buf, "A%d\n", &dlen);
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug,
|
||||
"dlen: %d\n", dlen);
|
||||
(void)fflush(asn->as_debug);
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
break;
|
||||
case 'C':
|
||||
case 'D':
|
||||
case 'E':
|
||||
case 'F':
|
||||
/* C - no data returned */
|
||||
/* D - key not found */
|
||||
/* E - multiple copies of key */
|
||||
/* F - some other error */
|
||||
break;
|
||||
}
|
||||
if (rc == 'A')
|
||||
/* skip to next input line */
|
||||
continue;
|
||||
}
|
||||
|
||||
if (dlen == 0)
|
||||
/* out of data, next char read is end code */
|
||||
rc = buf[0];
|
||||
if (rc != 'A')
|
||||
/* either an error off the bat, or a done code */
|
||||
break;
|
||||
|
||||
/* data received, thank you */
|
||||
dlen -= strlen(buf);
|
||||
|
||||
/* origin line is the interesting bit */
|
||||
if (as == 0 && strncasecmp(buf, "origin:", 7) == 0) {
|
||||
sscanf(buf + 7, " AS%u", &as);
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug, "as: %d\n", as);
|
||||
(void)fflush(asn->as_debug);
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
}
|
||||
}
|
||||
|
||||
return (as);
|
||||
}
|
||||
|
||||
void
|
||||
as_shutdown(void *_asn)
|
||||
{
|
||||
struct aslookup *asn = _asn;
|
||||
|
||||
(void)fprintf(asn->as_f, "!q\n");
|
||||
(void)fclose(asn->as_f);
|
||||
|
||||
#ifdef AS_DEBUG_FILE
|
||||
if (asn->as_debug) {
|
||||
(void)fprintf(asn->as_debug, ">> !q\n");
|
||||
(void)fclose(asn->as_debug);
|
||||
}
|
||||
#endif /* AS_DEBUG_FILE */
|
||||
|
||||
free(asn);
|
||||
}
|
||||
34
usr.sbin/traceroute/as.h
Normal file
34
usr.sbin/traceroute/as.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/* $NetBSD: as.h,v 1.4 2011/05/10 01:52:49 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Andrew Brown.
|
||||
*
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
*/
|
||||
|
||||
void *as_setup(const char *);
|
||||
unsigned int as_lookup(void *, char *, sa_family_t);
|
||||
void as_shutdown(void *);
|
||||
36
usr.sbin/traceroute/gnuc.h
Normal file
36
usr.sbin/traceroute/gnuc.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/* $NetBSD: gnuc.h,v 1.2 2002/07/06 21:51:49 wiz Exp $ */
|
||||
|
||||
/* @(#) Header: gnuc.h,v 1.3 95/10/09 02:47:01 leres Exp (LBL) */
|
||||
|
||||
/* inline foo */
|
||||
#ifdef __GNUC__
|
||||
#define inline __inline
|
||||
#else
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Handle new and old "dead" routine prototypes
|
||||
*
|
||||
* For example:
|
||||
*
|
||||
* __dead void foo(void) __attribute__((volatile));
|
||||
*
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#ifndef __dead
|
||||
#define __dead volatile
|
||||
#endif
|
||||
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#ifndef __dead
|
||||
#define __dead
|
||||
#endif
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
146
usr.sbin/traceroute/ifaddrlist.c
Normal file
146
usr.sbin/traceroute/ifaddrlist.c
Normal file
@@ -0,0 +1,146 @@
|
||||
/* $NetBSD: ifaddrlist.c,v 1.10 2011/09/11 01:06:26 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* The Regents of the University of California. 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.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the Computer Systems
|
||||
* Engineering Group at Lawrence Berkeley Laboratory.
|
||||
* 4. Neither the name of the University nor of the Laboratory 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 <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char rcsid[] =
|
||||
"@(#) Header: ifaddrlist.c,v 1.2 97/04/22 13:31:05 leres Exp (LBL)";
|
||||
"@(#) Id: ifaddrlist.c,v 1.9 2000/11/23 20:01:55 leres Exp (LBL)";
|
||||
#else
|
||||
__RCSID("$NetBSD: ifaddrlist.c,v 1.10 2011/09/11 01:06:26 christos Exp $");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SOCKIO_H
|
||||
#include <sys/sockio.h>
|
||||
#endif
|
||||
#include <sys/time.h> /* concession to AIX */
|
||||
|
||||
struct mbuf;
|
||||
struct rtentry;
|
||||
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <memory.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#include "gnuc.h"
|
||||
#ifdef HAVE_OS_PROTO_H
|
||||
#include "os-proto.h"
|
||||
#endif
|
||||
|
||||
#include "ifaddrlist.h"
|
||||
|
||||
/* Not all systems have IFF_LOOPBACK */
|
||||
#ifdef IFF_LOOPBACK
|
||||
#define ISLOOPBACK(p) ((p)->ifa_flags & IFF_LOOPBACK)
|
||||
#else
|
||||
#define ISLOOPBACK(p) (strcmp((p)->ifa_name, "lo0") == 0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Return the interface list
|
||||
*/
|
||||
ssize_t
|
||||
ifaddrlist(struct ifaddrlist **ipaddrp, char *errbuf, size_t buflen)
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
struct ifaddrs *ifap = NULL, *ifa;
|
||||
struct ifaddrlist *al = NULL, *nal;
|
||||
size_t i = 0, maxal = 10;
|
||||
|
||||
if (getifaddrs(&ifap) != 0)
|
||||
goto out;
|
||||
|
||||
if ((al = malloc(maxal * sizeof(*al))) == NULL)
|
||||
goto out;
|
||||
|
||||
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
|
||||
if (ifa->ifa_addr->sa_family != AF_INET)
|
||||
continue;
|
||||
|
||||
/* Must be up */
|
||||
if ((ifa->ifa_flags & IFF_UP) == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Must not be a loopback address (127/8)
|
||||
*/
|
||||
sin = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if (ISLOOPBACK(ifa))
|
||||
if (ntohl(sin->sin_addr.s_addr) == INADDR_LOOPBACK)
|
||||
continue;
|
||||
|
||||
if (i == maxal) {
|
||||
maxal <<= 1;
|
||||
if ((nal = realloc(al, maxal * sizeof(*al))) == NULL)
|
||||
goto out;
|
||||
al = nal;
|
||||
}
|
||||
|
||||
al[i].addr = sin->sin_addr.s_addr;
|
||||
if ((al[i].device = strdup(ifa->ifa_name)) == NULL)
|
||||
goto out;
|
||||
i++;
|
||||
}
|
||||
if ((nal = realloc(al, i * sizeof(*al))) == NULL)
|
||||
goto out;
|
||||
freeifaddrs(ifap);
|
||||
*ipaddrp = nal;
|
||||
return (ssize_t)i;
|
||||
out:
|
||||
if (ifap)
|
||||
freeifaddrs(ifap);
|
||||
if (al) {
|
||||
while (i > 0)
|
||||
free(al[--i].device);
|
||||
free(al);
|
||||
}
|
||||
(void)snprintf(errbuf, buflen, "%s: %s", __func__, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
31
usr.sbin/traceroute/ifaddrlist.h
Normal file
31
usr.sbin/traceroute/ifaddrlist.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/* $NetBSD: ifaddrlist.h,v 1.3 2011/05/11 00:38:28 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that: (1) source code distributions
|
||||
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||
* distributions including binary code include the above copyright notice and
|
||||
* this paragraph in its entirety in the documentation or other materials
|
||||
* provided with the distribution, and (3) all advertising materials mentioning
|
||||
* features or use of this software display the following acknowledgement:
|
||||
* ``This product includes software developed by the University of California,
|
||||
* Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) Header: traceroute.h,v 1.1 97/01/04 19:33:33 leres Locked (LBL)
|
||||
*/
|
||||
|
||||
struct ifaddrlist {
|
||||
uint32_t addr;
|
||||
char *device;
|
||||
};
|
||||
|
||||
ssize_t ifaddrlist(struct ifaddrlist **, char *, size_t);
|
||||
14
usr.sbin/traceroute/mean.awk
Normal file
14
usr.sbin/traceroute/mean.awk
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/awk -f
|
||||
# $NetBSD: mean.awk,v 1.5 1997/10/04 16:31:29 christos Exp $
|
||||
/^ *[0-9]/ {
|
||||
# print out the average time to each hop along a route.
|
||||
tottime = 0; n = 0;
|
||||
for (f = 5; f <= NF; ++f) {
|
||||
if ($f == "ms") {
|
||||
tottime += $(f - 1)
|
||||
++n
|
||||
}
|
||||
}
|
||||
if (n > 0)
|
||||
print $1, tottime/n, median
|
||||
}
|
||||
31
usr.sbin/traceroute/median.awk
Normal file
31
usr.sbin/traceroute/median.awk
Normal file
@@ -0,0 +1,31 @@
|
||||
#!/bin/awk -f
|
||||
# $NetBSD: median.awk,v 1.5 1997/10/04 16:31:32 christos Exp $
|
||||
/^ *[0-9]/ {
|
||||
# print out the median time to each hop along a route.
|
||||
tottime = 0; n = 0;
|
||||
for (f = 5; f <= NF; ++f) {
|
||||
if ($f == "ms") {
|
||||
++n
|
||||
time[n] = $(f - 1)
|
||||
}
|
||||
}
|
||||
if (n > 0) {
|
||||
# insertion sort the times to find the median
|
||||
for (i = 2; i <= n; ++i) {
|
||||
v = time[i]; j = i - 1;
|
||||
while (time[j] > v) {
|
||||
time[j+1] = time[j];
|
||||
j = j - 1;
|
||||
if (j < 0)
|
||||
break;
|
||||
}
|
||||
time[j+1] = v;
|
||||
}
|
||||
if (n > 1 && (n % 2) == 0)
|
||||
median = (time[n/2] + time[(n/2) + 1]) / 2
|
||||
else
|
||||
median = time[(n+1)/2]
|
||||
|
||||
print $1, median
|
||||
}
|
||||
}
|
||||
72
usr.sbin/traceroute/prog_ops.h
Normal file
72
usr.sbin/traceroute/prog_ops.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/* $NetBSD: prog_ops.h,v 1.1 2010/12/15 00:09:41 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010 The NetBSD Foundation, Inc.
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 _PROG_OPS_H_
|
||||
#define _PROG_OPS_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <poll.h>
|
||||
|
||||
struct prog_ops {
|
||||
int (*op_init)(void);
|
||||
|
||||
int (*op_socket)(int, int, int);
|
||||
int (*op_setsockopt)(int, int, int, const void *, socklen_t);
|
||||
int (*op_shutdown)(int, int);
|
||||
|
||||
int (*op_poll)(struct pollfd *, nfds_t, int);
|
||||
|
||||
ssize_t (*op_recvfrom)(int, void *, size_t, int,
|
||||
struct sockaddr *, socklen_t *);
|
||||
ssize_t (*op_sendto)(int, const void *, size_t, int,
|
||||
const struct sockaddr *, socklen_t);
|
||||
|
||||
int (*op_close)(int);
|
||||
|
||||
int (*op_connect)(int, const struct sockaddr *, socklen_t);
|
||||
int (*op_getsockname)(int, struct sockaddr *, socklen_t *);
|
||||
|
||||
int (*op_sysctl)(const int *, u_int, void *, size_t *,
|
||||
const void *, size_t);
|
||||
};
|
||||
extern const struct prog_ops prog_ops;
|
||||
|
||||
#define prog_init prog_ops.op_init
|
||||
#define prog_socket prog_ops.op_socket
|
||||
#define prog_setsockopt prog_ops.op_setsockopt
|
||||
#define prog_shutdown prog_ops.op_shutdown
|
||||
#define prog_poll prog_ops.op_poll
|
||||
#define prog_recvfrom prog_ops.op_recvfrom
|
||||
#define prog_sendto prog_ops.op_sendto
|
||||
#define prog_close prog_ops.op_close
|
||||
#define prog_connect prog_ops.op_connect
|
||||
#define prog_getsockname prog_ops.op_getsockname
|
||||
#define prog_sysctl prog_ops.op_sysctl
|
||||
|
||||
#endif /* _PROG_OPS_H_ */
|
||||
419
usr.sbin/traceroute/traceroute.8
Normal file
419
usr.sbin/traceroute/traceroute.8
Normal file
@@ -0,0 +1,419 @@
|
||||
.\" $NetBSD: traceroute.8,v 1.29 2011/09/11 01:06:26 christos Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1989, 1995, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms are permitted
|
||||
.\" provided that the above copyright notice and this paragraph are
|
||||
.\" duplicated in all such forms and that any documentation,
|
||||
.\" advertising materials, and other materials related to such
|
||||
.\" distribution and use acknowledge that the software was developed
|
||||
.\" by the University of California, Berkeley. The name of the
|
||||
.\" University may not be used to endorse or promote products derived
|
||||
.\" from this software without specific prior written permission.
|
||||
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.\" Id: traceroute.8,v 1.19 2000/09/21 08:44:19 leres Exp
|
||||
.\"
|
||||
.TH TRACEROUTE 8 "21 September 2000"
|
||||
.UC 6
|
||||
.SH NAME
|
||||
traceroute \- print the route packets take to network host
|
||||
.SH SYNOPSIS
|
||||
.na
|
||||
.B traceroute
|
||||
[
|
||||
.B \-aDFPIdlMnrvx
|
||||
] [
|
||||
.B \-f
|
||||
.I first_ttl
|
||||
]
|
||||
.br
|
||||
.ti +8
|
||||
[
|
||||
.B \-g
|
||||
.I gateway
|
||||
] [
|
||||
.B \-i
|
||||
.I iface
|
||||
] [
|
||||
.B \-m
|
||||
max_ttl
|
||||
]
|
||||
.br
|
||||
.ti +8
|
||||
[
|
||||
.B \-p
|
||||
.I port
|
||||
] [
|
||||
.B \-q
|
||||
.I nqueries
|
||||
] [
|
||||
.B \-s
|
||||
.I src_addr
|
||||
]
|
||||
.br
|
||||
.ti +8
|
||||
[
|
||||
.B \-t
|
||||
.I tos
|
||||
] [
|
||||
.B \-w
|
||||
.I waittime
|
||||
] [
|
||||
.B \-z
|
||||
.I pausemsecs
|
||||
]
|
||||
] [
|
||||
.B \-A
|
||||
.I as_server
|
||||
]
|
||||
.br
|
||||
.ti +8
|
||||
.I host
|
||||
[
|
||||
.I packetlen
|
||||
]
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
The Internet is a large and complex aggregation of
|
||||
network hardware, connected together by gateways.
|
||||
Tracking the route one's packets follow (or finding the miscreant
|
||||
gateway that's discarding your packets) can be difficult.
|
||||
.I Traceroute
|
||||
uses the IP protocol `time to live' field and attempts to elicit an
|
||||
ICMP TIME_EXCEEDED response from each gateway along the path to some
|
||||
host.
|
||||
.PP
|
||||
The only mandatory parameter is the destination host name or IP number.
|
||||
The default probe datagram length is 40 bytes, but this may be increased
|
||||
by specifying a packet length (in bytes) after the destination host
|
||||
name.
|
||||
.PP
|
||||
Other options are:
|
||||
.TP
|
||||
.B \-a
|
||||
Turn on AS# lookups for each hop encountered.
|
||||
.TP
|
||||
.B \-A
|
||||
Turn on AS# lookups and use the given server instead of the default.
|
||||
.TP
|
||||
.B \-d
|
||||
Turn on socket-level debugging.
|
||||
.TP
|
||||
.B \-D
|
||||
Dump the packet data to standard error before transmitting it.
|
||||
.TP
|
||||
.B \-f
|
||||
Set the initial time-to-live used in the first outgoing probe packet.
|
||||
.TP
|
||||
.B \-F
|
||||
Set the "don't fragment" bit.
|
||||
.TP
|
||||
.B \-g
|
||||
Specify a loose source route gateway (8 maximum).
|
||||
.TP
|
||||
.B \-i
|
||||
Specify a network interface to obtain the source IP address for
|
||||
outgoing probe packets. This is normally only useful on a multi-homed
|
||||
host. (See the
|
||||
.B \-s
|
||||
flag for another way to do this.)
|
||||
.TP
|
||||
.B \-I
|
||||
Use ICMP ECHO instead of UDP datagrams.
|
||||
.TP
|
||||
.B \-l
|
||||
Display the ttl value of the returned packet. This is useful for
|
||||
checking for asymmetric routing.
|
||||
.TP
|
||||
.B \-m
|
||||
Set the max time-to-live (max number of hops) used in outgoing probe
|
||||
packets. The default value is taken from the
|
||||
.I net.inet.ip.ttl
|
||||
sysctl(3) variable.
|
||||
.TP
|
||||
.B \-M
|
||||
If found, show the MPLS Label and the Experimental (EXP) bit for the hop.
|
||||
.TP
|
||||
.B \-n
|
||||
Print hop addresses numerically rather than symbolically and numerically
|
||||
(saves a nameserver address-to-name lookup for each gateway found on the
|
||||
path).
|
||||
.TP
|
||||
.B \-p
|
||||
Set the base UDP port number used in probes (default is 33434).
|
||||
Traceroute hopes that nothing is listening on UDP ports
|
||||
.I base
|
||||
to
|
||||
.I base + nhops \- 1
|
||||
at the destination host (so an ICMP PORT_UNREACHABLE message will
|
||||
be returned to terminate the route tracing). If something is
|
||||
listening on a port in the default range, this option can be used
|
||||
to pick an unused port range.
|
||||
.TP
|
||||
.B \-P
|
||||
Set the "don't fragment" bit, and use the next hop mtu each time we get
|
||||
the "need fragmentation" error, thus probing the path MTU.
|
||||
.TP
|
||||
.B \-q
|
||||
Set the number of probe packets sent for each hop. By default, traceroute
|
||||
sends three probe packets.
|
||||
.TP
|
||||
.B \-r
|
||||
Bypass the normal routing tables and send directly to a host on an attached
|
||||
network.
|
||||
If the host is not on a directly-attached network,
|
||||
an error is returned.
|
||||
This option can be used to ping a local host through an interface
|
||||
that has no route through it (e.g., after the interface was dropped by
|
||||
.IR routed (8)).
|
||||
.TP
|
||||
.B \-s
|
||||
Use the following IP address (which usually is given as an IP number, not
|
||||
a hostname) as the source address in outgoing probe packets. On
|
||||
multi-homed hosts (those with more than one IP
|
||||
address), this option can be used to
|
||||
force the source address to be something other than the IP address
|
||||
of the interface the probe packet is sent on. If the IP address
|
||||
is not one of this machine's interface addresses, an error is
|
||||
returned and nothing is sent. (See the
|
||||
.B \-i
|
||||
flag for another way to do this.)
|
||||
.TP
|
||||
.B \-t
|
||||
Set the
|
||||
.I type-of-service
|
||||
in probe packets to the following value (default zero). The value must be
|
||||
a decimal integer in the range 0 to 255. This option can be used to
|
||||
see if different types-of-service result in different paths. (If you
|
||||
are not running 4.4BSD, this may be academic since the normal network
|
||||
services like telnet and ftp don't let you control the TOS).
|
||||
Not all values of TOS are legal or
|
||||
meaningful \- see the IP spec for definitions. Useful values are
|
||||
probably
|
||||
.RB ` -t
|
||||
.IR 16 '
|
||||
(low delay) and
|
||||
.RB ` -t
|
||||
.IR 8 '
|
||||
(high throughput).
|
||||
.TP
|
||||
.B \-v
|
||||
Verbose output. Received ICMP packets other than TIME_EXCEEDED and
|
||||
UNREACHABLEs are listed.
|
||||
.TP
|
||||
.B \-w
|
||||
Set the time (in seconds) to wait for a response to a probe (default 5
|
||||
sec.).
|
||||
.TP
|
||||
.B \-x
|
||||
Toggle ip checksums. Normally, this prevents traceroute from calculating
|
||||
ip checksums. In some cases, the operating system can overwrite parts of
|
||||
the outgoing packet but not recalculate the checksum (so in some cases
|
||||
the default is to not calculate checksums and using
|
||||
.B \-x
|
||||
causes them to be calculated). Note that checksums are usually required
|
||||
for the last hop when using ICMP ECHO probes
|
||||
.RB ( \-I ).
|
||||
So they are always calculated when using ICMP.
|
||||
.TP
|
||||
.B \-z
|
||||
Set the time (in milliseconds) to pause between probes (default 0).
|
||||
Some systems such as Solaris and routers such as Ciscos rate limit
|
||||
icmp messages. A good value to use with this this is 500 (e.g. 1/2 second).
|
||||
.PP
|
||||
This program attempts to trace the route an IP packet would follow to some
|
||||
internet host by launching UDP probe
|
||||
packets with a small ttl (time to live) then listening for an
|
||||
ICMP "time exceeded" reply from a gateway. We start our probes
|
||||
with a ttl of one and increase by one until we get an ICMP "port
|
||||
unreachable" (which means we got to "host") or hit a max (which
|
||||
defaults to 30 hops \*[Am] can be changed with the
|
||||
.B \-m
|
||||
flag). Three
|
||||
probes (change with
|
||||
.B \-q
|
||||
flag) are sent at each ttl setting and a
|
||||
line is printed showing the ttl, address of the gateway and
|
||||
round trip time of each probe. If the probe answers come from
|
||||
different gateways, the address of each responding system will
|
||||
be printed. If there is no response within a 5 sec. timeout
|
||||
interval (changed with the
|
||||
.B \-w
|
||||
flag), a "*" is printed for that
|
||||
probe.
|
||||
.PP
|
||||
We don't want the destination
|
||||
host to process the UDP probe packets so the destination port is set to an
|
||||
unlikely value (if some clod on the destination is using that
|
||||
value, it can be changed with the
|
||||
.B \-p
|
||||
flag).
|
||||
.PP
|
||||
A sample use and output might be:
|
||||
|
||||
.RS
|
||||
.nf
|
||||
[yak 71]% traceroute nis.nsf.net.
|
||||
traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 38 byte packet
|
||||
1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms
|
||||
2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
|
||||
3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
|
||||
4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms
|
||||
5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms
|
||||
6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms
|
||||
7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms
|
||||
8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms
|
||||
9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms
|
||||
10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms
|
||||
11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms
|
||||
.fi
|
||||
.RE
|
||||
|
||||
Note that lines 2 \*[Am] 3 are the same. This is due to a buggy
|
||||
kernel on the 2nd hop system \- lilac-dmc.Berkeley.EDU \- that forwards
|
||||
packets with a zero ttl (a bug in the distributed version
|
||||
of 4.3BSD). Note that you have to guess what path
|
||||
the packets are taking cross-country since the NSFNET (129.140)
|
||||
doesn't supply address-to-name translations for its NSSes.
|
||||
.PP
|
||||
A more interesting example is:
|
||||
|
||||
.RS
|
||||
.nf
|
||||
[yak 72]% traceroute allspice.lcs.mit.edu.
|
||||
traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max
|
||||
1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
|
||||
2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms
|
||||
3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms
|
||||
4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms
|
||||
5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms
|
||||
6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms
|
||||
7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms
|
||||
8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms
|
||||
9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms
|
||||
10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms
|
||||
11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms
|
||||
12 * * *
|
||||
13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms
|
||||
14 * * *
|
||||
15 * * *
|
||||
16 * * *
|
||||
17 * * *
|
||||
18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms
|
||||
.fi
|
||||
.RE
|
||||
|
||||
Note that the gateways 12, 14, 15, 16 \*[Am] 17 hops away
|
||||
either don't send ICMP "time exceeded" messages or send them
|
||||
with a ttl too small to reach us. 14 \- 17 are running the
|
||||
MIT C Gateway code that doesn't send "time exceeded"s. God
|
||||
only knows what's going on with 12.
|
||||
.PP
|
||||
The silent gateway 12 in the above may be the result of a bug in
|
||||
the 4.[23]BSD network code (and its derivatives): 4.x (x \(<= 3)
|
||||
sends an unreachable message using whatever ttl remains in the
|
||||
original datagram. Since, for gateways, the remaining ttl is
|
||||
zero, the ICMP "time exceeded" is guaranteed to not make it back
|
||||
to us. The behavior of this bug is slightly more interesting
|
||||
when it appears on the destination system:
|
||||
|
||||
.RS
|
||||
.nf
|
||||
1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
|
||||
2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms
|
||||
3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms
|
||||
4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms
|
||||
5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms
|
||||
6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms
|
||||
7 * * *
|
||||
8 * * *
|
||||
9 * * *
|
||||
10 * * *
|
||||
11 * * *
|
||||
12 * * *
|
||||
13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms !
|
||||
.fi
|
||||
.RE
|
||||
|
||||
Notice that there are 12 "gateways" (13 is the final
|
||||
destination) and exactly the last half of them are "missing".
|
||||
What's really happening is that rip (a Sun-3 running Sun OS3.5)
|
||||
is using the ttl from our arriving datagram as the ttl in its
|
||||
ICMP reply. So, the reply will time out on the return path
|
||||
(with no notice sent to anyone since ICMP's aren't sent for
|
||||
ICMP's) until we probe with a ttl that's at least twice the path
|
||||
length. I.e., rip is really only 7 hops away. A reply that
|
||||
returns with a ttl of 1 is a clue this problem exists.
|
||||
Traceroute prints a "!" after the time if the ttl is \(<= 1.
|
||||
Since vendors ship a lot of obsolete (DEC's ULTRIX, Sun 3.x) or
|
||||
non-standard (HP-UX) software, expect to see this problem
|
||||
frequently and/or take care picking the target host of your
|
||||
probes.
|
||||
|
||||
Other possible annotations after the time are
|
||||
.BR !H ,
|
||||
.BR !N ,
|
||||
or
|
||||
.B !P
|
||||
(host, network or protocol unreachable),
|
||||
.B !S
|
||||
(source route failed),
|
||||
.B !F\-<pmtu>
|
||||
(fragmentation needed \- the RFC1191 Path MTU Discovery value is displayed),
|
||||
.B !X
|
||||
(communication administratively prohibited),
|
||||
.B !V
|
||||
(host precedence violation),
|
||||
.B !C
|
||||
(precedence cutoff in effect), or
|
||||
.B !\*[Lt]N\*[Gt]
|
||||
(ICMP unreachable code \*[Lt]num\*[Gt]).
|
||||
These are defined by RFC1812 (which supersedes RFC1716).
|
||||
If almost all the probes result in some kind of unreachable, traceroute
|
||||
will give up and exit.
|
||||
|
||||
.RS
|
||||
.nf
|
||||
traceroute \-g 10.3.0.5 128.182.0.0
|
||||
.fi
|
||||
.RE
|
||||
|
||||
will show the path from the Cambridge Mailbridge to PSC, while
|
||||
|
||||
.RS
|
||||
.nf
|
||||
traceroute \-g 192.5.146.4 \-g 10.3.0.5 35.0.0.0
|
||||
.fi
|
||||
.RE
|
||||
|
||||
will show the path from the Cambridge Mailbridge to Merit, using PSC to
|
||||
reach the Mailbridge.
|
||||
.PP
|
||||
This program is intended for use in network testing, measurement
|
||||
and management.
|
||||
It should be used primarily for manual fault isolation.
|
||||
Because of the load it could impose on the network, it is unwise to use
|
||||
.I traceroute
|
||||
during normal operations or from automated scripts.
|
||||
.SH SEE ALSO
|
||||
netstat(1), ping(8)
|
||||
.SH AUTHOR
|
||||
Implemented by Van Jacobson from a suggestion by Steve Deering. Debugged
|
||||
by a cast of thousands with particularly cogent suggestions or fixes from
|
||||
C. Philip Wood, Tim Seaver and Ken Adelman.
|
||||
.LP
|
||||
The current version is available via anonymous ftp:
|
||||
.LP
|
||||
.RS
|
||||
.I ftp://ftp.ee.lbl.gov/traceroute.tar.gz
|
||||
.RE
|
||||
.SH BUGS
|
||||
Please send bug reports to traceroute@ee.lbl.gov.
|
||||
.PP
|
||||
The AS number capability reports information that may sometimes be
|
||||
inaccurate due to discrepancies between the contents of the routing
|
||||
database server and the current state of the Internet.
|
||||
1905
usr.sbin/traceroute/traceroute.c
Normal file
1905
usr.sbin/traceroute/traceroute.c
Normal file
File diff suppressed because it is too large
Load Diff
55
usr.sbin/traceroute/traceroute_hostops.c
Normal file
55
usr.sbin/traceroute/traceroute_hostops.c
Normal file
@@ -0,0 +1,55 @@
|
||||
/* $NetBSD: traceroute_hostops.c,v 1.1 2010/12/15 00:09:41 pooka Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2010 The NetBSD Foundation, Inc.
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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/cdefs.h>
|
||||
#ifndef lint
|
||||
__RCSID("$NetBSD: traceroute_hostops.c,v 1.1 2010/12/15 00:09:41 pooka Exp $");
|
||||
#endif /* !lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include <poll.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "prog_ops.h"
|
||||
|
||||
const struct prog_ops prog_ops = {
|
||||
.op_socket = socket,
|
||||
.op_setsockopt = setsockopt,
|
||||
.op_shutdown = shutdown,
|
||||
.op_poll = poll,
|
||||
.op_recvfrom = recvfrom,
|
||||
.op_sendto = sendto,
|
||||
.op_close = close,
|
||||
.op_connect = connect,
|
||||
.op_getsockname = getsockname,
|
||||
.op_sysctl = sysctl,
|
||||
};
|
||||
59
usr.sbin/traceroute/traceroute_rumpops.c
Normal file
59
usr.sbin/traceroute/traceroute_rumpops.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/* $NetBSD: traceroute_rumpops.c,v 1.1 2010/12/15 00:09:42 pooka Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2010 The NetBSD Foundation, Inc.
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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/cdefs.h>
|
||||
#ifndef lint
|
||||
__RCSID("$NetBSD: traceroute_rumpops.c,v 1.1 2010/12/15 00:09:42 pooka Exp $");
|
||||
#endif /* !lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <poll.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rump/rump.h>
|
||||
#include <rump/rump_syscalls.h>
|
||||
#include <rump/rumpclient.h>
|
||||
|
||||
#include "prog_ops.h"
|
||||
|
||||
const struct prog_ops prog_ops = {
|
||||
.op_init = rumpclient_init,
|
||||
|
||||
.op_socket = rump_sys_socket,
|
||||
.op_setsockopt= rump_sys_setsockopt,
|
||||
.op_shutdown = rump_sys_shutdown,
|
||||
.op_poll = rump_sys_poll,
|
||||
.op_recvfrom = rump_sys_recvfrom,
|
||||
.op_sendto = rump_sys_sendto,
|
||||
.op_close = rump_sys_close,
|
||||
.op_connect = rump_sys_connect,
|
||||
.op_getsockname=rump_sys_getsockname,
|
||||
.op_sysctl = rump_sys___sysctl,
|
||||
};
|
||||
272
usr.sbin/traceroute/trrt2netbsd
Executable file
272
usr.sbin/traceroute/trrt2netbsd
Executable file
@@ -0,0 +1,272 @@
|
||||
#!/usr/local/bin/perl
|
||||
#
|
||||
# $NetBSD: trrt2netbsd,v 1.4 1999/06/16 20:47:57 is Exp $
|
||||
#
|
||||
# Perl script to convert a standard distribution directory for traceroute into
|
||||
# a NetBSD source tree.
|
||||
#
|
||||
# This is done as a script so that as each distribution is released,
|
||||
# only changes from the previous one need to be dealt with as
|
||||
# modifications to this script and related files. This should
|
||||
# reduce the cost of updating from a new release of traceroute by an
|
||||
# order of magnitude (or more?)
|
||||
#
|
||||
# This script requires two environment variables set:
|
||||
# SRCDIR - traceroute source directory
|
||||
# TARGETDIR - name of the high level directory to make
|
||||
#
|
||||
# Written by Christos Zoulas Oct 2nd, 1997 for traceroute-1.4a5
|
||||
#
|
||||
|
||||
$version = "1.4a5";
|
||||
|
||||
# definitions ...
|
||||
|
||||
@subdirs = ("usr.sbin/traceroute");
|
||||
|
||||
@trrtf = ("ifaddrlist.c", "savestr.c", "traceroute.c");
|
||||
|
||||
@trrthf = ("gnuc.h", "ifaddrlist.h", "savestr.h");
|
||||
|
||||
@trrtmf = ("traceroute.8");
|
||||
@trrtdf = ("CHANGES", "README");
|
||||
@trrtaf = ("mean.awk", "median.awk");
|
||||
|
||||
|
||||
# sed edit list: file, sed-program
|
||||
%sedlist = ();
|
||||
|
||||
#
|
||||
# Utility Subroutines
|
||||
#
|
||||
|
||||
sub makedir {
|
||||
system("mkdir -p @_");
|
||||
}
|
||||
|
||||
# &fixrcs (fromfile, tofile);
|
||||
sub fixrcs
|
||||
{
|
||||
my ($f, $t) = @_;
|
||||
my @keywords = ("Author", "Date", "Header", "Id", "Locker", "Log",
|
||||
"Name", "RCSfile", "Revision", "Source", "State");
|
||||
my $state = 0;
|
||||
my $hdr = 0;
|
||||
|
||||
open(IFILE, "<$f") || die "Cannot open $f";
|
||||
open(OFILE, ">$t") || die "Cannot create $t";
|
||||
|
||||
if ($t =~ /.*\.[0-9]/) {
|
||||
print OFILE '.\\" $', 'NetBSD', '$', "\n.\\\"", "\n";
|
||||
}
|
||||
elsif ($t =~ /.*\.[ch]/) {
|
||||
print OFILE "/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
|
||||
}
|
||||
elsif ($t =~ /.*\.[yl]/) {
|
||||
$hdr = 1;
|
||||
}
|
||||
else {
|
||||
print OFILE '$', 'NetBSD', '$', "\n";
|
||||
}
|
||||
while (<IFILE>) {
|
||||
if ($hdr == 1) {
|
||||
if (/%{/) {
|
||||
print OFILE "%{\n/*\t", '$', 'NetBSD', '$', "\t*/\n\n";
|
||||
$hdr = 0;
|
||||
next;
|
||||
}
|
||||
}
|
||||
if ($state == 2) {
|
||||
if (/#endif/) {
|
||||
print OFILE "#else\n__RCSID(", '"$', 'NetBSD', '$"',
|
||||
");\n#endif\n";
|
||||
$state = 0;
|
||||
}
|
||||
}
|
||||
if ($state == 1) {
|
||||
print OFILE "#if 0\n";
|
||||
$state = 2;
|
||||
}
|
||||
if (/#ifndef lint/) {
|
||||
print OFILE "#include <sys/cdefs.h>\n";
|
||||
$state = 1;
|
||||
}
|
||||
foreach $key (@keywords) {
|
||||
s/\$$key\$/$key/g;
|
||||
s/\$$key:(.*)\$/$key:$1/g;
|
||||
}
|
||||
print OFILE $_;
|
||||
}
|
||||
close(IFILE) || die "closing input file";
|
||||
close(OFILE) || die "closing output file";
|
||||
}
|
||||
|
||||
# ©files (fromdir, todir, list of files);
|
||||
sub copyfiles {
|
||||
local ($fdir, $tdir, @list) = @_;
|
||||
local ($f);
|
||||
|
||||
foreach $f (@list) {
|
||||
print " $fdir/$f --> $tdir/$f\n";
|
||||
&fixrcs("$fdir/$f", "$tdir/$f");
|
||||
}
|
||||
}
|
||||
|
||||
# ©file (fromfile, tofile);
|
||||
sub copyfile {
|
||||
local ($f, $t) = @_;
|
||||
|
||||
print " $f --> $t\n";
|
||||
system ("cp $f $t");
|
||||
}
|
||||
|
||||
sub uniq {
|
||||
local (@inlist) = @_;
|
||||
local (@outlist);
|
||||
|
||||
@outlist = ($inlist[0]);
|
||||
for ( $i=1; $i < @inlist; $i++ ) {
|
||||
if ($inlist[$i] ne $inlist[$i-1]) {
|
||||
push (@outlist, $inlist[$i]);
|
||||
}
|
||||
}
|
||||
|
||||
@outlist;
|
||||
}
|
||||
|
||||
sub dumpsrcs {
|
||||
local (@names) = @_;
|
||||
local ($count);
|
||||
|
||||
$count = 0;
|
||||
while ($f = pop(@names)) {
|
||||
print ODATA "$f ";
|
||||
if ($count == 5 && @names > 0) {
|
||||
print ODATA "\\\n";
|
||||
$count = 0;
|
||||
} else {
|
||||
$count += 1;
|
||||
}
|
||||
}
|
||||
if ($count != 0) {
|
||||
print ODATA "\n";
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Main program.
|
||||
#
|
||||
|
||||
$srcdir = $ENV{'SRCDIR'};
|
||||
$targetdir = $ENV{'TARGETDIR'};
|
||||
$incdirs = "-I. -I$srcdir/config -I$srcdir";
|
||||
|
||||
if (!$srcdir | !targetdir) {
|
||||
die "You must define the environment variables SRCDIR and TARGETDIR.\n"
|
||||
}
|
||||
print "Making the NetBSD directory tree.\n";
|
||||
foreach $f (@subdirs) {
|
||||
print " -->$f\n";
|
||||
makedir ("$targetdir/$f");
|
||||
}
|
||||
|
||||
print "Populating the usr.sbin/traceroute directory.\n";
|
||||
©files ("$srcdir", "$targetdir/usr.sbin/traceroute", @trrtf, @trrthf, @trrtdf,
|
||||
@trrtmf, @trrtaf);
|
||||
|
||||
#
|
||||
# Build makefiles
|
||||
#
|
||||
|
||||
$first = "True";
|
||||
while ($line = <DATA>) {
|
||||
chop ($line);
|
||||
if (substr($line,0,2) eq "%%") {
|
||||
@cmd = split (/ /,$line);
|
||||
if ($cmd[1] eq "file") {
|
||||
print "Building $targetdir/$cmd[2]\n";
|
||||
if ($first eq "") {
|
||||
close (ODATA);
|
||||
} else {
|
||||
$first = "";
|
||||
}
|
||||
open (ODATA, ">$targetdir/$cmd[2]") ||
|
||||
die "Could not create $targetdir/$cmd[2]";
|
||||
} elsif ($cmd[1] eq "awks") {
|
||||
print " Defining AWKS\n";
|
||||
if ($first) {
|
||||
die "Data file must start with a %% file!";
|
||||
}
|
||||
print ODATA "AWKS=\t";
|
||||
&dumpsrcs (@trrtaf);
|
||||
} elsif ($cmd[1] eq "srcs") {
|
||||
print " Defining SRCS\n";
|
||||
if ($first) {
|
||||
die "Data file must start with a %% file!";
|
||||
}
|
||||
print ODATA "SRCS=\t";
|
||||
&dumpsrcs (@trrtf);
|
||||
} elsif ($cmd[1] eq "man") {
|
||||
print " Defining MAN\n";
|
||||
if ($first) {
|
||||
die "Data file must start with a %% file!";
|
||||
}
|
||||
print ODATA "MAN=\t";
|
||||
&dumpsrcs (@trrtmf);
|
||||
} elsif ($cmd[1] eq "version") {
|
||||
print " Defining VERSION\n";
|
||||
print ODATA "char version[] = \"$version\";";
|
||||
} elsif ($cmd[1] eq "NetBSD") {
|
||||
if ($first) {
|
||||
die "Data section must start with a %% file!";
|
||||
}
|
||||
print ODATA "$cmd[2] \$"."NetBSD".": \$ $cmd[3]\n";
|
||||
}
|
||||
} else {
|
||||
if ($first) {
|
||||
die "Data file must start with a %% file!";
|
||||
}
|
||||
print ODATA "$line\n";
|
||||
}
|
||||
}
|
||||
close (ODATA);
|
||||
|
||||
#
|
||||
# Sed transformations of files
|
||||
#
|
||||
foreach $n (keys(%sedlist)) {
|
||||
print "Modifying $n\n";
|
||||
system ("cd $targetdir; sed $sedlist{$n} $n > tmp; mv -f tmp $n");
|
||||
}
|
||||
|
||||
#
|
||||
# end of the script
|
||||
#
|
||||
|
||||
# what follows is the data for makefiles and other special files
|
||||
# that need to be created.
|
||||
|
||||
__END__
|
||||
%% file usr.sbin/traceroute/Makefile
|
||||
%% NetBSD #
|
||||
|
||||
WARNS?= 1
|
||||
PROG= traceroute
|
||||
%% man
|
||||
|
||||
CPPFLAGS+=-DHAVE_MALLOC_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SOCKIO_H=1
|
||||
CPPFLAGS+=-DHAVE_STRERROR=1 -DHAVE_SETLINEBUF=1 -DHAVE_SOCKADDR_SA_LEN=1
|
||||
CPPFLAGS+=-DHAVE_RAW_OPTIONS=1
|
||||
|
||||
BINOWN= root
|
||||
BINMODE=4555
|
||||
|
||||
%% srcs
|
||||
SRCS+= version.c
|
||||
|
||||
%% awks
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
%% file usr.sbin/traceroute/version.c
|
||||
%% NetBSD /* */
|
||||
%% version
|
||||
2
usr.sbin/traceroute/version.c
Normal file
2
usr.sbin/traceroute/version.c
Normal file
@@ -0,0 +1,2 @@
|
||||
/* $NetBSD: version.c,v 1.3 2011/09/11 01:06:26 christos Exp $ */
|
||||
char version[] = "1.4a12";
|
||||
Reference in New Issue
Block a user