Ethereal-dev: Re: [Ethereal-dev] New dissector: IBM RPL (Remote Program Load) protocol
Hi Ronnie,
> In the dissector, ett_rpl_container is the ett field that is used for every
> single subtree.
> This means that if you only expand a specific tree and then click on a
> different rpl packet, ALL of them will suddently be expanded.
> Is it possible to assign different ett_rpl_xxx fields for the different
> subtree types?
this patch fixes this problem.
Thanks,
--jochen
Index: packet-rpl.c
===================================================================
RCS file: /cvsroot/ethereal/packet-rpl.c,v
retrieving revision 1.1
diff -u -w -r1.1 packet-rpl.c
--- packet-rpl.c 2002/11/02 22:23:16 1.1
+++ packet-rpl.c 2002/11/03 12:02:24
@@ -57,7 +57,20 @@
static int hf_rpl_ec = -1;
static gint ett_rpl = -1;
-static gint ett_rpl_container = -1;
+static gint ett_rpl_0004 = -1;
+static gint ett_rpl_0008 = -1;
+static gint ett_rpl_4003 = -1;
+static gint ett_rpl_4006 = -1;
+static gint ett_rpl_4007 = -1;
+static gint ett_rpl_4009 = -1;
+static gint ett_rpl_400a = -1;
+static gint ett_rpl_400b = -1;
+static gint ett_rpl_400c = -1;
+static gint ett_rpl_4011 = -1;
+static gint ett_rpl_4018 = -1;
+static gint ett_rpl_c005 = -1;
+static gint ett_rpl_c014 = -1;
+static gint ett_rpl_unkn = -1;
static const value_string rpl_type_vals[] = {
{ 1, "FIND Command" },
@@ -89,6 +102,7 @@
proto_item *ti;
proto_tree *rpl_container_tree;
guint16 offset;
+ gint ett_type;
len = tvb_get_ntohs(tvb, 0);
proto_tree_add_text(tree, tvb, 0, 2, "Length: %u", len);
@@ -108,11 +122,25 @@
while (len >= offset+4) {
sublen = tvb_get_ntohs(tvb, offset);
subtyp = tvb_get_ntohs(tvb, offset+2);
+ ett_type = ett_rpl_unkn;
+ if(subtyp == 0x0004) ett_type = ett_rpl_0004;
+ if(subtyp == 0x0008) ett_type = ett_rpl_0008;
+ if(subtyp == 0x4003) ett_type = ett_rpl_4003;
+ if(subtyp == 0x4006) ett_type = ett_rpl_4006;
+ if(subtyp == 0x4007) ett_type = ett_rpl_4007;
+ if(subtyp == 0x4009) ett_type = ett_rpl_4009;
+ if(subtyp == 0x400a) ett_type = ett_rpl_400a;
+ if(subtyp == 0x400b) ett_type = ett_rpl_400b;
+ if(subtyp == 0x400c) ett_type = ett_rpl_400c;
+ if(subtyp == 0x4011) ett_type = ett_rpl_4011;
+ if(subtyp == 0x4018) ett_type = ett_rpl_4018;
+ if(subtyp == 0xc005) ett_type = ett_rpl_c005;
+ if(subtyp == 0xc014) ett_type = ett_rpl_c014;
ti = proto_tree_add_text(tree, tvb,
offset, sublen, val_to_str(subtyp,
rpl_type_vals, "Unknown Type"));
rpl_container_tree = proto_item_add_subtree(ti,
- ett_rpl_container);
+ ett_type);
dissect_rpl_container(tvb_new_subset(tvb,
offset, sublen, -1), pinfo,
rpl_container_tree);
@@ -344,7 +372,20 @@
static gint *ett[] = {
&ett_rpl,
- &ett_rpl_container
+ &ett_rpl_0004,
+ &ett_rpl_0008,
+ &ett_rpl_4003,
+ &ett_rpl_4006,
+ &ett_rpl_4007,
+ &ett_rpl_4009,
+ &ett_rpl_400a,
+ &ett_rpl_400b,
+ &ett_rpl_400c,
+ &ett_rpl_4011,
+ &ett_rpl_4018,
+ &ett_rpl_c005,
+ &ett_rpl_c014,
+ &ett_rpl_unkn
};
proto_rpl = proto_register_protocol("Remote Program Load",