|
Packit |
b802ec |
/*
|
|
Packit |
b802ec |
mtr -- a network diagnostic tool
|
|
Packit |
b802ec |
Copyright (C) 1997,1998 Matt Kimball
|
|
Packit |
b802ec |
Copyright (C) 2005 R.E.Wolff@BitWizard.nl
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
This program is free software; you can redistribute it and/or modify
|
|
Packit |
b802ec |
it under the terms of the GNU General Public License version 2 as
|
|
Packit |
b802ec |
published by the Free Software Foundation.
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
This program is distributed in the hope that it will be useful,
|
|
Packit |
b802ec |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b802ec |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
b802ec |
GNU General Public License for more details.
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
You should have received a copy of the GNU General Public License
|
|
Packit |
b802ec |
along with this program; if not, write to the Free Software
|
|
Packit |
b802ec |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
Packit |
b802ec |
*/
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifndef MTR_MTR_H
|
|
Packit |
b802ec |
#define MTR_MTR_H
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include "config.h"
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include <stdint.h>
|
|
Packit |
b802ec |
#include <sys/socket.h>
|
|
Packit |
b802ec |
#include <arpa/inet.h>
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_NETINET_IN_H
|
|
Packit |
b802ec |
#include <netinet/in.h>
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* Typedefs */
|
|
Packit |
b802ec |
#ifdef ENABLE_IPV6
|
|
Packit |
b802ec |
typedef struct in6_addr ip_t;
|
|
Packit |
b802ec |
#else
|
|
Packit |
b802ec |
typedef struct in_addr ip_t;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifndef HAVE_TIME_T
|
|
Packit |
b802ec |
typedef int time_t;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* The __unused__ attribute was added in gcc 3.2.7. */
|
|
Packit |
b802ec |
#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
|
|
Packit |
b802ec |
#define ATTRIBUTE_UNUSED __attribute__((__unused__))
|
|
Packit |
b802ec |
#else
|
|
Packit |
b802ec |
#define ATTRIBUTE_UNUSED /* empty */
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* The __const__ attribute was added in gcc 2.95. */
|
|
Packit |
b802ec |
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
|
|
Packit |
b802ec |
#define ATTRIBUTE_CONST __attribute__ ((__const__))
|
|
Packit |
b802ec |
#else
|
|
Packit |
b802ec |
#define ATTRIBUTE_CONST /* empty */
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* stuff used by display such as report, curses... */
|
|
Packit |
b802ec |
#define MAXFLD 20 /* max stats fields to display */
|
|
Packit |
b802ec |
#define FLD_INDEX_SZ 256
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* net related definitions */
|
|
Packit |
b802ec |
#define SAVED_PINGS 200
|
|
Packit |
b802ec |
#define MAXPATH 8
|
|
Packit |
b802ec |
#define MaxHost 256
|
|
Packit |
b802ec |
#define MinPort 1024
|
|
Packit |
b802ec |
#define MaxPort 65535
|
|
Packit |
b802ec |
#define MAXPACKET 4470 /* largest test packet size */
|
|
Packit |
b802ec |
#define MINPACKET 28 /* 20 bytes IP header and 8 bytes ICMP or UDP */
|
|
Packit |
b802ec |
#define MAXLABELS 8 /* http://kb.juniper.net/KB2190 (+ 3 just in case) */
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* Stream Control Transmission Protocol is defined in netinet/in.h */
|
|
Packit |
b802ec |
#ifdef IPPROTO_SCTP
|
|
Packit |
b802ec |
#define HAS_SCTP 1
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifndef HAVE_SOCKLEN_T
|
|
Packit |
b802ec |
typedef int socklen_t;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
struct mtr_ctl {
|
|
Packit |
b802ec |
int MaxPing;
|
|
Packit |
b802ec |
float WaitTime;
|
|
Packit |
b802ec |
float GraceTime;
|
|
Packit |
b802ec |
char *Hostname;
|
|
Packit |
b802ec |
char *InterfaceAddress;
|
|
Packit |
b802ec |
char LocalHostname[128];
|
|
Packit |
b802ec |
int ipinfo_no;
|
|
Packit |
b802ec |
int ipinfo_max;
|
|
Packit |
b802ec |
int cpacketsize; /* packet size used by ping */
|
|
Packit |
b802ec |
int bitpattern; /* packet bit pattern used by ping */
|
|
Packit |
b802ec |
int tos; /* type of service set in ping packet */
|
|
Packit |
b802ec |
#ifdef SO_MARK
|
|
Packit |
b802ec |
uint32_t mark;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
ip_t unspec_addr;
|
|
Packit |
b802ec |
int af; /* address family of remote target */
|
|
Packit |
b802ec |
int mtrtype; /* type of query packet used */
|
|
Packit |
b802ec |
int fstTTL; /* initial hub(ttl) to ping byMin */
|
|
Packit |
b802ec |
int maxTTL; /* last hub to ping byMin */
|
|
Packit |
b802ec |
int maxUnknown; /* stop ping threshold */
|
|
Packit |
b802ec |
int remoteport; /* target port for TCP tracing */
|
|
Packit |
b802ec |
int localport; /* source port for UDP tracing */
|
|
Packit |
b802ec |
int probe_timeout; /* timeout for probe sockets */
|
|
Packit |
b802ec |
unsigned char fld_active[2 * MAXFLD]; /* SO_MARK to set for ping packet */
|
|
Packit |
b802ec |
int display_mode; /* display mode selector */
|
|
Packit |
b802ec |
int fld_index[FLD_INDEX_SZ]; /* default display field (defined by key in net.h) and order */
|
|
Packit |
b802ec |
char available_options[MAXFLD];
|
|
Packit |
b802ec |
int display_offset; /* only used in text mode */
|
|
Packit |
b802ec |
void *gtk_data; /* pointer to hold arbitrary gtk data */
|
|
Packit |
b802ec |
unsigned int /* bit field to hold named booleans */
|
|
Packit |
b802ec |
ForceMaxPing:1,
|
|
Packit |
b802ec |
use_dns:1,
|
|
Packit |
b802ec |
show_ips:1,
|
|
Packit |
b802ec |
enablempls:1, dns:1, reportwide:1, Interactive:1, DisplayMode:5;
|
|
Packit |
b802ec |
};
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* dynamic field drawing */
|
|
Packit |
b802ec |
struct fields {
|
|
Packit |
b802ec |
const unsigned char key;
|
|
Packit |
b802ec |
const char *descr;
|
|
Packit |
b802ec |
const char *title;
|
|
Packit |
b802ec |
const char *format;
|
|
Packit |
b802ec |
const int length;
|
|
Packit |
b802ec |
int (
|
|
Packit |
b802ec |
*net_xxx) (
|
|
Packit |
b802ec |
int);
|
|
Packit |
b802ec |
};
|
|
Packit |
b802ec |
/* defined in mtr.c */
|
|
Packit |
b802ec |
extern const struct fields data_fields[MAXFLD];
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
/* MPLS label object */
|
|
Packit |
b802ec |
struct mplslen {
|
|
Packit |
b802ec |
unsigned long label[MAXLABELS]; /* label value */
|
|
Packit |
b802ec |
uint8_t exp[MAXLABELS]; /* experimental bits */
|
|
Packit |
b802ec |
uint8_t ttl[MAXLABELS]; /* MPLS TTL */
|
|
Packit |
b802ec |
char s[MAXLABELS]; /* bottom of stack */
|
|
Packit |
b802ec |
char labels; /* how many labels did we get? */
|
|
Packit |
b802ec |
};
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#endif /* MTR_MTR_H */
|