aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/snoop.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2009-12-03 15:27:39 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2009-12-03 15:27:39 +0000
commite592902393a7fbd63ce0bd135b51ef0181168252 (patch)
tree29f8b56386a377b142f0528f3a24586c55988fe0 /wiretap/snoop.c
parent39f0b9efde36d57693479071eb0413a6fce593f4 (diff)
downloadwireshark-e592902393a7fbd63ce0bd135b51ef0181168252.tar.gz
wireshark-e592902393a7fbd63ce0bd135b51ef0181168252.tar.bz2
wireshark-e592902393a7fbd63ce0bd135b51ef0181168252.zip
From Petr Sumbera via bug 4284:
Added support for Solaris IPNET layer From me: Some code cleanup in packet-ipnet.c Added packet-ipnet.c to CMakeFiles.txt Added WTAP_ENCAP_IPNET to encap_table_base[] svn path=/trunk/; revision=31159
Diffstat (limited to 'wiretap/snoop.c')
-rw-r--r--wiretap/snoop.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index c7c3d20ef3..3ddb12a2ef 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -213,6 +213,18 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
WTAP_ENCAP_UNKNOWN, /* 100BaseT (but that's just Ethernet) */
};
#define NUM_SNOOP_ENCAPS (sizeof snoop_encap / sizeof snoop_encap[0])
+ #define SNOOP_PRIVATE_BIT 0x80000000
+ static const int snoop_private_encap[] = {
+ WTAP_ENCAP_UNKNOWN, /* Not Used */
+ WTAP_ENCAP_UNKNOWN, /* IPv4 Tunnel Link */
+ WTAP_ENCAP_UNKNOWN, /* IPv6 Tunnel Link */
+ WTAP_ENCAP_UNKNOWN, /* Virtual network interface */
+ WTAP_ENCAP_UNKNOWN, /* IEEE 802.11 */
+ WTAP_ENCAP_IPNET, /* ipnet(7D) link */
+ WTAP_ENCAP_UNKNOWN, /* IPMP stub interface */
+ WTAP_ENCAP_UNKNOWN, /* 6to4 Tunnel Link */
+ };
+ #define NUM_SNOOP_PRIVATE_ENCAPS (sizeof snoop_private_encap / sizeof snoop_private_encap[0])
static const int shomiti_encap[] = {
WTAP_ENCAP_ETHERNET, /* IEEE 802.3 */
WTAP_ENCAP_UNKNOWN, /* IEEE 802.4 Token Bus */
@@ -382,6 +394,18 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
/* This is a Shomiti file */
wth->file_type = WTAP_FILE_SHOMITI;
+ } else if (hdr.network & SNOOP_PRIVATE_BIT) {
+ if ((hdr.network^SNOOP_PRIVATE_BIT) >= NUM_SNOOP_PRIVATE_ENCAPS
+ || snoop_private_encap[hdr.network^SNOOP_PRIVATE_BIT] == WTAP_ENCAP_UNKNOWN) {
+ *err = WTAP_ERR_UNSUPPORTED_ENCAP;
+ *err_info = g_strdup_printf("snoop: private network type %u unknown or unsupported",
+ hdr.network);
+ return -1;
+ }
+ file_encap = snoop_private_encap[hdr.network^SNOOP_PRIVATE_BIT];
+
+ /* This is a snoop file */
+ wth->file_type = WTAP_FILE_SNOOP;
} else {
if (hdr.network >= NUM_SNOOP_ENCAPS
|| snoop_encap[hdr.network] == WTAP_ENCAP_UNKNOWN) {