/* 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 {
/* 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
#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)
#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 */
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,
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 */
};
#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);
* 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 *);
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 *);
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);