#define BUFSIZE 1500 /* globals */ char recvbuf[BUFSIZE]; char sendbuf[BUFSIZE]; int datalen; /* #bytes of data, following ICMP header */ int nsent; /* add 1 for each sendto() */ pid_t pid; /* our PID */ int sockfd; int verbose; char stopPing; /* function prototypes */ void proc_v4(char *, ssize_t, struct timeval *); void proc_v6(char *, ssize_t, struct timeval *); void send_v4(void); void send_v6(void); int readloop(void); void sig_alrm(int); void tv_sub(struct timeval *, struct timeval *); char* sock_ntop_host(const struct sockaddr *sa, socklen_t salen); unsigned short in_cksum(unsigned short *addr, int len); struct proto { void (*fproc)(char *, ssize_t, struct timeval *); void (*fsend)(void); struct sockaddr *sasend; /* sockaddr{} for send, from getaddrinfo */ struct sockaddr *sarecv; /* sockaddr{} for receiving */ socklen_t salen; /* length of sockaddr{}s */ int icmpproto; /* IPPROTO_xxx value for ICMP */ unsigned long n_send; unsigned long n_recv; } *pr;