ANNOUNCEMENT: Live Wireshark University & Allegro Packets online APAC Wireshark Training Session
April 17th, 2024 | 14:30-16:00 SGT (UTC+8) | Online

Wireshark-dev: Re: [Wireshark-dev] dissection question

From: Jaap Keuter <jaap.keuter@xxxxxxxxx>
Date: Tue, 16 Feb 2010 20:38:30 +0100
Hi,

Is the sizeofroutername in the protocol a 8 bit value or 16 bit value?

You read a 8 bit value:

>                         sizeofroutername = tvb_get_guint8(tvb, offset);

, but present a 16 bit value:

>                         proto_tree_add_item(helen_sub_tree,
> hf_helen_sizeofRouterName, tvb, offset, 2, FALSE);
>                         offset += 2;

Thanks,
Jaap

Brian Oleksa wrote:
Hello All

What I am really looking to do is the following:

proto_tree_add_item(helen_sub_tree, hf_helen_routername, tvb, offset, *sizeofroutername*, FALSE);

But putting in the "sizeofroutername" does not seem to work and does indeed through off the rest of the packet.

When I "hardcode" the value (which in this case it is 2... as I can see it in the hex dump window).. it appears to work ok....but I know that I cannot hard code that value. proto_tree_add_item(helen_sub_tree, hf_helen_routername, tvb, offset, 2, FALSE);

Any thoughts..??

Code snippet is below

Thanks,
Brian





//Router Ext:
                if (code == 1001) {
                    guint8 routercount;
                    guint8 interfacecount;
                    guint8 sizeofinterfacename;
                    guint8 sizeofroutername;
                    guint i;
                    guint k;

                    //router count
                    routercount = tvb_get_guint8(tvb, offset);
proto_tree_add_item(helen_sub_tree, hf_helen_routerCount, tvb, offset, 1, FALSE);
                    offset += 1;


                    //Router Data
                    for (i = 0; i < routercount; i++) {
                        nstime_t t;
                        guint64 msecs_since_the_epoch;
                        struct tm *tmp;

                        //Size of router name
                        sizeofroutername = tvb_get_guint8(tvb, offset);
proto_tree_add_item(helen_sub_tree, hf_helen_sizeofRouterName, tvb, offset, 2, FALSE);
                        offset += 2;

*Here is where the problem starts:*

                        //Router Name
//proto_tree_add_item(helen_sub_tree, hf_helen_routername, tvb, offset, sizeofroutername, FALSE); proto_tree_add_item(helen_sub_tree, hf_helen_routername, tvb, offset, 2, FALSE);
                        offset += 2;
                        //offset += sizeofroutername;

                        //status
proto_tree_add_uint(helen_sub_tree, hf_helen_routerstatus, tvb, offset, 1, FALSE);
                        offset += 1;

                        //update time
                        msecs_since_the_epoch = tvb_get_ntoh64(tvb, offset);
                        t.secs = msecs_since_the_epoch / 1000;
t.nsecs = (msecs_since_the_epoch % 1000)*1000000; /* milliseconds to nanoseconds */
                        tmp = gmtime(&t.secs);
proto_tree_add_time(helen_sub_tree, hf_helen_time, tvb, offset, 8, &t);
                        offset += 8;

                        //cpu % used
proto_tree_add_uint(helen_sub_tree, hf_helen_cpuusage, tvb, offset, 1, FALSE);
                        offset += 1;

                        //interface count
                        interfacecount = tvb_get_guint8(tvb, offset);
proto_tree_add_uint(helen_sub_tree, hf_helen_interface_count, tvb, offset, 1, FALSE);
                        offset += 1;

                        //Interface Data
                        for (k = 0; k < interfacecount; k++) {
proto_tree_add_item(helen_sub_tree, hf_helen_sizeofInterfaceName, tvb, offset, 2, FALSE);
                            offset += 2;

                            //Interface Name
sizeofinterfacename = tvb_get_guint8(tvb, offset); proto_tree_add_item(helen_sub_tree, hf_helen_interfacename, tvb, offset, 8, FALSE);
                            offset += sizeofinterfacename;

                            //incoming bytes
proto_tree_add_item(helen_sub_tree, hf_helen_incomingBytes, tvb, offset, 4, FALSE);
                            offset += 4;

                            //outgoing bytes
proto_tree_add_item(helen_sub_tree, hf_helen_outgoingBytes, tvb, offset, 4, FALSE);
                            offset += 4;

                            //interface active?
proto_tree_add_uint(helen_sub_tree, hf_helen_interfaceActivity, tvb, offset, 1, FALSE);
                           offset += 1;

                        }

                    }

                }


        { &hf_helen_routername,
{ "Router Name", "helen.routername", FT_STRING, BASE_NONE, NULL, 0x0,
                NULL, HFILL}},
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe