Add support for PPI (the Per-Packet Information header), described at

http://www.cacetech.com/documents/PPI_Header_format_1.0.pdf .

svn path=/trunk/; revision=22094
This commit is contained in:
Gerald Combs 2007-06-13 22:36:58 +00:00
parent e3fc848842
commit d1a745f27b
7 changed files with 1222 additions and 21 deletions

View File

@ -572,6 +572,7 @@ CLEAN_DISSECTOR_SRC = \
packet-pop.c \
packet-portmap.c \
packet-pgsql.c \
packet-ppi.c \
packet-ppp.c \
packet-pppoe.c \
packet-pptp.c \

View File

@ -79,7 +79,7 @@ static const value_string p2p_dirs[] = {
{ 0, NULL }
};
static dissector_table_t wtap_encap_dissector_table;
dissector_table_t wtap_encap_dissector_table;
static GSList *frame_end_routines = NULL;

View File

@ -36,7 +36,7 @@ void show_exception(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
void
show_reported_bounds_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
/*
/*
* Routine used to register frame end routine. The routine should only
* be registred when the dissector is used in the frame, not in the
* proto_register_XXX function.
@ -50,8 +50,13 @@ register_frame_end_routine(void (*func)(void));
*/
extern int proto_malformed;
/* following variables are exported from libwireshark.dll.
* Thus we need a special declaration.
/*
* The frame dissector and the PPI dissector both use this
*/
extern dissector_table_t wtap_encap_dissector_table;
/* following variables are exported from libwireshark.dll.
* Thus we need a special declaration.
*/
WS_VAR_IMPORT int proto_frame;
WS_VAR_IMPORT int hf_frame_arrival_time;

1189
epan/dissectors/packet-ppi.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -310,7 +310,7 @@ static const struct {
/*
* Linux "cooked mode" captures, used by the current CVS version
* of libpcap
* of libpcap
* OR
* it could be a packet in Cisco's ERSPAN encapsulation which uses
* this number as well (why can't people stick to protocols when it
@ -427,6 +427,8 @@ static const struct {
{ 188, WTAP_ENCAP_IEEE802_16_MAC_CPS },
/* USB packets with Linux-specified header */
{ 189, WTAP_ENCAP_USB_LINUX },
/* Per-Packet Information header */
{ 192, WTAP_ENCAP_PPI },
/*
* To repeat:

View File

@ -350,7 +350,7 @@ static struct encap_type_info encap_table_base[] = {
/* WTAP_ENCAP_JUNIPER_CHDLC */
{ "Juniper C-HDLC", "juniper-chdlc" },
/* WTAP_ENCAP_JUNIPER_GGSN */
{ "Juniper GGSN", "juniper-ggsn" },
@ -377,6 +377,9 @@ static struct encap_type_info encap_table_base[] = {
/* WTAP_ENCAP_MPEG */
{ "MPEG", "mpeg" },
/* WTAP_ENCAP_PPI */
{ "Per-Packet Information header", "ppi" },
};
gint wtap_num_encap_types = sizeof(encap_table_base) / sizeof(struct encap_type_info);
@ -384,13 +387,13 @@ static GArray* encap_table_arr = NULL;
static const struct encap_type_info* encap_table = NULL;
static void wtap_init_encap_types(void) {
if (encap_table_arr) return;
encap_table_arr = g_array_new(FALSE,TRUE,sizeof(struct encap_type_info));
g_array_append_vals(encap_table_arr,encap_table_base,wtap_num_encap_types);
encap_table = (void*)encap_table_arr->data;
}
@ -403,10 +406,10 @@ int wtap_get_num_encap_types(void) {
int wtap_register_encap_type(char* name, char* short_name) {
struct encap_type_info* e = g_malloc(sizeof(struct encap_type_info));
wtap_init_encap_types();
e->name = g_strdup(name);
e->short_name = g_strdup(short_name);
g_array_append_val(encap_table_arr,e);
encap_table = (void*)encap_table_arr->data;

View File

@ -191,6 +191,7 @@ extern "C" {
#define WTAP_ENCAP_NETTL_RAW_TELNET 94
#define WTAP_ENCAP_USB_LINUX 95
#define WTAP_ENCAP_MPEG 96
#define WTAP_ENCAP_PPI 97
#define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types()
@ -516,7 +517,7 @@ typedef union {
guint16 vc;
guint16 cid;
} atm;
guint32 ds0mask;
} k12_input_info_t;
@ -571,7 +572,7 @@ struct catapult_dct2000_phdr
#define URB_TRANSFER_IN 0x80 /* to host */
/*
* USB setup header as defined in USB specification
* USB setup header as defined in USB specification
*/
struct usb_request_hdr {
gint8 bmRequestType;
@ -604,7 +605,7 @@ struct linux_usb_phdr {
guint32 urb_len; /* whole len of urb this event refers to */
guint32 data_len; /* amount of urb data really present in this event*/
};
union wtap_pseudo_header {
struct eth_phdr eth;
struct x25_phdr x25;
@ -646,26 +647,26 @@ struct file_type_info {
/* the file type name */
/* should be NULL for all "pseudo" types that are only internally used and not read/writeable */
const char *name;
/* the file type short name, used as a shortcut for the command line tools */
/* should be NULL for all "pseudo" types that are are only internally used and not read/writeable */
const char *short_name;
/* the common file extensions for this type (seperated by semicolon) */
/* should be *.* if no common extension is applicable */
const char *file_extensions;
/* the default file extension, used to save this type */
/* should be NULL if no default extension is known */
const char *file_extension_default;
/* can this type be compressed with gzip? */
gboolean can_compress;
/* can this type write this encapsulation format? */
/* should be NULL is this file type don't have write support */
int (*can_write_encap)(int);
/* the function to open the capture file for writing */
/* should be NULL is this file type don't have write support */
int (*dump_open)(wtap_dumper *, gboolean, int *);