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
This commit is contained in:
parent
39f0b9efde
commit
e592902393
|
@ -638,6 +638,7 @@ set(DISSECTOR_SRC
|
||||||
dissectors/packet-ipfc.c
|
dissectors/packet-ipfc.c
|
||||||
dissectors/packet-ipmi.c
|
dissectors/packet-ipmi.c
|
||||||
dissectors/packet-ipmi-session.c
|
dissectors/packet-ipmi-session.c
|
||||||
|
dissectors/packet-ipnet.c
|
||||||
dissectors/packet-ipp.c
|
dissectors/packet-ipp.c
|
||||||
dissectors/packet-ipsec.c
|
dissectors/packet-ipsec.c
|
||||||
dissectors/packet-ipsec-tcp.c
|
dissectors/packet-ipsec-tcp.c
|
||||||
|
|
|
@ -543,6 +543,7 @@ DISSECTOR_SRC = \
|
||||||
packet-ipfc.c \
|
packet-ipfc.c \
|
||||||
packet-ipmi.c \
|
packet-ipmi.c \
|
||||||
packet-ipmi-session.c \
|
packet-ipmi-session.c \
|
||||||
|
packet-ipnet.c \
|
||||||
packet-ipp.c \
|
packet-ipp.c \
|
||||||
packet-ipsec.c \
|
packet-ipsec.c \
|
||||||
packet-ipsec-tcp.c \
|
packet-ipsec-tcp.c \
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
/* packet-ipnet.c
|
||||||
|
* Routines for decoding Solaris IPNET packet disassembly
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <epan/packet.h>
|
||||||
|
|
||||||
|
static int proto_ipnet = -1;
|
||||||
|
static int hf_version = -1;
|
||||||
|
static int hf_family = -1;
|
||||||
|
static int hf_htype = -1;
|
||||||
|
static int hf_pktlen = -1;
|
||||||
|
static int hf_ifindex = -1;
|
||||||
|
static int hf_grifindex = -1;
|
||||||
|
static int hf_zsrc = -1;
|
||||||
|
static int hf_zdst = -1;
|
||||||
|
|
||||||
|
static gint ett_raw = -1;
|
||||||
|
|
||||||
|
static dissector_handle_t ip_handle;
|
||||||
|
static dissector_handle_t ipv6_handle;
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_ipnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||||
|
{
|
||||||
|
proto_tree *fh_tree;
|
||||||
|
proto_item *ti;
|
||||||
|
tvbuff_t *next_tvb;
|
||||||
|
guint32 pktlen;
|
||||||
|
guint8 family;
|
||||||
|
|
||||||
|
/* load the top pane info. This should be overwritten by
|
||||||
|
the next protocol in the stack */
|
||||||
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "IPNET");
|
||||||
|
col_set_str(pinfo->cinfo, COL_INFO, "Solaris IPNET");
|
||||||
|
|
||||||
|
/* populate a tree in the second pane with the IPNET header data */
|
||||||
|
if(tree) {
|
||||||
|
ti = proto_tree_add_item (tree, proto_ipnet, tvb, 0, 24, FALSE);
|
||||||
|
fh_tree = proto_item_add_subtree(ti, ett_raw);
|
||||||
|
|
||||||
|
proto_tree_add_item(fh_tree, hf_version, tvb, 0, 1, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_family, tvb, 1, 1, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_htype, tvb, 2, 2, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_pktlen, tvb, 4, 4, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_ifindex, tvb, 8, 4, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_grifindex, tvb, 12, 4, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_zsrc, tvb, 16, 4, FALSE);
|
||||||
|
proto_tree_add_item(fh_tree, hf_zdst, tvb, 20, 4, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
pktlen = tvb_get_ntohl(tvb, 4);
|
||||||
|
next_tvb = tvb_new_subset_remaining(tvb, tvb_length(tvb) - pktlen);
|
||||||
|
|
||||||
|
family = tvb_get_guint8(tvb, 1);
|
||||||
|
switch (family) {
|
||||||
|
case 2: /* AF_INET */
|
||||||
|
call_dissector(ip_handle, next_tvb, pinfo, tree);
|
||||||
|
break;
|
||||||
|
case 26: /* AF_INET6 */
|
||||||
|
call_dissector(ipv6_handle, next_tvb, pinfo, tree);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
proto_register_ipnet(void)
|
||||||
|
{
|
||||||
|
static hf_register_info hf[] = {
|
||||||
|
{ &hf_version, { "Header version", "ipnet.version",
|
||||||
|
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_family, { "Address family", "ipnet.family",
|
||||||
|
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_htype, { "Hook type", "ipnet.htype",
|
||||||
|
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_pktlen, { "Data length", "ipnet.pktlen",
|
||||||
|
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_ifindex, { "Interface index", "ipnet.ifindex",
|
||||||
|
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_grifindex, { "Group interface index", "ipnet.grifindex",
|
||||||
|
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_zsrc, { "Source Zone ID", "ipnet.zsrc",
|
||||||
|
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
|
||||||
|
{ &hf_zdst, { "Destination Zone ID", "ipnet.zdst",
|
||||||
|
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
|
||||||
|
};
|
||||||
|
static gint *ett[] = {
|
||||||
|
&ett_raw,
|
||||||
|
};
|
||||||
|
|
||||||
|
proto_ipnet = proto_register_protocol("Solaris IPNET", "IPNET", "ipnet");
|
||||||
|
proto_register_field_array(proto_ipnet, hf, array_length(hf));
|
||||||
|
proto_register_subtree_array(ett, array_length(ett));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
proto_reg_handoff_ipnet(void)
|
||||||
|
{
|
||||||
|
dissector_handle_t ipnet_handle;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get handles for the IP and IPv6 dissectors.
|
||||||
|
*/
|
||||||
|
ip_handle = find_dissector("ip");
|
||||||
|
ipv6_handle = find_dissector("ipv6");
|
||||||
|
|
||||||
|
ipnet_handle = create_dissector_handle(dissect_ipnet, proto_ipnet);
|
||||||
|
dissector_add("wtap_encap", WTAP_ENCAP_IPNET, ipnet_handle);
|
||||||
|
}
|
|
@ -353,6 +353,8 @@ static const struct {
|
||||||
{ 224, WTAP_ENCAP_FIBRE_CHANNEL_FC2 },
|
{ 224, WTAP_ENCAP_FIBRE_CHANNEL_FC2 },
|
||||||
/* Fibre Channel FC-2 frame with Delimiter */
|
/* Fibre Channel FC-2 frame with Delimiter */
|
||||||
{ 225, WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS },
|
{ 225, WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS },
|
||||||
|
/* Solaris DLPI */
|
||||||
|
{ 226, WTAP_ENCAP_IPNET },
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* To repeat:
|
* To repeat:
|
||||||
|
|
|
@ -213,6 +213,18 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
|
||||||
WTAP_ENCAP_UNKNOWN, /* 100BaseT (but that's just Ethernet) */
|
WTAP_ENCAP_UNKNOWN, /* 100BaseT (but that's just Ethernet) */
|
||||||
};
|
};
|
||||||
#define NUM_SNOOP_ENCAPS (sizeof snoop_encap / sizeof snoop_encap[0])
|
#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[] = {
|
static const int shomiti_encap[] = {
|
||||||
WTAP_ENCAP_ETHERNET, /* IEEE 802.3 */
|
WTAP_ENCAP_ETHERNET, /* IEEE 802.3 */
|
||||||
WTAP_ENCAP_UNKNOWN, /* IEEE 802.4 Token Bus */
|
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 */
|
/* This is a Shomiti file */
|
||||||
wth->file_type = WTAP_FILE_SHOMITI;
|
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 {
|
} else {
|
||||||
if (hdr.network >= NUM_SNOOP_ENCAPS
|
if (hdr.network >= NUM_SNOOP_ENCAPS
|
||||||
|| snoop_encap[hdr.network] == WTAP_ENCAP_UNKNOWN) {
|
|| snoop_encap[hdr.network] == WTAP_ENCAP_UNKNOWN) {
|
||||||
|
|
|
@ -454,7 +454,10 @@ static struct encap_type_info encap_table_base[] = {
|
||||||
{ "Fibre Channel FC-2 With Frame Delimiter", "fc2sof"},
|
{ "Fibre Channel FC-2 With Frame Delimiter", "fc2sof"},
|
||||||
|
|
||||||
/* WTAP_ENCAP_JPEG_JFIF */
|
/* WTAP_ENCAP_JPEG_JFIF */
|
||||||
{ "JPEG/JFIF", "jfif" }
|
{ "JPEG/JFIF", "jfif" },
|
||||||
|
|
||||||
|
/* WTAP_ENCAP_IPNET */
|
||||||
|
{ "Solaris IPNET", "ipnet" }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -213,6 +213,7 @@ extern "C" {
|
||||||
#define WTAP_ENCAP_FIBRE_CHANNEL_FC2 121
|
#define WTAP_ENCAP_FIBRE_CHANNEL_FC2 121
|
||||||
#define WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS 122
|
#define WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS 122
|
||||||
#define WTAP_ENCAP_JPEG_JFIF 123
|
#define WTAP_ENCAP_JPEG_JFIF 123
|
||||||
|
#define WTAP_ENCAP_IPNET 124
|
||||||
|
|
||||||
#define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types()
|
#define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue