Removed trailing whitespaces from .h and .c files using the
[obnox/wireshark/wip.git] / wiretap / wtap.h
index 07881a718066691af4802ad530948d671abbb93d..a37a7a6c0e4d35184dd6a25c10a6b5b58ffad16f 100644 (file)
@@ -1,29 +1,39 @@
 /* wtap.h
  *
- * $Id: wtap.h,v 1.106 2002/03/05 05:58:41 guy Exp $
+ * $Id: wtap.h,v 1.122 2002/08/28 20:30:45 jmayer Exp $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- * 
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- * 
+ *
  * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
  */
 
 #ifndef __WTAP_H__
 #define __WTAP_H__
 
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+
 /* Encapsulation types. Choose names that truly reflect
  * what is contained in the packet trace file.
  *
 #define WTAP_ENCAP_V120                                16
 #define WTAP_ENCAP_PPP_WITH_PHDR               17
 #define WTAP_ENCAP_IEEE_802_11                 18
-#define WTAP_ENCAP_SLL                         19
-#define WTAP_ENCAP_FRELAY                      20
-#define WTAP_ENCAP_CHDLC                       21
-#define WTAP_ENCAP_CISCO_IOS                   22
-#define WTAP_ENCAP_LOCALTALK                   23
-#define WTAP_ENCAP_PRISM_HEADER                        24
-#define WTAP_ENCAP_PFLOG                       25
-#define WTAP_ENCAP_AIROPEEK                    26
+#define WTAP_ENCAP_IEEE_802_11_WITH_RADIO      19
+#define WTAP_ENCAP_SLL                         20
+#define WTAP_ENCAP_FRELAY                      21
+#define WTAP_ENCAP_CHDLC                       22
+#define WTAP_ENCAP_CISCO_IOS                   23
+#define WTAP_ENCAP_LOCALTALK                   24
+#define WTAP_ENCAP_PRISM_HEADER                        25
+#define WTAP_ENCAP_PFLOG                       26
 #define WTAP_ENCAP_HHDLC                       27
+#define WTAP_ENCAP_DOCSIS                      28
+#define WTAP_ENCAP_COSINE                      29
 
 /* last WTAP_ENCAP_ value + 1 */
-#define WTAP_NUM_ENCAP_TYPES                   28
+#define WTAP_NUM_ENCAP_TYPES                   30
 
 /* File types that can be read by wiretap.
    We support writing some many of these file types, too, so we
 #define WTAP_FILE_IPTRACE_2_0                  13
 #define WTAP_FILE_NETMON_1_x                   14
 #define WTAP_FILE_NETMON_2_x                   15
-#define WTAP_FILE_NETXRAY_1_0                  16
-#define WTAP_FILE_NETXRAY_1_1                  17
-#define WTAP_FILE_NETXRAY_2_00x                        18
-#define WTAP_FILE_RADCOM                       19
-#define WTAP_FILE_ASCEND                       20
-#define WTAP_FILE_NETTL                                21
-#define WTAP_FILE_TOSHIBA                      22
-#define WTAP_FILE_I4BTRACE                     23
-#define WTAP_FILE_CSIDS                                24
-#define WTAP_FILE_PPPDUMP                      25
-#define WTAP_FILE_ETHERPEEK_V56                        26
-#define WTAP_FILE_ETHERPEEK_V7                 27
-#define WTAP_FILE_VMS                          28
-#define WTAP_FILE_DBS_ETHERWATCH               29
-#define WTAP_FILE_VISUAL_NETWORKS              30
+#define WTAP_FILE_NETXRAY_OLD                  16
+#define WTAP_FILE_NETXRAY_1_0                  17
+#define WTAP_FILE_NETXRAY_1_1                  18
+#define WTAP_FILE_NETXRAY_2_00x                        19
+#define WTAP_FILE_RADCOM                       20
+#define WTAP_FILE_ASCEND                       21
+#define WTAP_FILE_NETTL                                22
+#define WTAP_FILE_TOSHIBA                      23
+#define WTAP_FILE_I4BTRACE                     24
+#define WTAP_FILE_CSIDS                                25
+#define WTAP_FILE_PPPDUMP                      26
+#define WTAP_FILE_ETHERPEEK_V56                        27
+#define WTAP_FILE_ETHERPEEK_V7                 28
+#define WTAP_FILE_VMS                          29
+#define WTAP_FILE_DBS_ETHERWATCH               30
+#define WTAP_FILE_VISUAL_NETWORKS              31
+#define WTAP_FILE_COSINE                       32
 
 /* last WTAP_FILE_ value + 1 */
