On Wed, Aug 12, 2009 at 07:14:05PM +0200, Jochen Bartl wrote: > I have spent the last 2 days with adding IPv6, Stub Routing and > Authentication TLV support to the EIGRP dissector.
> A lot of the proto_tree_add_text calls were replaced by > proto_tree_add_item, to make use of the display filter functionality. So much for letting my half finished ipv6 and hf_ication changes lying in my local tree. Nevertheless, I had only replaced the text stuff in half of the functions and IPv6, so yours is more complete. The only thing my dissector did that yours doesn't was that I added a *hack* to proto.c to allow me to filter for the prefix' content (included for *informational purposes* below) by adding an element of type FT_IPv6. My usage looked like this: length=tvb_get_guint8(tvb, offset); ti = proto_tree_add_item(tree, hf_ipv6_int_prefixlen , tvb, offset, 1, FALSE); offset++; addr_len=ipv6_addr_and_mask(tvb, offset, &ipv6_addr, length); if (addr_len < 0) { proto_item_append_text(ti," [Invalid prefix length %u > 128]", length); addr_len = 1; /* assure we can exit the loop */ } else { ti = proto_tree_add_item(tree, hf_ipv6_int_dest, tvb, offset, addr_len, FALSE); ... { &hf_ipv6_int_dest, { "Destination", "eigrp.ipv6int.dest", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }}, Which brings me to the core of my posting: What would be a good solution to the ipv6 prefix situation, where only the masklength and the beginning bytes of an address are put into the packet but I still want to be able to filter on the address part and maybe even have the resolving stuff available? Would something like my hack be OK or should we add a new type like FT_IPv6PRE or something else? Thanks Joerg
Index: proto.c =================================================================== --- proto.c (revision 29361) +++ proto.c (working copy) @@ -181,7 +181,7 @@ static void proto_tree_set_ipv6(field_info *fi, const guint8* value_ptr); static void -proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start); +proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length); static void proto_tree_set_guid(field_info *fi, const e_guid_t *value_ptr); static void @@ -1030,6 +1030,7 @@ break; default: +assert(0); DISSECTOR_ASSERT_NOT_REACHED(); value = 0; break; @@ -1202,8 +1203,8 @@ break; case FT_IPv6: - DISSECTOR_ASSERT(length == 16); - proto_tree_set_ipv6_tvb(new_fi, tvb, start); + DISSECTOR_ASSERT(length >=0 && length <= 16); + proto_tree_set_ipv6_tvb(new_fi, tvb, start, length); break; case FT_ETHER: @@ -1856,9 +1857,9 @@ } static void -proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start) +proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length) { - proto_tree_set_ipv6(fi, tvb_get_ptr(tvb, start, 16)); + proto_tree_set_ipv6(fi, tvb_get_ptr(tvb, start, length)); } /* Add a FT_GUID to a proto_tree */
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe