Wireshark-dev: Re: [Wireshark-dev] Actualize kafka dissector
From: Dmitry Lazurkin <dilaz03@xxxxxxxxx>
Date: Tue, 15 Nov 2016 20:05:26 +0300
Hello. > - attaching per-packet kafka info and looking it up all over the place? How to working with per-packet data? Which functions i should use for it? > I don't remember how big the protocol changes are, but I > wonder how much longer it would take to support api_version 2 than to > warn that we don't support it? I think this is two independent tasks. Ok. I understood following: - Add array of structs about supported min_version and max_version for each request/response. Parse only header for packates with unsupported version. Add expert info to unsupported packets. - Support latest kafka protocol. Better pass api_version to each function. How to test kafka dissector? Catch real kafka session? Randpkt? Unit-tests? Thanks to all. On 11/15/2016 12:53 PM, Martin Mathieson wrote: > Hi, coming to this discussion late.. > > I added support for api_version 1 a few months ago when I needed to > see the decode of those messages. I haven't yet needed to work with > api_version 2, but as I remember it also changes several of the > formats, including the 'kafka message' headers themselves - so this > would involve propagating api_version into many more functions (I did > the bare minimum for api_version 1, and have only done the messages I > was interested in at the time...). > > The alternative to passing this api_version would maybe be: > - a global variable...? > - attaching per-packet kafka info and looking it up all over the place? > > I agree that its not pretty, but I think propagating api_version down > into all of the functions that need it is probably the least bad way > to go. I don't remember how big the protocol changes are, but I > wonder how much longer it would take to support api_version 2 than to > warn that we don't support it? Having said that, it would be good to > detect and not try to dissect messages belonging to future protocol > versions we also don't support yet. > > Regards, > Martin > > On Tue, Nov 15, 2016 at 2:32 AM, Michael Mann <mmann78@xxxxxxxxxxxx> wrote: >> The answer is typically "follow the coding convention of the dissector if >> modifying an existing dissector". And when most dissectors are created, >> they start by using the example packet-PROTOABBREV.c (which explicitly lists >> out the parameters). I don't think the performance is an issue either way. >> >> The Wireshark dissector architecture is very conducive to copy/paste, which >> also perpetuates the convention of explicitly listing out the parameters (so >> proto_tree_add_xxx functions only need very minimal changes if copying from >> another dissector). This is also why I don't think it's "extra typing" to >> list the parameters out because you're probably just doing from copy/paste >> shortcut keys. >> >> Wireshark does have a ptvcursor API that can save you some of the "standard" >> function parameters, but based on your example, I don't think it'll help >> that much. >> >> >> >> -----Original Message----- >> From: Dmitry Lazurkin <dilaz03@xxxxxxxxx> >> To: Developer support list for Wireshark <wireshark-dev@xxxxxxxxxxxxx> >> Sent: Mon, Nov 14, 2016 6:04 pm >> Subject: Re: [Wireshark-dev] Actualize kafka dissector >> >> Second question about using "API version" value in dissect functions. >> This value may change parsing of packet. For now it passed as argument >> to some dissect functions. But for now it used only in root dissect >> function of request/response type (not passed to nested functions). I >> have next solutions for this: >> >> --------------------------------------- >> Use current solution: always pass api_version variable to all functions >> and subfunctions. >> >> Too many arguments for all functions. May be this is normal (: >> >> --------------------------------------- >> Create context structure and pass it to functions/subfunctions: >> >> typedef struct _kafka_context_t { >> tvbuff_t *tvb; >> packet_info *pinfo; >> guint16 api_version; >> int offset; >> } kafka_context_t; >> >> offset field is not necessary. Create instance of this struct in root >> dissect function as local variable and pass it to dissect functions by >> pointer. Use context like this: >> >> proto_tree_add_item(tree, hf_kafka_string_len, ctx->tvb, ctx->offset, 2, >> ENC_BIG_ENDIAN); >> >> Here i have question. Are many pointer dereferences perfomance issue? >> >> --------------------------------------- >> >> Create separate function for parsing each version of packet with code >> duplication. Too much code but may be better for supporting. >> >> >> I like context but passing version as separate argument is good too. >> Which solution is better in wireshark community? >> >> >> ___________________________________________________________________________ >> Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> >> Archives: https://www.wireshark.org/lists/wireshark-dev >> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev >> mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe >> >> ___________________________________________________________________________ >> Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> >> Archives: https://www.wireshark.org/lists/wireshark-dev >> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev >> mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> > Archives: https://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev > mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe
- Follow-Ups:
- Re: [Wireshark-dev] Actualize kafka dissector
- From: Jaap Keuter
- Re: [Wireshark-dev] Actualize kafka dissector
- From: Martin Mathieson
- Re: [Wireshark-dev] Actualize kafka dissector
- References:
- Re: [Wireshark-dev] Actualize kafka dissector
- From: Dmitry Lazurkin
- Re: [Wireshark-dev] Actualize kafka dissector
- From: Michael Mann
- Re: [Wireshark-dev] Actualize kafka dissector
- From: Martin Mathieson
- Re: [Wireshark-dev] Actualize kafka dissector
- Prev by Date: Re: [Wireshark-dev] Actualize kafka dissector
- Next by Date: Re: [Wireshark-dev] Actualize kafka dissector
- Previous by thread: Re: [Wireshark-dev] Actualize kafka dissector
- Next by thread: Re: [Wireshark-dev] Actualize kafka dissector
- Index(es):