On May 24, 2010, at 9:40 AM, Scott wrote: > Hi Guy! I hope your weekend was enjoyable.
Thanks! I hope yours was enjoyable, too. > On Sat, May 22, 2010 at 2:39 PM, Guy Harris <g...@alum.mit.edu> wrote: >> So presumably the IP protocol rider protocol has fields of its own. >> >> Does the IP protocol rider have an IP protocol number assigned to it, so >> that you have: >> link-layer protocol >> IP, with the IP protocol number having the value for the IP protocol >> rider protocol >> IP protocol rider protocol >> custom protocol >> some protocol that normally runs directly atop IP >> >> or is this a non-standard encapsulation where you have: >> link-layer protocol >> IP, with the IP protocol number having the value for the protocol >> that's above the custom protocol >> IP protocol rider protocol >> custom protocol >> some protocol that normally runs directly atop IP >> > > The former. So that means that either the IP protocol rider protocol, or the custom protocol, needs to have a field giving the protocol number of the protocol that runs top the custom protocol. Which of of them has that field? > I overcame the problem of the protocols not matching by seeing that the > protocol number copied over from IP to my IP rider and *supposedly* stored in > hf_[IPR protocol] field was incorrect. It was 65,000 something when > printf'd. What does hf_register_info do with that variable (hf_[IPR > protocol])? What do you mean by "hf_[IPR protocol]"? A protocol *does* have a gint value that corresponds to it, but it's not put into the hf_register_info array for that protocol; it's separately returned by the call to proto_register_protocol(). That value is used in the protocol dissector's proto_tree_add_item() or proto_tree_add_protocol_format() call that adds the top-level item in the protocol tree for that protocol's data. In the array of hf_register_info values are structures that have information about various fields in packets for that protocol; that includes pointers to hf_ variables for those fields. Those hf_ variables are set by the proto_register_field_array() call. Both the proto_ values returned by proto_register_protocol(), and the hf_ values set by proto_register_field_array(), are used as indices into a big table of structures giving information about protocols and fields. Those indices are passed to various routines that add items to protocol trees, as well as some other routines. > I suppose telling it that it is an FT_UINT8 tells it how to read it from the > tvbuff_t. The type field of an hf_register_info structure indicates, for octal and hex values, how many digits to display. proto_tree_add_item() will fetch the value from the tvbuff, but the call it uses depends on the length field, not the type of the field - there are, I think, some dissectors where a field of a given FT_UINTn or FT_INTn type doesn't always have the same length in the packet. ___________________________________________________________________________ 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