On Mon, May 24, 2010 at 3:54 PM, Guy Harris <g...@alum.mit.edu> wrote:
>
> OK, so that's a little more complicated.  There are (at least) three ways
> of handling that:
>
>        1) dissect the IP rider and the custom protocol as separate
> protocols, and use the standard mechanisms for handing off from the IP rider
> dissector to the custom protocol dissector;
>
>        2) dissect the IP rider and the custom protocol as separate
> protocols, and use a specialized mechanism for handing off from the IP rider
> dissector to the custom protocol dissector;
>
>        3) dissect them as a single protocol.
>
> For 1), you would have to pass the IP protocol number from the IP rider
> protocol to the custom protocol.  What you would do there is:
>
> In the IP rider dissector:
>
>        in its register-handoff routine, register it in the "ip.proto"
> dissector table with its IP protocol number, and fetch a handle for the
> custom protocol dissector with find_dissector(), using the name the custom
> dissector uses to register itself;
>
>        in its dissection routine, fetch the IP protocol number field's
> value into a local variable, and, when you want to call the custom
> protocol's dissector, set "pinfo->private_data" to point to the local
> variable and call the custom protocol dissector, using its handle, with
> call_dissector().
>
> In the custom protocol dissector:
>
>        in its register routine, register the dissector handle with
> register_dissector(), using the same name that the IP rider dissector uses
> to find it;
>
>        in its register-handoff routine, fetch the "ip.proto" dissector
> table with find_dissector_table();
>
>        in its dissection routine, when it is to call the dissector for its
> payload, use dissector_try_port(), using the IP protocol number pointed to
> by pinfo->private_data.
>
> 2) could be done similar to 1), except that you could just directly call
> the custom protocol dissector and have it take an additional argument, the
> IP protocol number, as an argument, or you could just dissect both protocol
> layers in the same routine.  That would, however, mean that some of the work
> done for you by call_dissector(), such as saving and restoring some state
> (which might not matter if your dissector doesn't change it), setting the
> current protocol name that shows up in some messages, and updating the
> list-of-protocols field, won't be done.  I wouldn't recommend doing it that
> way.
>
> How 3) would be done should be obvious, but there might be reasons not to
> do that.
>

Ok.  I did a mixture of 1 and 2.


>  > Otherwise, here comes another question.  I solved the problem exhibited
> in:
> > http://img80.imageshack.us/img80/5582/malformed.gif
>
> You mean the problem that Wireshark thinks that 0x1bc4 is not equal to
> 0x1bc4? :-)
>

Yep :D


>  > by hardcoding a value into the reported_length parameter of
> tvb_new_subset() instead of using -1.  This is obviously not a long term
> solution, so what I need to get at is the IP header's value for "Total
> Length" (ip.len).
>
> That's odd - the reported_length value for the tvbuff handed to the IPR
> dissector should be the total length value from the IP header unless this is
> an IP fragment, so changing the value of the length shouldn't matter.
>
> Is the packet in question the first fragment of an IP datagram?


Nope.  The problem had to do with the code in packet-ip.c between lines 2375
and 2394.  If I left it as -1 it equated to 65,535 and the next dissector in
line didn't like that I suppose.  Something with what ip_checksum returned
triggered it.

Well, I've got it working right now.  I may need more help later with
preferences.  There's one more bug hanging around I just saw and I'll work
on that tomorrow.  Thanks a ton Guy.

-Scott
___________________________________________________________________________
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