diff --git a/file.c b/file.c index e8cb5ae7b8..36bc5b7b80 100644 --- a/file.c +++ b/file.c @@ -1,7 +1,7 @@ /* file.c * File I/O routines * - * $Id: file.c,v 1.17 1999/01/03 01:57:24 guy Exp $ + * $Id: file.c,v 1.18 1999/01/07 16:15:34 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -114,7 +114,6 @@ open_cap_file(char *fname, capture_file *cf) { /* Next, find out what type of file we're dealing with */ #ifdef WITH_WIRETAP cf->cd_t = WTAP_FILE_UNKNOWN; - cf->lnk_t = WTAP_ENCAP_NONE; #else cf->cd_t = CD_UNKNOWN; cf->lnk_t = DLT_NULL; @@ -185,7 +184,6 @@ open_cap_file(char *fname, capture_file *cf) { cf->fh = wtap_file(cf->wth); cf->cd_t = wtap_file_type(cf->wth); cf->snap = wtap_snapshot_length(cf->wth); - cf->lnk_t = wtap_encapsulation(cf->wth); #endif return 0; @@ -325,14 +323,12 @@ pcap_dispatch_cb(u_char *user, const struct pcap_pkthdr *phdr, fdata->cap_len = phdr->caplen; #ifdef WITH_WIRETAP fdata->file_off = offset; + fdata->lnk_t = phdr->pkt_encap; #else fdata->file_off = ftell(cf->fh) - phdr->caplen; #endif fdata->abs_secs = phdr->ts.tv_sec; fdata->abs_usecs = phdr->ts.tv_usec; -#ifdef WITH_WIRETAP - fdata->lnk_t = phdr->pkt_encap; -#endif /* If we don't have the time stamp of the first packet, it's because this is the first packet. Save the time stamp of this packet as the time diff --git a/file.h b/file.h index d0d613eae9..a985b0597e 100644 --- a/file.h +++ b/file.h @@ -1,7 +1,7 @@ /* file.h * Definitions for file structures and routines * - * $Id: file.h,v 1.8 1999/01/02 06:10:53 gram Exp $ + * $Id: file.h,v 1.9 1999/01/07 16:15:35 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -64,7 +64,9 @@ typedef struct _capture_file { int swap; /* Swap data bytes? */ guint16 cd_t; /* Capture data type */ guint32 vers; /* Version. For tcpdump minor is appended to major */ +#ifndef WITH_WIRETAP guint32 lnk_t; /* Network link type */ +#endif guint32 count; /* Packet count */ guint32 drops; /* Dropped packets */ guint32 esec; /* Elapsed seconds */ diff --git a/packet.c b/packet.c index 06e1fdd785..c8dc748891 100644 --- a/packet.c +++ b/packet.c @@ -1,7 +1,7 @@ /* packet.c * Routines for packet disassembly * - * $Id: packet.c,v 1.17 1999/01/05 07:33:38 guy Exp $ + * $Id: packet.c,v 1.18 1999/01/07 16:15:35 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -310,9 +310,6 @@ dissect_packet(const u_char *pd, frame_data *fd, GtkTree *tree) GtkWidget *fh_tree, *ti; struct tm *tmp; time_t then; -#ifdef WITH_WIRETAP - guint32 lnk_t; -#endif /* Put in frame header information. */ if (check_col(fd, COL_ABS_TIME)) { @@ -357,14 +354,7 @@ dissect_packet(const u_char *pd, frame_data *fd, GtkTree *tree) } #ifdef WITH_WIRETAP - if (cf.lnk_t == WTAP_ENCAP_PER_PACKET) { - lnk_t = fd->lnk_t; - } - else { - lnk_t = cf.lnk_t; - } - - switch (lnk_t) { + switch (fd->lnk_t) { case WTAP_ENCAP_ETHERNET : dissect_eth(pd, fd, tree); break; diff --git a/wiretap/iptrace.c b/wiretap/iptrace.c index 315fa51d53..02445c3257 100644 --- a/wiretap/iptrace.c +++ b/wiretap/iptrace.c @@ -1,6 +1,6 @@ /* iptrace.c * - * $Id: iptrace.c,v 1.1 1999/01/03 04:30:13 gram Exp $ + * $Id: iptrace.c,v 1.2 1999/01/07 16:15:35 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -41,7 +41,6 @@ int iptrace_open(wtap *wth) if (strcmp(name, "iptrace 2.0") != 0) { return WTAP_FILE_UNKNOWN; } - wth->encapsulation = WTAP_ENCAP_PER_PACKET; wth->subtype_read = iptrace_read; return WTAP_FILE_IPTRACE; diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c index 7399b43041..bb59762626 100644 --- a/wiretap/lanalyzer.c +++ b/wiretap/lanalyzer.c @@ -1,6 +1,6 @@ /* lanalyzer.c * - * $Id: lanalyzer.c,v 1.6 1998/12/13 05:38:13 gram Exp $ + * $Id: lanalyzer.c,v 1.7 1999/01/07 16:15:35 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -214,6 +214,7 @@ int lanalyzer_read(wtap *wth) wth->phdr.len = true_size - 4; wth->phdr.caplen = packet_size; + wth->phdr.pkt_encap = wth->encapsulation; return data_offset; } diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c index 4285319f02..bb9d0361c9 100644 --- a/wiretap/libpcap.c +++ b/wiretap/libpcap.c @@ -1,6 +1,6 @@ /* libpcap.c * - * $Id: libpcap.c,v 1.2 1998/12/17 06:39:10 gram Exp $ + * $Id: libpcap.c,v 1.3 1999/01/07 16:15:36 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -207,6 +207,7 @@ int libpcap_read(wtap *wth) wth->phdr.ts.tv_usec = hdr.ts_usec; wth->phdr.caplen = packet_size; wth->phdr.len = hdr.orig_len; + wth->phdr.pkt_encap = wth->encapsulation; return data_offset; } diff --git a/wiretap/ngsniffer.c b/wiretap/ngsniffer.c index 082f2fedf4..6b74696d93 100644 --- a/wiretap/ngsniffer.c +++ b/wiretap/ngsniffer.c @@ -1,6 +1,6 @@ /* ngsniffer.c * - * $Id: ngsniffer.c,v 1.10 1998/12/17 06:39:12 gram Exp $ + * $Id: ngsniffer.c,v 1.11 1999/01/07 16:15:36 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -746,5 +746,6 @@ found: wth->phdr.ts.tv_sec = (long)t; wth->phdr.ts.tv_usec = (unsigned long)((t-(double)(wth->phdr.ts.tv_sec)) *1.0e6); + wth->phdr.pkt_encap = wth->encapsulation; return data_offset; } diff --git a/wiretap/snoop.c b/wiretap/snoop.c index c43f9f5f38..1aedc9406f 100644 --- a/wiretap/snoop.c +++ b/wiretap/snoop.c @@ -1,6 +1,6 @@ /* snoop.c * - * $Id: snoop.c,v 1.1 1998/11/15 05:29:14 guy Exp $ + * $Id: snoop.c,v 1.2 1999/01/07 16:15:36 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -145,6 +145,7 @@ int snoop_read(wtap *wth) wth->phdr.ts.tv_usec = ntohl(hdr.ts_usec); wth->phdr.caplen = packet_size; wth->phdr.len = ntohl(hdr.orig_len); + wth->phdr.pkt_encap = wth->encapsulation; /* Skip over the padding. */ fseek(wth->fh, ntohl(hdr.rec_len) - (sizeof hdr + packet_size), diff --git a/wiretap/wtap.c b/wiretap/wtap.c index f8e02cd8e8..1f5dac1334 100644 --- a/wiretap/wtap.c +++ b/wiretap/wtap.c @@ -1,6 +1,6 @@ /* wtap.c * - * $Id: wtap.c,v 1.3 1998/11/15 05:29:16 guy Exp $ + * $Id: wtap.c,v 1.4 1999/01/07 16:15:36 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -33,11 +33,6 @@ int wtap_file_type(wtap *wth) return wth->file_type; } -int wtap_encapsulation(wtap *wth) -{ - return wth->encapsulation; -} - int wtap_snapshot_length(wtap *wth) { @@ -46,7 +41,27 @@ int wtap_snapshot_length(wtap *wth) void wtap_close(wtap *wth) { - /* XXX - free up memory? */ + /* free up memory. If any capture structure ever allocates + * its own memory, it would be better to make a *close() function + * for each filetype, like pcap_close(0, lanalyzer_close(), etc. + * But for now this will work. */ + switch(wth->file_type) { + case WTAP_FILE_PCAP: + free(wth->capture.pcap); + break; + + case WTAP_FILE_LANALYZER: + free(wth->capture.lanalyzer); + break; + + case WTAP_FILE_NGSNIFFER: + free(wth->capture.ngsniffer); + break; + + default: + /* nothing */ + } + fclose(wth->fh); } diff --git a/wiretap/wtap.h b/wiretap/wtap.h index 18c701bab0..84bde9447f 100644 --- a/wiretap/wtap.h +++ b/wiretap/wtap.h @@ -1,6 +1,6 @@ /* wtap.h * - * $Id: wtap.h,v 1.9 1999/01/02 06:10:55 gram Exp $ + * $Id: wtap.h,v 1.10 1999/01/07 16:15:37 gram Exp $ * * Wiretap Library * Copyright (c) 1998 by Gilbert Ramirez @@ -32,7 +32,6 @@ #define WTAP_ENCAP_RAW_IP 6 #define WTAP_ENCAP_ARCNET 7 #define WTAP_ENCAP_ATM_RFC1483 8 -#define WTAP_ENCAP_PER_PACKET 9 /* File types that can be read by wiretap */ #define WTAP_FILE_UNKNOWN 0 @@ -109,7 +108,6 @@ void wtap_loop(wtap *wth, int, wtap_handler, u_char*); FILE* wtap_file(wtap *wth); int wtap_snapshot_length(wtap *wth); /* per file */ int wtap_file_type(wtap *wth); -int wtap_encapsulation(wtap *wth); /* per file */ void wtap_close(wtap *wth);