aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
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
parent39f0b9efde36d57693479071eb0413a6fce593f4 (diff)
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')
-rw-r--r--wiretap/pcap-common.c2
-rw-r--r--wiretap/snoop.c24
-rw-r--r--wiretap/wtap.c5
-rw-r--r--wiretap/wtap.h1
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()