/* packet_info.h
* Definitions for packet info structures and routines
*
- * $Id: packet_info.h,v 1.38 2003/12/29 22:44:50 guy Exp $
+ * $Id$
*
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
#include "frame_data.h"
#include "tvbuff.h"
-
-/* Types of addresses Ethereal knows about. */
-typedef enum {
- AT_NONE, /* no link-layer address */
- AT_ETHER, /* MAC (Ethernet, 802.x, FDDI) address */
- AT_IPv4, /* IPv4 */
- AT_IPv6, /* IPv6 */
- AT_IPX, /* IPX */
- AT_SNA, /* SNA */
- AT_ATALK, /* Appletalk DDP */
- AT_VINES, /* Banyan Vines */
- AT_OSI, /* OSI NSAP */
- AT_ARCNET, /* ARCNET */
- AT_FC, /* Fibre Channel */
- AT_SS7PC, /* SS7 Point Code */
- AT_STRINGZ /* null-terminated string */
-} address_type;
-
-typedef struct _address {
- address_type type; /* type of address */
- int len; /* length of address, in bytes */
- const guint8 *data; /* bytes that constitute address */
-} address;
-
-#define SET_ADDRESS(addr, addr_type, addr_len, addr_data) { \
- (addr)->type = (addr_type); \
- (addr)->len = (addr_len); \
- (addr)->data = (addr_data); \
- }
-
-/*
- * Given two addresses, return
- * 0 if the addresses are equal,
- * a positive number if addr1>addr2 in some nondefined metric,
- * a negative number if addr1<addr2 in some nondefined metric
- */
-#define CMP_ADDRESS(addr1, addr2) \
- ( ((addr1)->type > (addr2)->type)?1: \
- ((addr1)->type < (addr2)->type)?-1: \
- ((addr1)->len > (addr2)->len) ?1: \
- ((addr1)->len < (addr2)->len) ?-1: \
- memcmp((addr1)->data, (addr2)->data, (addr1)->len)\
- )
-
-/*
- * Given two addresses, return "true" if they're equal, "false" otherwise.
- * Addresses are equal only if they have the same type; if the type is
- * AT_NONE, they are then equal, otherwise they must have the same
- * amount of data and the data must be the same.
- */
-#define ADDRESSES_EQUAL(addr1, addr2) \
- ( \
- (addr1)->type == (addr2)->type && \
- ( \
- (addr1)->type == AT_NONE || \
- ( \
- (addr1)->len == (addr2)->len && \
- memcmp((addr1)->data, (addr2)->data, (addr1)->len) == 0 \
- ) \
- ) \
- )
-
-/*
- * Copy an address, allocating a new buffer for the address data.
- */
-#define COPY_ADDRESS(to, from) { \
- guint8 *COPY_ADDRESS_data; \
- (to)->type = (from)->type; \
- (to)->len = (from)->len; \
- COPY_ADDRESS_data = g_malloc((from)->len); \
- memcpy(COPY_ADDRESS_data, (from)->data, (from)->len); \
- (to)->data = COPY_ADDRESS_data; \
- }
-
-/* Types of port numbers Ethereal knows about. */
-typedef enum {
- PT_NONE, /* no port number */
- PT_SCTP, /* SCTP */
- PT_TCP, /* TCP */
- PT_UDP, /* UDP */
- PT_IPX, /* IPX sockets */
- PT_NCP, /* NCP connection */
- PT_EXCHG, /* Fibre Channel exchange */
- PT_DDP, /* DDP AppleTalk connection */
- PT_SBCCS /* FICON */
-} port_type;
-
-/* Types of circuit IDs Ethereal knows about. */
-typedef enum {
- CT_NONE, /* no port number */
- CT_DLCI, /* Frame Relay DLCI */
- CT_ISDN, /* ISDN channel number */
- CT_X25 /* X.25 logical channel number */
- /* Could also have ATM VPI/VCI pairs */
-} circuit_type;
+#include "address.h"
#define P2P_DIR_UNKNOWN -1
#define P2P_DIR_SENT 0
#define P2P_DIR_RECV 1
+#define MTP2_ANNEX_A_USED_UNKNOWN -1
+#define MTP2_ANNEX_A_NOT_USED 0
+#define MTP2_ANNEX_A_USED 1
+
#define PINFO_SOF_FIRST_FRAME 0x1
#define PINFO_SOF_SOFF 0x2
#define PINFO_EOF_LAST_FRAME 0x80
#define PINFO_EOF_INVALID 0x40
+#define MAX_NUMBER_OF_PPIDS 2
typedef struct _packet_info {
const char *current_proto; /* name of protocol currently being dissected */
guint32 ipxptype; /* IPX packet type, if this is an IPX packet */
circuit_type ctype; /* type of circuit, for protocols with a VC identifier */
guint32 circuit_id; /* circuit ID, for protocols with a VC identifier */
- char *noreassembly_reason; /* reason why reassembly wasn't done, if any */
+ const char *noreassembly_reason; /* reason why reassembly wasn't done, if any */
gboolean fragmented; /* TRUE if the protocol is only a fragment */
gboolean in_error_pkt; /* TRUE if we're inside an {ICMP,CLNP,...} error packet */
port_type ptype; /* type of the following two port numbers */
guint16 want_pdu_tracking; /* >0 if the subdissector has specified
a value in 'bytes_until_next_pdu'.
When a dissector detects that the next PDU
- will start beyond the start of the next
- segment, it can set this value to 2
- and 'bytes_until_next_pdu' to the number of
- bytes beyond the next segment where the
+ will start beyond the start of the next
+ segment, it can set this value to 2
+ and 'bytes_until_next_pdu' to the number of
+ bytes beyond the next segment where the
next PDU starts.
- If the protocol dissector below this
+ If the protocol dissector below this
one is capable of PDU tracking it can
use this hint to detect PDUs that starts
unaligned to the segment boundaries.
(some) protocols to detect when a new PDU
starts in the middle of a tcp segment.
- There is intelligence in the glue between
+ There is intelligence in the glue between
dissector layers to make sure that this
request is only passed down to the protocol
immediately below the current one and not
*/
guint32 bytes_until_next_pdu;
-
+
int iplen;
int iphdrlen;
- int p2p_dir;
+ int p2p_dir; /* Packet was captured as an
+ outbound (P2P_DIR_SENT)
+ inbound (P2P_DIR_RECV)
+ unknown (P2P_DIR_UNKNOWN) */
guint16 oxid; /* next 2 fields reqd to identify fibre */
guint16 rxid; /* channel conversations */
guint8 r_ctl; /* R_CTL field in Fibre Channel Protocol */
guint16 src_idx; /* Source port index (Cisco MDS-specific) */
guint16 dst_idx; /* Dest port index (Cisco MDS-specific) */
guint16 vsan; /* Fibre channel/Cisco MDS-specific */
+
+ /* Extra data for DCERPC handling and tracking of context ids */
+ guint16 dcectxid; /* Context ID (DCERPC-specific) */
+ int dcetransporttype; /* Transport type
+ * Value -1 means "not a DCERPC packet"
+ */
+ guint16 dcetransportsalt; /* fid: if transporttype==DCE_CN_TRANSPORT_SMBPIPE */
+
+ /* Extra data for handling of decryption of GSSAPI wrapped tvbuffs.
+ Caller sets decrypt_gssapi_tvb if this service is requested.
+ If gssapi_encrypted_tvb is NULL, then the rest of the tvb data following
+ the gssapi blob itself is decrypted othervise the gssapi_encrypted_tvb
+ tvb will be decrypted (DCERPC has the data before the gssapi blob)
+ If, on return, gssapi_data_encrypted is FALSE, the wrapped tvbuff
+ was signed (i.e., an encrypted signature was present, to check
+ whether the data was modified by a man in the middle) but not sealed
+ (i.e., the data itself wasn't encrypted).
+ */
+#define DECRYPT_GSSAPI_NORMAL 1
+#define DECRYPT_GSSAPI_DCE 2
+ guint16 decrypt_gssapi_tvb;
+ tvbuff_t *gssapi_wrap_tvb;
+ tvbuff_t *gssapi_encrypted_tvb;
+ tvbuff_t *gssapi_decrypted_tvb;
+ gboolean gssapi_data_encrypted;
+
+ guint32 ppid[MAX_NUMBER_OF_PPIDS]; /* The first NUMBER_OF_PPIDS PPIDS which are present
+ * in the SCTP packet
+ */
void *private_data; /* pointer to data passed from one dissector to another */
+ GString *layer_names; /* layers of each protocol */
+ guint16 link_number;
+ gchar annex_a_used;
+ guint16 profinet_type; /* the type of PROFINET packet (0: not a PROFINET packet) */
} packet_info;
#endif /* __PACKET_INFO_H__ */