-#define WTAP_NUM_FILE_TYPES                    31
+#define WTAP_NUM_FILE_TYPES                    33
 
 /*
  * Maximum packet size we'll support.
  */
 #define        WTAP_MAX_PACKET_SIZE                    65535
 
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_WINSOCK_H
-#include <winsock.h>
-#endif
-
-#include <glib.h>
-#include <stdio.h>
-
 /*
  * "Pseudo-headers" are used to supply to the clients of wiretap
  * per-packet information that's not part of the packet payload
  */
 
 /* Packet "pseudo-header" information for X.25 capture files. */
+#define FROM_DCE                       0x80
 struct x25_phdr {
-       guint8  flags; /* ENCAP_LAPB : 1st bit means From DCE */
+       guint8  flags; /* ENCAP_LAPB, ENCAP_V120 : 1st bit means From DCE */
 };
 
-/* Packet "pseudo-header" for ATM Sniffer capture files. */
-struct ngsniffer_atm_phdr {
-       guint8  AppTrafType;    /* traffic type */
-       guint8  AppHLType;      /* protocol type */
-       guint16 Vpi;            /* virtual path identifier */
-       guint16 Vci;            /* virtual circuit identifier */
+/* Packet "pseudo-header" for ATM capture files.
+   Not all of this information is supplied by all capture types. */
+
+/*
+ * AAL types.
+ */
+#define AAL_UNKNOWN    0       /* AAL unknown */
+#define AAL_1          1       /* AAL1 */
+#define AAL_2          2       /* AAL2 */
+#define AAL_3_4                3       /* AAL3/4 */
+#define AAL_5          4       /* AAL5 */
+#define AAL_USER       5       /* User AAL */
+#define AAL_SIGNALLING 6       /* Signaling AAL */
+#define AAL_OAMCELL    7       /* OAM cell */
+
+/*
+ * Traffic types.
+ */
+#define TRAF_UNKNOWN   0       /* Unknown */
+#define TRAF_LLCMX     1       /* LLC multiplexed (RFC 1483) */
+#define TRAF_VCMX      2       /* VC multiplexed (RFC 1483) */
+#define TRAF_LANE      3       /* LAN Emulation */
+#define TRAF_ILMI      4       /* ILMI */
+#define TRAF_FR                5       /* Frame Relay */
+#define TRAF_SPANS     6       /* FORE SPANS */
+#define TRAF_IPSILON   7       /* Ipsilon */
+
+/*
+ * Traffic subtypes.
+ */
+#define        TRAF_ST_UNKNOWN         0       /* Unknown */
+
+/*
+ * For TRAF_VCMX:
+ */
+#define        TRAF_ST_VCMX_802_3_FCS  1       /* 802.3 with an FCS */
+#define        TRAF_ST_VCMX_802_4_FCS  2       /* 802.4 with an FCS */
+#define        TRAF_ST_VCMX_802_5_FCS  3       /* 802.5 with an FCS */
+#define        TRAF_ST_VCMX_FDDI_FCS   4       /* FDDI with an FCS */
+#define        TRAF_ST_VCMX_802_6_FCS  5       /* 802.6 with an FCS */
+#define        TRAF_ST_VCMX_802_3      7       /* 802.3 without an FCS */
+#define        TRAF_ST_VCMX_802_4      8       /* 802.4 without an FCS */
+#define        TRAF_ST_VCMX_802_5      9       /* 802.5 without an FCS */
+#define        TRAF_ST_VCMX_FDDI       10      /* FDDI without an FCS */
+#define        TRAF_ST_VCMX_802_6      11      /* 802.6 without an FCS */
+#define        TRAF_ST_VCMX_FRAGMENTS  12      /* Fragments */
+#define        TRAF_ST_VCMX_BPDU       13      /* BPDU */
+
+/*
+ * For TRAF_LANE:
+ */
+#define        TRAF_ST_LANE_LE_CTRL    1       /* LANE: LE Ctrl */
+#define        TRAF_ST_LANE_802_3      2       /* LANE: 802.3 */
+#define        TRAF_ST_LANE_802_5      3       /* LANE: 802.5 */
+#define        TRAF_ST_LANE_802_3_MC   4       /* LANE: 802.3 multicast */
+#define        TRAF_ST_LANE_802_5_MC   5       /* LANE: 802.5 multicast */
+
+/*
+ * For TRAF_IPSILON:
+ */
+#define        TRAF_ST_IPSILON_FT0     1       /* Ipsilon: Flow Type 0 */
+#define        TRAF_ST_IPSILON_FT1     2       /* Ipsilon: Flow Type 1 */
+#define        TRAF_ST_IPSILON_FT2     3       /* Ipsilon: Flow Type 2 */
+
+struct atm_phdr {
+       guint8  aal;            /* AAL of the traffic */
+       guint8  type;           /* traffic type */
+       guint8  subtype;        /* traffic subtype */
+       guint16 vpi;            /* virtual path identifier */
+       guint16 vci;            /* virtual circuit identifier */
        guint16 channel;        /* link: 0 for DCE, 1 for DTE */
        guint16 cells;          /* number of cells */
        guint16 aal5t_u2u;      /* user-to-user indicator */
@@ -221,68 +285,53 @@ struct ascend_phdr {
        guint32 task;                   /* Task number */
 };
 
+/* Packet "pseudo-header" for point-to-point links with direction flags. */
 struct p2p_phdr {
        gboolean        sent; /* TRUE=sent, FALSE=received */
 };
 
+/* Packet "pseudo-header" information for 802.11 with radio information. */
+struct ieee_802_11_phdr {
+       guint8  channel;        /* Channel number */
+       guint8  data_rate;      /* in .5 Mb/s units */
+       guint8  signal_level;   /* percentage */
+};
 
-/*
- * Bits in AppTrafType.
- *
- * For AAL types other than AAL5, the packet data is presumably for a
- * single cell, not a reassembled frame, as the ATM Sniffer manual says
- * it dosn't reassemble cells other than AAL5 cells.
- */
-#define        ATT_AALTYPE             0x0F    /* AAL type: */
-#define        ATT_AAL_UNKNOWN         0x00    /* Unknown AAL */
-#define        ATT_AAL1                0x01    /* AAL1 */
-#define        ATT_AAL3_4              0x02    /* AAL3/4 */
-#define        ATT_AAL5                0x03    /* AAL5 */
-#define        ATT_AAL_USER            0x04    /* User AAL */
-#define        ATT_AAL_SIGNALLING      0x05    /* Signaling AAL */
-#define        ATT_OAMCELL             0x06    /* OAM cell */
-
-#define        ATT_HLTYPE              0xF0    /* Higher-layer type: */
-#define        ATT_HL_UNKNOWN          0x00    /* unknown */
-#define        ATT_HL_LLCMX            0x10    /* LLC multiplexed (probably RFC 1483) */
-#define        ATT_HL_VCMX             0x20    /* VC multiplexed (probably RFC 1483) */
-#define        ATT_HL_LANE             0x30    /* LAN Emulation */
-#define        ATT_HL_ILMI             0x40    /* ILMI */
-#define        ATT_HL_FRMR             0x50    /* Frame Relay */
-#define        ATT_HL_SPANS            0x60    /* FORE SPANS */
-#define        ATT_HL_IPSILON          0x70    /* Ipsilon */
-
-/*
- * Values for AppHLType; the interpretation depends on the ATT_HLTYPE
- * bits in AppTrafType.
- */
-#define        AHLT_UNKNOWN            0x0
-#define        AHLT_VCMX_802_3_FCS     0x1     /* VCMX: 802.3 FCS */
-#define        AHLT_LANE_LE_CTRL       0x1     /* LANE: LE Ctrl */
-#define        AHLT_IPSILON_FT0        0x1     /* Ipsilon: Flow Type 0 */
-#define        AHLT_VCMX_802_4_FCS     0x2     /* VCMX: 802.4 FCS */
-#define        AHLT_LANE_802_3         0x2     /* LANE: 802.3 */
-#define        AHLT_IPSILON_FT1        0x2     /* Ipsilon: Flow Type 1 */
-#define        AHLT_VCMX_802_5_FCS     0x3     /* VCMX: 802.5 FCS */
-#define        AHLT_LANE_802_5         0x3     /* LANE: 802.5 */
-#define        AHLT_IPSILON_FT2        0x3     /* Ipsilon: Flow Type 2 */
-#define        AHLT_VCMX_FDDI_FCS      0x4     /* VCMX: FDDI FCS */
-#define        AHLT_LANE_802_3_MC      0x4     /* LANE: 802.3 multicast */
-#define        AHLT_VCMX_802_6_FCS     0x5     /* VCMX: 802.6 FCS */
-#define        AHLT_LANE_802_5_MC      0x5     /* LANE: 802.5 multicast */
-#define        AHLT_VCMX_802_3         0x7     /* VCMX: 802.3 */
-#define        AHLT_VCMX_802_4         0x8     /* VCMX: 802.4 */
-#define        AHLT_VCMX_802_5         0x9     /* VCMX: 802.5 */
-#define        AHLT_VCMX_FDDI          0xa     /* VCMX: FDDI */
-#define        AHLT_VCMX_802_6         0xb     /* VCMX: 802.6 */
-#define        AHLT_VCMX_FRAGMENTS     0xc     /* VCMX: Fragments */
-#define        AHLT_VCMX_BPDU          0xe     /* VCMX: BPDU */
+/* Packet "pseudo-header" for the output from CoSine L2 debug output. */
+
+#define COSINE_MAX_IF_NAME_LEN 128
+
+#define COSINE_ENCAP_TEST      1
+#define COSINE_ENCAP_PPoATM    2
+#define COSINE_ENCAP_PPoFR     3
+#define COSINE_ENCAP_ATM       4
+#define COSINE_ENCAP_FR                5
+#define COSINE_ENCAP_HDLC      6
+#define COSINE_ENCAP_PPP       7
+#define COSINE_ENCAP_ETH       8
+#define COSINE_ENCAP_UNKNOWN   99
+
+#define COSINE_DIR_TX 1
+#define COSINE_DIR_RX 2
+
+struct cosine_phdr {
+       guint8 encap;           /* COSINE_ENCAP_* as defined above */
+       guint8 direction;       /* COSINE_DIR_*, as defined above */
+        char if_name[COSINE_MAX_IF_NAME_LEN];  /* Encap & Logical I/F name */
+       guint16 pro;            /* Protocol */
+       guint16 off;            /* Offset */
+       guint16 pri;            /* Priority */
+       guint16 rm;             /* Rate Marking */
+       guint16 err;            /* Error Code */
+};
 
 union wtap_pseudo_header {
-       struct x25_phdr                 x25;
-       struct ngsniffer_atm_phdr       ngsniffer_atm;
-       struct ascend_phdr              ascend;
-       struct p2p_phdr                 p2p;
+       struct x25_phdr         x25;
+       struct atm_phdr         atm;
+       struct ascend_phdr      ascend;
+       struct p2p_phdr         p2p;
+       struct ieee_802_11_phdr ieee_802_11;
+       struct cosine_phdr      cosine;
 };
 
 struct wtap_pkthdr {
@@ -292,8 +341,8 @@ struct wtap_pkthdr {
        int pkt_encap;
 };
 
-typedef void (*wtap_handler)(u_char*, const struct wtap_pkthdr*,
-               long, union wtap_pseudo_header *pseudo_header, const u_char *);
+typedef void (*wtap_handler)(guchar*, const struct wtap_pkthdr*,
+               long, union wtap_pseudo_header *pseudo_header, const guchar *);
 
 struct wtap;
 struct Buffer;
@@ -314,7 +363,7 @@ struct wtap* wtap_open_offline(const char *filename, int *err, gboolean do_rando
 
 /* Returns TRUE if entire loop-reading was successful. If read failure
  * happened, FALSE is returned and err is set. */
-gboolean wtap_loop(wtap *wth, int, wtap_handler, u_char*, int *err);
+gboolean wtap_loop(wtap *wth, int, wtap_handler, guchar*, int *err);
 
 /* Returns TRUE if read was successful. FALSE if failure. data_offset is
  * set the the offset in the file where the data for the read packet is
@@ -341,9 +390,9 @@ int wtap_short_string_to_encap(const char *short_name);
 const char *wtap_strerror(int err);
 void wtap_sequential_close(wtap *wth);
 void wtap_close(wtap *wth);
-int wtap_seek_read (wtap *wth, long seek_off,
+gboolean wtap_seek_read (wtap *wth, long seek_off,
        union wtap_pseudo_header *pseudo_header, guint8 *pd, int len, int *err);
-int wtap_def_seek_read (wtap *wth, long seek_off,
+gboolean wtap_def_seek_read (wtap *wth, long seek_off,
        union wtap_pseudo_header *pseudo_header, guint8 *pd, int len, int *err);
 
 gboolean wtap_dump_can_open(int filetype);
@@ -353,49 +402,50 @@ wtap_dumper* wtap_dump_open(const char *filename, int filetype, int encap,
 wtap_dumper* wtap_dump_fdopen(int fd, int filetype, int encap, int snaplen,
        int *err);
 gboolean wtap_dump(wtap_dumper *, const struct wtap_pkthdr *,
-       const union wtap_pseudo_header *pseudo_header, const u_char *, int *err);
+       const union wtap_pseudo_header *pseudo_header, const guchar *, int *err);
 FILE* wtap_dump_file(wtap_dumper *);
 gboolean wtap_dump_close(wtap_dumper *, int *);
 long wtap_get_bytes_dumped(wtap_dumper *);
 void wtap_set_bytes_dumped(wtap_dumper *wdh, long bytes_dumped);
 
-/* XXX - needed until "wiretap" can do live packet captures */
-int wtap_pcap_encap_to_wtap_encap(int encap);
-
 /*
  * Wiretap error codes.
  */
 #define        WTAP_ERR_NOT_REGULAR_FILE               -1
-       /* The file being opened for reading isn't a plain file */
-#define        WTAP_ERR_FILE_UNKNOWN_FORMAT            -2
+       /* The file being opened for reading isn't a plain file (or pipe) */
+#define        WTAP_ERR_RANDOM_OPEN_PIPE               -2
+       /* The file is being opened for random access and it's a pipe */
+#define        WTAP_ERR_FILE_UNKNOWN_FORMAT            -3
        /* The file being opened is not a capture file in a known format */
-#define        WTAP_ERR_UNSUPPORTED                    -3
+#define        WTAP_ERR_UNSUPPORTED                    -4
        /* Supported file type, but there's something in the file we
           can't support */
-#define        WTAP_ERR_CANT_OPEN                      -4
+#define        WTAP_ERR_CANT_WRITE_TO_PIPE             -5
+       /* Wiretap can't save to a pipe in the specified format */
+#define        WTAP_ERR_CANT_OPEN                      -6
        /* The file couldn't be opened, reason unknown */
-#define        WTAP_ERR_UNSUPPORTED_FILE_TYPE          -5
+#define        WTAP_ERR_UNSUPPORTED_FILE_TYPE          -7
        /* Wiretap can't save files in the specified format */
-#define        WTAP_ERR_UNSUPPORTED_ENCAP              -6
+#define        WTAP_ERR_UNSUPPORTED_ENCAP              -8
        /* Wiretap can't read or save files in the specified format with the
           specified encapsulation */
-#define        WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED   -7
+#define        WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED   -9
        /* The specified format doesn't support per-packet encapsulations */
-#define        WTAP_ERR_CANT_CLOSE                     -8
+#define        WTAP_ERR_CANT_CLOSE                     -10
        /* The file couldn't be closed, reason unknown */
-#define        WTAP_ERR_CANT_READ                      -9
+#define        WTAP_ERR_CANT_READ                      -11
        /* An attempt to read failed, reason unknown */
-#define        WTAP_ERR_SHORT_READ                     -10
+#define        WTAP_ERR_SHORT_READ                     -12
        /* An attempt to read read less data than it should have */
-#define        WTAP_ERR_BAD_RECORD                     -11
+#define        WTAP_ERR_BAD_RECORD                     -13
        /* We read an invalid record */
-#define        WTAP_ERR_SHORT_WRITE                    -12
+#define        WTAP_ERR_SHORT_WRITE                    -14
        /* An attempt to write wrote less data than it should have */
-#define        WTAP_ERR_UNC_TRUNCATED                  -13
+#define        WTAP_ERR_UNC_TRUNCATED                  -15
        /* Sniffer compressed data was oddly truncated */
-#define        WTAP_ERR_UNC_OVERFLOW                   -14
+#define        WTAP_ERR_UNC_OVERFLOW                   -16
        /* Uncompressing Sniffer data would overflow buffer */
-#define        WTAP_ERR_UNC_BAD_OFFSET                 -15
+#define        WTAP_ERR_UNC_BAD_OFFSET                 -17
        /* LZ77 compressed data has bad offset to string */
 
 /* Errors from zlib; zlib error Z_xxx turns into Wiretap error