Ethereal-dev: Re: [Ethereal-dev] RFC: new TVBUFF type
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Ronnie Sahlberg" <rsahlber@xxxxxxxxxxxxxx>
Date: Sun, 27 May 2001 19:15:56 +1000
Hi list, Comments please, By coding a bit and thinking, recoding, thinking, trying to figure out how it will be used, ... I came up with the following thoughts: New thoughts on my thoughts of creating a new version of COMPOSITE tvbuffs. COMPOSITE tvbuffs contains a list of backing structures as: struct backing_data { guint32 start; guint32 len; tvbuff_t real_data_tvbuff; guint32 offset; }; This structure tells us that real_data_tvbuff[offset,offset+len] is mapped into the composite at composite[start,len]. To map a real_data tvbuff into a composite one uses the function tvb_insert(tvbuff_t *composite, guint32 start, guint32 len, tvbuff_t *real_data, guint32 offset). REAL_DATA, this type of tvbuff works as it always has. It has the following properties: * It is backed by a real malloc()ed buffer holding the real data. * It maps one continous buffer from offset 0 to length, where length may be up to 4Gb. * The valid buffer range for a REAL_DATA tvbuff is [0,length] COMPOSITE, redesigned, this type of tvbuffis a holder for slices of REAL_DATA tvbuffs. It has the following properties: * It contains a virtual address range from 0 to 4G. * the buffer data will/need not be continous. * Slices (parts) of REAL_DATA tvbuffs can be mapped to arbitrary positions inside the address range. * One can map a (slice of) REAL_DATA tvbuff into the address range of the COMPOSITE with a call tvb_insert(composite_tvb, start, length, real_data_tvb, offset) Which means that real_data_tvb[offset,offset+len] is mapped into composite_tvb[start,len]. Example: assume real_data[0,100] and the call tvb_insert(composite, 200, 50, real_data, 50) this would map real_data[50,50] into composite[200,250]. If len would point to data outside the bounds of real_data_tvb, a slice of read_data_tvb would automatically be created and mapped instead. Example: assume real_data[0,100] and the call tvb_insert(composite, 200,100,real_data,50) this would map the slice real_data[50,50] into composite[200,50]. * Only real_data tvbuffs can be mapped into a composite. * If mapping real_data into a composite would cause an overlap with existing data in the composite, only the non-overlapping part of real_data will be mapped. (the overlapping data could be checked and flagged with a future new tvb_memcmp() call) * If mapping a composite into a composite, the composite being mapped will degenerate into a sequence of real_data tvbuffs, and these will be mapped instead as appropriate. SUBSET: saubset tvbuffs are redunbdant and can be removed. A subset tvbuff really just slices a real_data tvbuff and remaps it at ostart==0. This behaviour will be emulated with a composite only mapping one real_data slice at start==0 in the composite. tvb_new_subset() (I think, I cant check the source when I am running windows) will remain as a function since many dissectors use it, but this function will not create a subset any more, it will create a composite and map the real_data slice at start==0 in the composite. All accessors will be updated to handle both REAL_DATA (as before) and also COMPOSITE. Support in accessors for SUBSETs can be removed. Must have properties for COMPOSITE: (so it scales to useful sizes of captures) * The operation to insert a real_data tvbuff into the composite must be very very cheap in regards to cpu and memory consumption. * The operation to search for a backing tvb corresponding to a random address in the range 0-4G of buffer for the composite must be very very efficient and cheap. * The operation to access backing tvbuffs sequentially forwards and backwards must be very very cheap. These properties I have good hope in managing to satisfy.
- References:
- Re: [Ethereal-dev] RFC: new TVBUFF type
- From: Guy Harris
- Re: [Ethereal-dev] RFC: new TVBUFF type
- From: Ronnie Sahlberg
- Re: [Ethereal-dev] RFC: new TVBUFF type
- Prev by Date: Re: [Ethereal-dev] RX/AFS dissectors updated
- Next by Date: [Ethereal-dev] Ethereal BUG
- Previous by thread: Re: [Ethereal-dev] RFC: new TVBUFF type
- Next by thread: Re: [Ethereal-dev] RFC: new TVBUFF type
- Index(es):