aboutsummaryrefslogtreecommitdiffstats
path: root/packet-vines.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2003-04-17 08:25:11 +0000
committerGuy Harris <guy@alum.mit.edu>2003-04-17 08:25:11 +0000
commit4eae58408c1d5c01bfbf6d075edb78f6243618ac (patch)
tree626be7a2c38f492cc8bbc25e0a1362760d52e491 /packet-vines.c
parent8c061870528cb0687691096d44a71abb8f45db2e (diff)
Regularize the Protocol column setting and protocol names, and put the
SPP packet type in the Info column rather than the Protocol column. Give the Vines protocol number field a value_string table. Nobody asks for the Vines IP dissector by name, so it doesn't have to be registered by name. svn path=/trunk/; revision=7477
Diffstat (limited to 'packet-vines.c')
-rw-r--r--packet-vines.c103
1 files changed, 49 insertions, 54 deletions
diff --git a/packet-vines.c b/packet-vines.c
index 6800d32650..0b162e827b 100644
--- a/packet-vines.c
+++ b/packet-vines.c
@@ -1,7 +1,7 @@
/* packet-vines.c
* Routines for Banyan VINES protocol packet disassembly
*
- * $Id: packet-vines.c,v 1.44 2003/01/23 09:39:33 guy Exp $
+ * $Id: packet-vines.c,v 1.45 2003/04/17 08:25:11 guy Exp $
*
* Don Lafontaine <lafont02@cn.ca>
*
@@ -168,6 +168,15 @@ proto_reg_handoff_vines_frp(void)
static dissector_table_t vines_dissector_table;
+static const value_string proto_vals[] = {
+ { VIP_PROTO_IPC, "IPC" },
+ { VIP_PROTO_SPP, "SPP" },
+ { VIP_PROTO_ARP, "ARP" },
+ { VIP_PROTO_RTP, "RTP" },
+ { VIP_PROTO_ICP, "ICP" },
+ { 0, NULL }
+};
+
static void
dissect_vines(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
@@ -182,7 +191,7 @@ dissect_vines(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
tvbuff_t *next_tvb;
if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines");
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines IP");
if (check_col(pinfo->cinfo, COL_INFO))
col_clear(pinfo->cinfo, COL_INFO);
@@ -198,43 +207,36 @@ dissect_vines(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
viph.vip_snet = g_ntohl(viph.vip_snet);
viph.vip_ssub = g_ntohs(viph.vip_ssub);
+ /*
+ * Handle Vines protocols for which we don't have dissectors.
+ */
switch (viph.vip_proto) {
- case VIP_PROTO_IPC:
+
+ case VIP_PROTO_IPC:
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines IPC");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "IPC (%02x)", viph.vip_proto);
- break;
- case VIP_PROTO_SPP:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines SPP");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "SPP (%02x)", viph.vip_proto);
break;
+
case VIP_PROTO_ARP:
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines ARP");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "ARP (%02x)", viph.vip_proto);
break;
+
case VIP_PROTO_RTP:
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines RTP");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "RTP (%02x)", viph.vip_proto);
break;
+
case VIP_PROTO_ICP:
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines ICP");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "ICP (%02x)", viph.vip_proto);
break;
- default:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines IP");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown VIP protocol (%02x)",
- viph.vip_proto);
+ }
+ if (check_col(pinfo->cinfo, COL_INFO)) {
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%s (0x%02x)",
+ val_to_str(viph.vip_proto, proto_vals,
+ "Unknown VIP protocol"),
+ viph.vip_proto);
}
src_addr = tvb_get_ptr(tvb, offset+12, VINES_ADDR_LEN);
@@ -276,9 +278,9 @@ dissect_vines(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
*/
if (tree) {
- ti = proto_tree_add_protocol_format(tree, proto_vines, tvb,
- offset, (viph.vip_pktlen),
- "Vines IP");
+ ti = proto_tree_add_item(tree, proto_vines, tvb,
+ offset, viph.vip_pktlen,
+ FALSE);
vip_tree = proto_item_add_subtree(ti, ett_vines);
proto_tree_add_text(vip_tree, tvb, offset, 2,
"Packet checksum: 0x%04x",
@@ -320,11 +322,12 @@ proto_register_vines(void)
static hf_register_info hf[] = {
{ &hf_vines_protocol,
{ "Protocol", "vines.protocol",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT8, BASE_HEX, VALS(proto_vals), 0x0,
"Vines protocol", HFILL }}
};
- proto_vines = proto_register_protocol("Banyan Vines", "Vines", "vines");
+ proto_vines = proto_register_protocol("Banyan Vines IP", "Vines IP",
+ "vines_ip");
proto_register_field_array(proto_vines, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
@@ -332,8 +335,7 @@ proto_register_vines(void)
vines_dissector_table = register_dissector_table("vines.proto",
"Vines protocol", FT_UINT8, BASE_HEX);
- register_dissector("vines", dissect_vines, proto_vines);
- vines_handle = find_dissector("vines");
+ vines_handle = create_dissector_handle(dissect_vines, proto_vines);
}
void
@@ -345,6 +347,14 @@ proto_reg_handoff_vines(void)
data_handle = find_dissector("data");
}
+static const value_string pkttype_vals[] = {
+ { VSPP_PKTTYPE_DATA, "Data" },
+ { VSPP_PKTTYPE_DISC, "Disconnect" },
+ { VSPP_PKTTYPE_PROBE, "Probe" },
+ { VSPP_PKTTYPE_ACK, "Ack" },
+ { 0, NULL }
+};
+
static void
dissect_vines_spp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
@@ -368,31 +378,13 @@ dissect_vines_spp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
viph.vspp_lclid = g_ntohs(viph.vspp_lclid);
viph.vspp_rmtid = g_ntohs(viph.vspp_rmtid);
- switch (viph.vspp_pkttype) {
- case VSPP_PKTTYPE_DATA:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "VSPP Data");
- break;
- case VSPP_PKTTYPE_DISC:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "VSPP Disconnect");
- break;
- case VSPP_PKTTYPE_PROBE:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "VSPP Probe");
- break;
- case VSPP_PKTTYPE_ACK:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "VSPP Ack");
- break;
- default:
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "VSPP Unknown");
- }
-
+ if (check_col(pinfo->cinfo, COL_PROTOCOL))
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "Vines SPP");
if (check_col(pinfo->cinfo, COL_INFO))
col_add_fstr(pinfo->cinfo, COL_INFO,
- "NS=%04x NR=%04x Window=%04x RID=%04x LID=%04x D=%04x S=%04x",
+ "%s NS=%04x NR=%04x Window=%04x RID=%04x LID=%04x D=%04x S=%04x",
+ val_to_str(viph.vspp_pkttype, pkttype_vals,
+ "Unknown packet type (0x%02x)"),
viph.vspp_seqno, viph.vspp_ack, viph.vspp_win,
viph.vspp_rmtid, viph.vspp_lclid, viph.vspp_dport,
viph.vspp_sport);
@@ -431,7 +423,10 @@ dissect_vines_spp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
"Destination port: 0x%04x",
viph.vspp_dport);
proto_tree_add_text(vspp_tree, tvb, offset + 4, 1,
- "Packet type: 0x%02x", viph.vspp_pkttype);
+ "Packet type: 0x%02x (%s)",
+ viph.vspp_pkttype,
+ val_to_str(viph.vspp_pkttype, pkttype_vals,
+ "Unknown"));
proto_tree_add_text(vspp_tree, tvb, offset + 5, 1,
"Control: 0x%02x", viph.vspp_control);
proto_tree_add_text(vspp_tree, tvb, offset + 6, 2,