Blame ui/mtr.h

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 */