diff -ur mtr-0.68/Makefile.in mtr-0.69/Makefile.in --- mtr-0.68/Makefile.in Tue Jan 11 09:37:48 2005 +++ mtr-0.69/Makefile.in Tue Jan 11 09:48:02 2005 @@ -564,7 +564,7 @@ chmod u+s $(DESTDIR)$(sbindir)/mtr distclean-local: cp Makefile.dist Makefile - rm -f *.orig + rm -f *.orig *.rej # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -ur mtr-0.68/NEWS mtr-0.69/NEWS --- mtr-0.68/NEWS Tue Jan 11 09:40:47 2005 +++ mtr-0.69/NEWS Thu Jan 13 09:21:36 2005 @@ -1,4 +1,10 @@ WHAT'S NEW? + v0.69 make distclean should now also remove "rej" files. + Antonio Querubin: update getopt.h . More cleanups using + new infrastructure. + rcw: Fixed IPV6 support: When compiled in an IPV6-supporting + environment, but when the kernel doesn't support IPV6, mtr would + fail to start. v0.68 included some old patches. included patch from Antonio Querubin for better IPV6 support restructured some more whitespace. diff -ur mtr-0.68/configure mtr-0.69/configure --- mtr-0.68/configure Tue Jan 11 09:37:49 2005 +++ mtr-0.69/configure Tue Jan 11 09:46:57 2005 @@ -795,7 +795,7 @@ # Define the identity of the package. PACKAGE=mtr -VERSION=0.68 +VERSION=0.69 cat >> confdefs.h <, but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif #ifdef __cplusplus extern "C" { @@ -36,7 +64,7 @@ On entry to `getopt', zero means this is the first call; initialize. - When `getopt' returns EOF, this is the index of the first of the + When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next @@ -53,6 +81,7 @@ extern int optopt; +#ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is @@ -76,11 +105,7 @@ struct option { -#if defined (__STDC__) && __STDC__ const char *name; -#else - char *name; -#endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; @@ -93,37 +118,60 @@ #define no_argument 0 #define required_argument 1 #define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ -#if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW; #else /* not __GNU_LIBRARY__ */ -extern int getopt (void); +extern int getopt (); #endif /* __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (void); -extern int getopt_long (void); -extern int getopt_long_only (void); -extern int _getopt_internal (void); -#endif /* __STDC__ */ +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; +extern int getopt_long_only (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; + +#endif #ifdef __cplusplus } #endif -#endif /* _GETOPT_H */ +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff -ur mtr-0.68/net.c mtr-0.69/net.c --- mtr-0.68/net.c Tue Jan 11 09:34:34 2005 +++ mtr-0.69/net.c Thu Jan 13 09:13:53 2005 @@ -729,8 +729,6 @@ return -1; #ifdef ENABLE_IPV6 sendsock6 = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - if (sendsock6 < 0) - return -1; #endif #ifdef IP_HDRINCL @@ -747,8 +745,6 @@ return -1; #ifdef ENABLE_IPV6 recvsock6 = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - if (recvsock6 < 0) - return -1; #endif return 0; @@ -779,6 +775,10 @@ break; #ifdef ENABLE_IPV6 case AF_INET6: + if (sendsock6 < 0 || recvsock6 < 0) { + fprintf( stderr, "Could not open IPv6 socket\n" ); + exit( EXIT_FAILURE ); + } sendsock = sendsock6; recvsock = recvsock6; addrcpy( (void *) &(rsa6->sin6_addr), host->h_addr, AF_INET6 ); diff -ur mtr-0.68/net.h mtr-0.69/net.h --- mtr-0.68/net.h Tue Jan 11 09:25:48 2005 +++ mtr-0.69/net.h Wed Jan 12 11:25:28 2005 @@ -39,11 +39,7 @@ int net_max(void); int net_min(void); int net_last(int at); -#ifdef ENABLE_IPV6 -struct in6_addr * net_addr(int at); -#else -struct in_addr * net_addr(int at); -#endif +ip_t * net_addr(int at); int net_loss(int at); int net_drop(int at); int net_last(int at); @@ -56,11 +52,7 @@ int net_jworst(int at); int net_javg(int at); int net_jinta(int at); -#ifdef ENABLE_IPV6 -struct in6_addr * net_addrs(int at, int i); -#else -struct in_addr * net_addrs(int at, int i); -#endif +ip_t * net_addrs(int at, int i); char *net_localaddr(void); int net_send_batch(void); @@ -124,8 +116,4 @@ extern unsigned char fld_active[]; extern char available_options[]; -#ifdef ENABLE_IPV6 -struct in6_addr unspec_addr; -#else -struct in_addr unspec_addr; -#endif +ip_t unspec_addr; diff -ur mtr-0.68/raw.h mtr-0.69/raw.h --- mtr-0.68/raw.h Tue Jan 11 09:10:13 2005 +++ mtr-0.69/raw.h Wed Jan 12 11:25:28 2005 @@ -21,8 +21,4 @@ /* Prototypes for raw.c */ void raw_rawping(int host, int msec); -#ifdef ENABLE_IPV6 -void raw_rawhost(int host, struct in6_addr * addr); -#else -void raw_rawhost(int host, struct in_addr * addr); -#endif +void raw_rawhost(int host, ip_t * addr); .