Decode the word containing the opcode, flags, reply code, etc. in DNS
[obnox/wireshark/wip.git] / packet.h
index 2d02f374de6368fc4145d0c457a6e4f82adbc6ec..7275b2b1fb2c23e08fc36230ad7b652d0dc8957e 100644 (file)
--- a/packet.h
+++ b/packet.h
@@ -1,7 +1,7 @@
 /* packet.h
  * Definitions for packet disassembly structures and routines
  *
- * $Id: packet.h,v 1.17 1998/10/14 19:35:00 guy Exp $
+ * $Id: packet.h,v 1.31 1999/01/04 09:13:45 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
 #define IEEE_802_3_MAX_LEN 1500
 #define BYTE_VIEW_WIDTH    16
 
+typedef struct _column_info {
+  gint       num_cols; /* Number of columns */
+  gboolean **fmt_matx; /* Specifies which formats apply to a column */
+  gchar    **col_data; /* Column data */
+} column_info;
+
+#define COL_MAX_LEN 256
+
 typedef struct _frame_data {
-  guint32  pkt_len;         /* Packet length */
-  guint32  cap_len;         /* Amount actually captured */
-  guint32  secs;            /* Seconds */
-  guint32  usecs;           /* Microseconds */
-  long     file_off;        /* File offset */
-  gchar   *win_info[NUM_COLS]; /* Text for packet summary list fields */
+  guint32      pkt_len;   /* Packet length */
+  guint32      cap_len;   /* Amount actually captured */
+  guint32      rel_secs;  /* Relative seconds */
+  guint32      rel_usecs; /* Relative microseconds */
+  guint32      abs_secs;  /* Absolute seconds */
+  guint32      abs_usecs; /* Absolute microseconds */
+  guint32      del_secs;  /* Delta seconds */
+  guint32      del_usecs; /* Delta microseconds */
+  long         file_off;  /* File offset */
+  column_info *cinfo;     /* Column formatting information */
+#ifdef WITH_WIRETAP
+  int          lnk_t;     /* Per-packet encapsulation/data-link type */
+#endif
 } frame_data;
 
 typedef struct _packet_info {
@@ -92,18 +107,6 @@ typedef struct _value_string {
 
 /* ARP / RARP structs and definitions */
 
-typedef struct _e_ether_arp {
-  guint16 ar_hrd;
-  guint16 ar_pro;
-  guint8  ar_hln;
-  guint8  ar_pln;
-  guint16 ar_op;
-  guint8  arp_sha[6];
-  guint8  arp_spa[4];
-  guint8  arp_tha[6];
-  guint8  arp_tpa[4];
-} e_ether_arp;
-
 #ifndef ARPOP_REQUEST
 #define ARPOP_REQUEST  1       /* ARP request.  */
 #endif
@@ -209,10 +212,11 @@ typedef struct _e_ip {
 #define IPTOS_TOS_MASK    0x1E
 #define IPTOS_TOS(tos)    ((tos) & IPTOS_TOS_MASK)
 #define IPTOS_NONE        0x00
-#define IPTOS_LOWDELAY    0x10
-#define IPTOS_THROUGHPUT  0x08
-#define IPTOS_RELIABILITY 0x04
 #define IPTOS_LOWCOST     0x02
+#define IPTOS_RELIABILITY 0x04
+#define IPTOS_THROUGHPUT  0x08
+#define IPTOS_LOWDELAY    0x10
+#define IPTOS_SECURITY    0x1E
 
 #define IPTOS_PREC_MASK                0xE0
 #define IPTOS_PREC(tos)                ((tos)&IPTOS_PREC_MASK)
@@ -366,7 +370,9 @@ typedef struct _e_udphdr {
 #define UDP_PORT_BOOTPS  67
 #define UDP_PORT_IPX    213
 #define UDP_PORT_NBNS  137
+#define UDP_PORT_NBDGM 138
 #define UDP_PORT_RIP    520
+#define UDP_PORT_VINES 573
 
 /* TCP Ports */
 
@@ -393,18 +399,23 @@ enum {
        ETT_IP_OPTION_SEC,
        ETT_IP_OPTION_ROUTE,
        ETT_IP_OPTION_TIMESTAMP,
+       ETT_IP_TOS,
+       ETT_IP_OFF,
        ETT_UDP,
        ETT_TCP,
        ETT_TCP_OPTIONS,
        ETT_TCP_OPTION_SACK,
+       ETT_TCP_FLAGS,
        ETT_ICMP,
        ETT_IGMP,
        ETT_IPX,
        ETT_SPX,
        ETT_NCP,
        ETT_DNS,
-       ETT_DNS_ANS,
+       ETT_DNS_FLAGS,
        ETT_DNS_QRY,
+       ETT_DNS_QD,
+       ETT_DNS_ANS,
        ETT_DNS_RR,
        ETT_RIP,
        ETT_RIP_VEC,
@@ -422,16 +433,27 @@ enum {
        ETT_IPv6,
        ETT_CLNP,
        ETT_COTP,
+       ETT_VINES_FRP,
        ETT_VINES,
-       ETT_VSPP,
+       ETT_VINES_ARP,
+       ETT_VINES_ICP,
+       ETT_VINES_IPC,
+       ETT_VINES_RTP,
+       ETT_VINES_SPP,
        ETT_IPXRIP,
        ETT_IPXSAP,
        ETT_IPXSAP_SERVER,
        ETT_NBNS,
-       ETT_NBNS_ANS,
+       ETT_NBNS_FLAGS,
        ETT_NBNS_QRY,
+       ETT_NBNS_QD,
+       ETT_NBNS_ANS,
        ETT_NBNS_RR,
        ETT_NBIPX,
+       ETT_AARP,
+       ETT_GIOP,
+       ETT_NBDGM,
+       ETT_CDP,
        NUM_TREE_TYPES  /* last item number plus one */
 };
 
@@ -483,12 +505,21 @@ GtkWidget* add_item_to_tree(GtkWidget *, gint, gint, gchar *, ...)
 #else
 GtkWidget* add_item_to_tree(GtkWidget *, gint, gint, gchar *, ...);
 #endif
-gchar*     match_strval(guint32, value_string*, gint);
+void       set_item_len(GtkWidget *, gint);
+gchar*     val_to_str(guint32, const value_string *, const char *);
+gchar*     match_strval(guint32, const value_string*);
+gint       check_col(frame_data *, gint);
+#if __GNUC__ == 2
+void       col_add_fstr(frame_data *, gint, gchar *, ...)
+    __attribute__((format (printf, 3, 4)));
+#else
+void       col_add_fstr(frame_data *, gint, gchar *, ...);
+#endif
+void       col_add_str(frame_data *, gint, gchar *);
 
 /* Routines in packet.c */
 
-void dissect_packet(const u_char *, guint32 ts_secs, guint32 ts_usecs,
-  frame_data *, GtkTree *);
+void dissect_packet(const u_char *, frame_data *, GtkTree *);
 void add_subtree(GtkWidget *, GtkWidget*, gint);
 void expand_tree(GtkWidget *, gpointer);
 void collapse_tree(GtkWidget *, gpointer);
@@ -511,10 +542,14 @@ void dissect_tr(const u_char *, frame_data *, GtkTree *);
  * tree *
  * They should never modify the packet data.
  */
+void dissect_aarp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_arp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_bootp(const u_char *, int, frame_data *, GtkTree *);
+void dissect_cdp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_data(const u_char *, int, frame_data *, GtkTree *);
+void dissect_ddp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_dns(const u_char *, int, frame_data *, GtkTree *);
+void dissect_giop(const u_char *, int, frame_data *, GtkTree *);
 void dissect_icmp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_igmp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_ip(const u_char *, int, frame_data *, GtkTree *);
@@ -522,6 +557,7 @@ void dissect_ipv6(const u_char *, int, frame_data *, GtkTree *);
 void dissect_ipx(const u_char *, int, frame_data *, GtkTree *);
 void dissect_llc(const u_char *, int, frame_data *, GtkTree *);
 void dissect_lpd(const u_char *, int, frame_data *, GtkTree *);
+void dissect_nbdgm(const u_char *, int, frame_data *, GtkTree *);
 void dissect_nbipx_ns(const u_char *, int, frame_data *, GtkTree *);
 void dissect_nbns(const u_char *, int, frame_data *, GtkTree *);
 void dissect_ncp(const u_char *, int, frame_data *, GtkTree *);
@@ -534,9 +570,15 @@ void dissect_tcp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_trmac(const u_char *, int, frame_data *, GtkTree *);
 void dissect_udp(const u_char *, int, frame_data *, GtkTree *);
 void dissect_vines(const u_char *, int, frame_data *, GtkTree *);
-void dissect_vspp(const u_char *, int, frame_data *, GtkTree *);
-
-/* This function is in ethertype.c */
+void dissect_vines_arp(const u_char *, int, frame_data *, GtkTree *);
+void dissect_vines_frp(const u_char *, int, frame_data *, GtkTree *);
+void dissect_vines_icp(const u_char *, int, frame_data *, GtkTree *);
+void dissect_vines_ipc(const u_char *, int, frame_data *, GtkTree *);
+void dissect_vines_rtp(const u_char *, int, frame_data *, GtkTree *);
+void dissect_vines_spp(const u_char *, int, frame_data *, GtkTree *);
+
+/* These functions are in ethertype.c */
+gchar *ethertype_to_str(guint16 etype, const char *fmt);
 void ethertype(guint16 etype, int offset,
                const u_char *pd, frame_data *fd, GtkTree *tree,
                GtkWidget *fh_tree);