aboutsummaryrefslogtreecommitdiffstats
path: root/packet-pim.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2001-07-02 09:42:40 +0000
committerGuy Harris <guy@alum.mit.edu>2001-07-02 09:42:40 +0000
commite3b63bfbd9a6f179ee4d53d3804e57b93027013a (patch)
treeb447c13a426a8da2042ca2af7e481cc7a5a29c9a /packet-pim.c
parent7aef6b29322d99f678c2c7a73b4ad509d50e375d (diff)
Put the IGMP type field value into the PIM tree, as is done for other
on-top-of-IGMP protocols, e.g. DVMRP. Label the PIM opcode field "Code" for PIMv1, to distinguish it from the IGMP type field. Make that field, and the PIMv2 opcode field, enumerated fields. For unknown opcode values, put the value into the summary line. Get rid of some unused variables. svn path=/trunk/; revision=3635
Diffstat (limited to 'packet-pim.c')
-rw-r--r--packet-pim.c86
1 files changed, 42 insertions, 44 deletions
diff --git a/packet-pim.c b/packet-pim.c
index d73e29d64f..2618502b65 100644
--- a/packet-pim.c
+++ b/packet-pim.c
@@ -2,7 +2,7 @@
* Routines for PIM disassembly
* (c) Copyright Jun-ichiro itojun Hagino <itojun@itojun.org>
*
- * $Id: packet-pim.c,v 1.30 2001/07/02 09:23:02 guy Exp $
+ * $Id: packet-pim.c,v 1.31 2001/07/02 09:42:40 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -58,6 +58,7 @@ enum pimv2_addrtype {
static int proto_pim = -1;
static int hf_pim_version = -1;
static int hf_pim_type = -1;
+static int hf_pim_code = -1;
static int hf_pim_cksum = -1;
static gint ett_pim = -1;
@@ -112,6 +113,19 @@ dissect_pimv1_addr(tvbuff_t *tvb, int offset) {
return buf;
}
+static const value_string type1vals[] = {
+ { 0, "Query" },
+ { 1, "Register" },
+ { 2, "Register-stop" },
+ { 3, "Join/Prune" },
+ { 4, "RP-Reachable" },
+ { 5, "Assert" },
+ { 6, "Graft" },
+ { 7, "Graft-Ack" },
+ { 8, "Mode" },
+ { 0, NULL },
+};
+
/* This function is only called from the IGMP dissector */
int
dissect_pimv1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
@@ -121,19 +135,6 @@ dissect_pimv1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint length, pim_length;
guint16 pim_cksum, computed_cksum;
vec_t cksum_vec[1];
- static const value_string type1vals[] = {
- { 0, "Query" },
- { 1, "Register" },
- { 2, "Register-stop" },
- { 3, "Join/Prune" },
- { 4, "RP-Reachable" },
- { 5, "Assert" },
- { 6, "Graft" },
- { 7, "Graft-Ack" },
- { 8, "Mode" },
- { 0, NULL },
- };
- char *typestr;
proto_tree *pim_tree = NULL;
proto_item *ti;
proto_tree *pimopt_tree = NULL;
@@ -157,22 +158,19 @@ dissect_pimv1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
tvb_length_remaining(tvb, offset), FALSE);
pim_tree = proto_item_add_subtree(ti, ett_pim);
-#if 0
- /* Put IGMP type, 0x14, into the tree? */
- proto_tree_add_uint(pim_tree, hf_type, tvb, offset, 1, 0x13);
-#endif
+ /* Put IGMP type, 0x14, into the tree */
+ proto_tree_add_text(pim_tree, tvb, offset, 1,
+ "Type: PIM (0x14)");
}
offset += 1;
pim_type = tvb_get_guint8(tvb, offset);
- typestr = val_to_str(pim_type, type1vals, "Unknown");
-
if (check_col(pinfo->fd, COL_INFO))
- col_add_str(pinfo->fd, COL_INFO, typestr);
+ col_add_str(pinfo->fd, COL_INFO,
+ val_to_str(pim_type, type1vals, "Unknown (%u)"));
if (tree) {
- proto_tree_add_uint_format(pim_tree, hf_pim_type, tvb, offset, 1,
- pim_type, "Type: %s (%u)", typestr, pim_type);
+ proto_tree_add_uint(pim_tree, hf_pim_code, tvb, offset, 1, pim_type);
}
offset += 1;
@@ -481,9 +479,6 @@ dissect_pimv1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
case 5: /* assert */
{
- const char *s;
- int advance;
-
proto_tree_add_text(pimopt_tree, tvb, offset, 4,
"Group Address: %s",
ip_to_str(tvb_get_ptr(tvb, offset, 4)));
@@ -617,6 +612,19 @@ dissect_pim_addr(tvbuff_t *tvb, int offset, enum pimv2_addrtype at,
return buf;
}
+static const value_string type2vals[] = {
+ { 0, "Hello" },
+ { 1, "Register" },
+ { 2, "Register-stop" },
+ { 3, "Join/Prune" },
+ { 4, "Bootstrap" },
+ { 5, "Assert" },
+ { 6, "Graft" },
+ { 7, "Graft-Ack" },
+ { 8, "Candidate-RP-Advertisement" },
+ { 0, NULL },
+};
+
static void
dissect_pim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
int offset = 0;
@@ -624,18 +632,6 @@ dissect_pim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
guint length, pim_length;
guint16 pim_cksum, computed_cksum;
vec_t cksum_vec[1];
- static const value_string type2vals[] = {
- { 0, "Hello" },
- { 1, "Register" },
- { 2, "Register-stop" },
- { 3, "Join/Prune" },
- { 4, "Bootstrap" },
- { 5, "Assert" },
- { 6, "Graft" },
- { 7, "Graft-Ack" },
- { 8, "Candidate-RP-Advertisement" },
- { 0, NULL },
- };
char *typestr;
proto_tree *pim_tree = NULL;
proto_item *ti;
@@ -651,7 +647,7 @@ dissect_pim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
switch (PIM_VER(pim_typever)) {
case 2:
- typestr = val_to_str(PIM_TYPE(pim_typever), type2vals, "Unknown");
+ typestr = val_to_str(PIM_TYPE(pim_typever), type2vals, "Unknown (%u)");
break;
case 1: /* PIMv1 - we should never see this */
default:
@@ -673,9 +669,8 @@ dissect_pim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
proto_tree_add_uint(pim_tree, hf_pim_version, tvb, offset, 1,
PIM_VER(pim_typever));
- proto_tree_add_uint_format(pim_tree, hf_pim_type, tvb, offset, 1,
- PIM_TYPE(pim_typever),
- "Type: %s (%u)", typestr, PIM_TYPE(pim_typever));
+ proto_tree_add_uint(pim_tree, hf_pim_type, tvb, offset, 1,
+ PIM_TYPE(pim_typever));
pim_cksum = tvb_get_ntohs(tvb, offset + 2);
length = tvb_length(tvb);
@@ -1101,8 +1096,11 @@ proto_register_pim(void)
{ "Version", "pim.version",
FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
{ &hf_pim_type,
- { "Type", "pim.type",
- FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
+ { "Type", "pim.type",
+ FT_UINT8, BASE_DEC, VALS(type2vals), 0x0, "", HFILL }},
+ { &hf_pim_code,
+ { "Code", "pim.code",
+ FT_UINT8, BASE_DEC, VALS(type1vals), 0x0, "", HFILL }},
{ &hf_pim_cksum,
{ "Checksum", "pim.cksum",
FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }},