diff options
Diffstat (limited to 'wiretap')
-rw-r--r-- | wiretap/pcap-common.c | 2 | ||||
-rw-r--r-- | wiretap/snoop.c | 24 | ||||
-rw-r--r-- | wiretap/wtap.c | 5 | ||||
-rw-r--r-- | wiretap/wtap.h | 1 |
4 files changed, 31 insertions, 1 deletions
diff --git a/wiretap/pcap-common.c b/wiretap/pcap-common.c index a7b830cbd2..235bc6d802 100644 --- a/wiretap/pcap-common.c +++ b/wiretap/pcap-common.c @@ -353,6 +353,8 @@ static const struct { { 224, WTAP_ENCAP_FIBRE_CHANNEL_FC2 }, /* Fibre Channel FC-2 frame with Delimiter */ { 225, WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS }, + /* Solaris DLPI */ + { 226, WTAP_ENCAP_IPNET }, /* * To repeat: 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) { diff --git a/wiretap/wtap.c b/wiretap/wtap.c index 1231c4b95a..0735c7eb78 100644 --- a/wiretap/wtap.c +++ b/wiretap/wtap.c @@ -454,7 +454,10 @@ static struct encap_type_info encap_table_base[] = { { "Fibre Channel FC-2 With Frame Delimiter", "fc2sof"}, /* WTAP_ENCAP_JPEG_JFIF */ - { "JPEG/JFIF", "jfif" } + { "JPEG/JFIF", "jfif" }, + + /* WTAP_ENCAP_IPNET */ + { "Solaris IPNET", "ipnet" } }; diff --git a/wiretap/wtap.h b/wiretap/wtap.h index e6dd385356..c0bb2687ce 100644 --- a/wiretap/wtap.h +++ b/wiretap/wtap.h @@ -213,6 +213,7 @@ extern "C" { #define WTAP_ENCAP_FIBRE_CHANNEL_FC2 121 #define WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS 122 #define WTAP_ENCAP_JPEG_JFIF 123 +#define WTAP_ENCAP_IPNET 124 #define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types() |