diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2009-12-03 15:27:39 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2009-12-03 15:27:39 +0000 |
commit | e592902393a7fbd63ce0bd135b51ef0181168252 (patch) | |
tree | 29f8b56386a377b142f0528f3a24586c55988fe0 /wiretap/snoop.c | |
parent | 39f0b9efde36d57693479071eb0413a6fce593f4 (diff) | |
download | wireshark-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.c | 24 |
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) { |