Wireshark-dev: Re: [Wireshark-dev] Actualize kafka dissector
From: Martin Mathieson <martin.r.mathieson@xxxxxxxxxxxxxx>
Date: Tue, 15 Nov 2016 21:38:59 +0000
On Tue, Nov 15, 2016 at 5:05 PM, Dmitry Lazurkin <dilaz03@xxxxxxxxx> wrote: > 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 think we should use per-packet info to remember what the api_version is, but as below just pass it down into called functions. >> 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. v2 brings very few changes to fields, I'd rather see it all implemented than track which methods are not supported or not. > - Support latest kafka protocol. Better pass api_version to each function. > Yes, I think so. Once its been passed down into all of the functions it'll be there to be used if needed. > > How to test kafka dissector? Catch real kafka session? Randpkt? Unit-tests? Real captures we care about supporting are the most important. You could also run through a tutorial such as this one (https://www.tutorialspoint.com/apache_kafka/apache_kafka_basic_operations.htm) and capture the traffic. > > 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 > > > > ___________________________________________________________________________ > 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
- 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
- From: Dmitry Lazurkin
- Re: [Wireshark-dev] Actualize kafka dissector
- Prev by Date: Re: [Wireshark-dev] Actualize kafka dissector
- Next by Date: [Wireshark-dev] How to stop dissection in middle of malformed packet?
- Previous by thread: Re: [Wireshark-dev] Actualize kafka dissector
- Next by thread: [Wireshark-dev] Live wireshark capture packets from my windows filter driver
- Index(es):