~hloeung/ubuntu/utopic/mtr/fix-ipv6-nameservers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
    mtr  --  a network diagnostic tool
    Copyright (C) 1997,1998  Matt Kimball

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License version 2 as 
    published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/*  Prototypes for functions in net.c  */
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#ifdef ENABLE_IPV6
#include <netinet/ip6.h>
#include <netinet/icmp6.h>
#endif

int net_preopen(void);
int net_selectsocket(void);
int net_open(struct hostent *host);
void net_reopen(struct hostent *address);
int net_set_interfaceaddress (char *InterfaceAddress); 
void net_reset(void);
void net_close(void);
int net_waitfd(void);
void net_process_return(void);
void net_harvest_fds(void);

int net_max(void);
int net_min(void);
int net_last(int at);
ip_t * net_addr(int at);
void * net_mpls(int at);
void * net_mplss(int, int);
int net_loss(int at);
int net_drop(int at);
int net_last(int at);
int net_best(int at);
int net_worst(int at);
int net_avg(int at);
int net_gmean(int at);
int net_stdev(int at);
int net_jitter(int at);
int net_jworst(int at);
int net_javg(int at);
int net_jinta(int at);
ip_t * net_addrs(int at, int i);
char *net_localaddr(void); 

int net_send_batch(void);
void net_end_transit(void);

int calc_deltatime (float WaitTime);

int net_returned(int at);
int net_xmit(int at);
int net_transit(int at);

int net_up(int at);

#define SAVED_PINGS 200
int* net_saved_pings(int at);
void net_save_xmit(int at);
void net_save_return(int at, int seq, int ms);
int net_duplicate(int at, int seq);

void sockaddrtop( struct sockaddr * saddr, char * strptr, size_t len );
int addrcmp( char * a, char * b, int af );
void addrcpy( char * a, char * b, int af );

void net_add_fds(fd_set *writefd, int *maxfd);
void net_process_fds(fd_set *writefd);

#define MAXPATH 8
#define MaxHost 256
#define MinSequence 33000
#define MaxSequence 65536
#define MinPort 1024

#define MAXPACKET 4470		/* largest test packet size */
#define MINPACKET 28		/* 20 bytes IP header and 8 bytes ICMP or UDP */
#define MAXLABELS 8 		/* http://kb.juniper.net/KB2190 (+ 3 just in case) */

/* stuff used by display such as report, curses... */
#define MAXFLD 20		/* max stats fields to display */

#if defined (__STDC__) && __STDC__
#define CONST const
#else
#define CONST /* */
#endif


/* XXX This doesn't really belong in this header file, but as the
   right c-files include it, it will have to do for now. */

/* dynamic field drawing */
struct fields {
  CONST unsigned char key;
  CONST char *descr;
  CONST char *title;
  CONST char *format;
  int length;
  int (*net_xxx)();
};

extern struct fields data_fields[MAXFLD];


/* keys: the value in the array is the index number in data_fields[] */
extern int fld_index[];
extern unsigned char fld_active[];
extern char available_options[];

ip_t unspec_addr;

/* MPLS label object */
struct mplslen {
  unsigned long label[MAXLABELS]; /* label value */
  uint8 exp[MAXLABELS]; /* experimental bits */
  uint8 ttl[MAXLABELS]; /* MPLS TTL */
  char s[MAXLABELS]; /* bottom of stack */
  char labels; /* how many labels did we get? */
};

void decodempls(int, char *, struct mplslen *, int);