Hi,

Why don't use FT_BYTES type ?


On Fri, Feb 21, 2014 at 5:15 PM, John Dill <john.d...@greenfieldeng.com>wrote:

>
> >Message: 5
> >Date: Thu, 20 Feb 2014 12:33:04 -0800
> >From: Guy Harris <g...@alum.mit.edu>
> >To: Developer support list for Wireshark <wireshark-dev@wireshark.org>
> >Subject: Re: [Wireshark-dev] displaying header field without filtering
> >Message-ID: <d47d871e-c44b-4644-9af9-9009055dc...@alum.mit.edu>
> >Content-Type: text/plain; charset=iso-8859-1
> >
> >
> >On Feb 20, 2014, at 8:12 AM, John Dill <john.d...@greenfieldeng.com>
> wrote:
> >
> >> On 19 Feb 2014, Guy Harris <g...@alum.mit.edu> wrote:
> >>
> >>> If it's deemed too-inconvenient to require that all spare
> >>> fields/padding/etc. be given some named field or fields, perhaps
> >>> we should have a
> >>>
> >>>     proto_tree_add_spare(tree, tvb, offset, len);
> >>>
> >>> API, perhaps with a global preference item to indicate whether those
> >>> fields should be displayed in the protocol tree or not; if displayed,
> >>> they'll be shown as the raw hex data.
> >>>
> >>> An additional API might be
> >>>
> >>>     proto_tree_add_mbz(tree, tvb, offset, len);
> >>>
> >>> which is similar, but doesn't display the value unless it's non-zero,
> >>> *and* adds an expert info item if it's non-zero.
> >>
> >> Those functions sound very reasonable for controlling the display of
> >> spare bytes, but I'm also greedy enough to want some way to kick these
> >> Spare and Reserved header_field_info structures out of the Filter
> >> Expression dialog.
> >
> >In what fashion would those functions not achieve that goal?
>
> Before giving my answer, let me explain in more detail what my
> thought process is.  It's a bit long, so I apologize I couldn't
> make it shorter.  I'm also using 1.10.3 (it's annoying to get
> new versions of software installed on my workstation), so if
> there is an important behavioral change downstream, I probably
> missed it.
>
> Based on my coding tests, here is what I've observed in these given
> scenarios.  Let me start with the original setup.  'proto' is a
> placeholder for the moment.
>
> \code snippet
>     /* msg: Status */
>     {
>       &hf_Status_LRU,
>       {
>         "LRU",
>         "proto.Status.LRU",
>         FT_UINT8,
>         BASE_DEC,
>         VALS(proto_Status_LRU_enum_vals),
>         0x0,
>         "Line Replaceable Unit",
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Spare,
>       {
>         "Spare",
>         "proto.Status.Spare",
>         FT_UINT8,
>         BASE_HEX,
>         NULL,
>         0x0,
>         NULL,
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Status,
>       {
>         "Status",
>         "proto.Status.Status",
>         FT_UINT16,
>         BASE_DEC,
>         VALS(proto_Status_Status_enum_vals),
>         0x0,
>         "LRU Status",
>         HFILL
>       }
>     }
>
> ...
>
> void
> dissect_msg_Status(tvbuff_t *tvb, gint offset, proto_tree *tree)
> {
>   proto_tree_add_item(tree, hf_Status_LRU, tvb, offset, 1, ENC_BIG_ENDIAN);
>   proto_tree_add_item(tree, hf_Status_Spare, tvb, offset + 1, 1,
> ENC_BIG_ENDIAN);
>   proto_tree_add_item(tree, hf_Status_Status, tvb, offset + 2, 2,
> ENC_BIG_ENDIAN);
> }
> \endcode
>
> The observed behavior is the following:
>
> In the Packet Details pane, I see populated in a subtree
>
>         LRU: Hf_9087D (117)
>         Spare: 0x00
>         Status: Failed (0)
>
> In the Filter Expression dialog, I see entries for
>
> proto.Status.LRU
> proto.Status.Spare
> proto.Status.Status
>
> The desired requirement is to provide an option to display or not
> display 'Spare: 0x00' in the Packet Details based on a preference, but
> to not populate 'proto.Status.Spare' in the Filter Expression dialog.
>
> In my effort to satisfy this requirement, I attempted the following
> implementation.
>
> \code snippet
>     /* msg: Status */
>     {
>       &hf_Status_LRU,
>       {
>         "LRU",
>         "proto.Status.LRU",
>         FT_UINT8,
>         BASE_DEC,
>         VALS(proto_Status_LRU_enum_vals),
>         0x0,
>         "Line Replaceable Unit",
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Status,
>       {
>         "Status",
>         "proto.Status.Status",
>         FT_UINT16,
>         BASE_DEC,
>         VALS(proto_Status_Status_enum_vals),
>         0x0,
>         "LRU Status",
>         HFILL
>       }
>     }
>
> ...
>
> void
> dissect_msg_Status(tvbuff_t *tvb, gint offset, proto_tree *tree)
> {
>   proto_tree_add_item(tree, hf_Status_LRU, tvb, offset, 1, ENC_BIG_ENDIAN);
>   proto_tree_add_text(tree, tvb, offset + 1, 1, "Spare: 0x%02x",
> tvb_get_guint8(tvb, offset + 1) );
>   proto_tree_add_item(tree, hf_Status_Status, tvb, offset + 2, 2,
> ENC_BIG_ENDIAN);
> }
> \endcode
>
> This accomplishes the behavior that I want, with the caveat that
> I'm using an older (perhaps obsolete?) interface, in that it still
> populates the Packet Details pane with:
>
>         LRU: Hf_9087D (117)
>         Spare: 0x00
>         Status: Failed (0)
>
> but only has the following elements in the Filter Expression dialog
>
> proto.Status.LRU
> proto.Status.Status
>
> Now, if I use the following configuration:
>
> \code snippet
>     /* msg: Status */
>     {
>       &hf_Status_LRU,
>       {
>         "LRU",
>         "proto.Status.LRU",
>         FT_UINT8,
>         BASE_DEC,
>         VALS(proto_Status_LRU_enum_vals),
>         0x0,
>         "Line Replaceable Unit",
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Spare,
>       {
>         "Spare",
>         "proto.Status.Spare",
>         FT_UINT8,
>         BASE_HEX,
>         NULL,
>         0x0,
>         NULL,
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Status,
>       {
>         "Status",
>         "proto.Status.Status",
>         FT_UINT16,
>         BASE_DEC,
>         VALS(proto_Status_Status_enum_vals),
>         0x0,
>         "LRU Status",
>         HFILL
>       }
>     }
>
> ...
>
> void
> dissect_msg_Status(tvbuff_t *tvb, gint offset, proto_tree *tree)
> {
>   proto_tree_add_item(tree, hf_Status_LRU, tvb, offset, 1, ENC_BIG_ENDIAN);
>   proto_tree_add_item(tree, hf_Status_Status, tvb, offset + 2, 2,
> ENC_BIG_ENDIAN);
> }
> \endcode
>
> What I observed was that although no proto_tree_add_item was used
> to display the 'Spare' field, it still exists in the Filter
> Expression dialog.  This led me to believe that the functions
> from the proto_tree_add family do not impact the contents of the
> Filter Expression dialog.
>
> In the Packet Details pane, I see populated in a subtree
>
>         LRU: Hf_9087D (117)
>         Status: Failed (0)
>
> In the Filter Expression dialog, I see entries for
>
> proto.Status.LRU
> proto.Status.Spare
> proto.Status.Status
>
> So based on my thought process, when you mention that adding
> a pair of functions in the proto_tree_add family would solve
> my problem a la
>
> proto_tree_add_spare(tree, tvb, offset, len);
> proto_tree_add_mbz(tree, tvb, offset, len);
>
> I did not get the impression that these functions would
> allow me to have the following configuration with the
> desired result:
>
> \code
>     /* msg: Status */
>     {
>       &hf_Status_LRU,
>       {
>         "LRU",
>         "proto.Status.LRU",
>         FT_UINT8,
>         BASE_DEC,
>         VALS(proto_Status_LRU_enum_vals),
>         0x0,
>         "Line Replaceable Unit",
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Spare,
>       {
>         "Spare",
>         "proto.Status.Spare",
>         FT_UINT8,
>         BASE_HEX,
>         NULL,
>         0x0,
>         NULL,
>         HFILL
>       }
>     },
>     {
>       &hf_Status_Status,
>       {
>         "Status",
>         "proto.Status.Status",
>         FT_UINT16,
>         BASE_DEC,
>         VALS(proto_Status_Status_enum_vals),
>         0x0,
>         "LRU Status",
>         HFILL
>       }
>     }
>
> ...
>
> void
> dissect_msg_Status(tvbuff_t *tvb, gint offset, proto_tree *tree)
> {
>   proto_tree_add_item(tree, hf_Status_LRU, tvb, offset, 1, ENC_BIG_ENDIAN);
>   proto_tree_add_spare(tree, hf_Status_Spare, tvb, offset + 1, 1,
> ENC_BIG_ENDIAN);
>   proto_tree_add_item(tree, hf_Status_Status, tvb, offset + 2, 2,
> ENC_BIG_ENDIAN);
> }
> \endcode
>
> In the Packet Details pane, I see populated in a subtree
>
>         LRU: Hf_9087D (117)
>         Spare: 0x00
>         Status: Failed (0)
>
> In the Filter Expression dialog, I see entries for
>
> proto.Status.LRU
> proto.Status.Status
>
> The reason for needing 'hf_Status_Spare' in my version of the
> proto_tree_add_spare call is that I need a name for the Spare
> byte, which could be Spare, Filler_1, Not_Used2, Pad_3, etc...
>
> From the topic discussion, I got the impression that not
> putting hf_register_info entries for Spare or Reserved fields
> was considered bad practice.  So if I needed to make an
> hf_register_info entry, there wasn't any flag to keep it from
> populating the Filter Expression dialog.
>
> So from my thought process, your suggestion of adding more
> proto_tree_add functions would not address the problem of not
> displaying these Spare or Reserved data elements in the Filter
> Expression dialog, since the only method to remove them that
> I've seen is to not declare them in hf_register_info.
>
> Again, if the messages were like the example above, it wouldn't
> be that big of a deal to have these Spare filter fields.  The
> messages I'm dealing with range from one to several hundred data
> elements.
>
> I would appreciate any thoughts that you would have on my
> scenario.
>
> Best regards,
> John Dill
>
> ___________________________________________________________________________
> 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
>
___________________________________________________________________________
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

Reply via email to