Ethereal-dev: [Ethereal-dev] Ethereal core enhancements
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Matthias" <matthias.nyffenegger@xxxxxxxx>
Date: Mon, 18 Jun 2001 14:36:41 +0200
Hi
I am new to the Ethereal developer mailing list.
Our team is currently working on a customer project which involves decoding
of
a proprietary protocol. Ethereal has been chosen as the basis for this task.
We have already implemented a prototype using the Ethereal protocol
dissector
plugin API.
Our customer wants us to enhance the Ethereal 'core' by the following
features:
1. Stop capturing based on criterion:
a) maximum disk usage reached
b) maximum dump file size reached
b) capture timer expired
2. Dump captured packets to ringbuffer, i.e. only the most recently
captured
packets are available (includes support for multiple dump files).
3. Configuration GUI for 1. and 2.
In the mail attachement you can find a rough design proposal for points 1 &
2.
Any comment on this is much appreciated.
The customer is aware of the fact that Ethereal is an open source project
and
agrees to release these enhancements under GNU public license. We would like
to include the enhancements in the Ethereal development stream.
As mentioned above, the project involves decoding of a proprietary protocol.
The particular protocol is XML-style and sits on top of HTTP. Our customer
is currently specifiying another protocol which is also likely to be XML
based. We think about implementing a more generic protocol dissector for
XML-style protocols, configurable by XSLT style sheets.
The question is now, are there any plans or has anybody already started with
implemetation of one or more of the above mentioned features? I have been
sniffing through the Ethereal dev. mailing list archive but could not find
anything concrete.
Regards Matthias
--------------------
ICLIP AG
Matthias Nyffenegger
Sandrainstrasse 15
CH-3007 Bern
+41(0)313762017
--------------------
3.1. The autostop conditions
3.1.1. Information required to verify the stop conditions
Criterion 1: stop logging based on time
- The max. duration of the capture
- The time passed since capture was started
>> Must be checked periodically
Criterion 2: stop logging cause max. disk usage
- The allowed disk usage
- The available disk space
- The disk space required for the dump file
- The size of the next packet to be dumped
>> Must be checked before dumping new data to the dump file.
Criterion 3: stop logging cause max. log file size reached
- The max. log file size
- The current size of the logfile
- The size of the next packet to be dumped
>> Must be checked before dumping new data to the dump file.
3.1.2. Actions to be performed when criterion is fulfilled
(Criterion enumeration see chapter 3.1.1.)
Criterion 1:
Simply stop the capturing by setting capture loop condition to FALSE.
Criterion 2 & 3:
In case the current packet is still dumped, simply stop the capturing
by setting capture loop condition to FALSE. If the current packet can't
be dumped (because file size would exceed the max. size specified) there
might be some cleanup work to do.
3.1.3. The stop condition verification handler
The basic idea is to encapsulate the verification of a stop condition
in a separate module while the associated action remains in the calling
context.
A generic condition verification handler must be defined which would be
called in appropriate places in order to check whether to stop capturing
and possibly jump out of the normal program flow or to proceed without
particular action. The calling context must supply sufficient
information to the handler to enable it to verify the stop condition
(associated with the context) appropriately. The calling context is
responsible for the actual 'stop signalling' and for the 'cleanup' after
a stop has been signalled.
Stop condition verifiers are functions that can be registered
dynamically on the verification handler. The handler redirects the
information recieved from the application at runtime to the appropriate
verifier.
This design approach allows to dynamically change the stop conditions
at runtime.
3.1.4. Where to hook into the application
Timeout criterion:
The timeout criterion could be verified in a timer callback function.
The timer is started when capturing is started e.g. somewhere in the
'capture()' function. In the timer callback we would call the generic
verification handler which would invoke the appropriate stop criterion
verification function.
File size, disk usage criterion:
There is a generic point of access to the dump file provided by the
'wiretap' library in function 'wtap_dump()' in file '.\wiretap\file.c'.
'gboolean wtap_dump(wtap_dumper *wdh,
const struct wtap_pkthdr *phdr,
const union wtap_pseudo_header *pseudo_header,
const u_char *pd,
int *err)'
Here we have the size of the next packet to be dumped at disposal
in argument 'phdr'. We also have the file descriptor of the dump file
in argument 'wdh'. This is enough information to find out about the
size of the dump file before and after dumping the current packet.
3.2. The ringbuffer
A ringbuffer would be implemented by creating multiple dump files and
overwriting them in round-robin fashion thus having only the most recent
packets stored in the dump files.
A process synchronization mechanism must be defined to synchronize access
to multiple dump files in case of real time capturing where we have two
processes, the parent process which acts as the reader and the child
process which acts as the writer. This implies ipc capabilities for the
sync. mechanism.
Ethereal currently supports a single dump file only. Dump file access
is encapsulated through the 'wiretap' library, but it's not always
used throughout the Ethereal 0.8.18 core. The 'wiretap' lib should be
enhanced to be able to handle multiple dump files but not showing this
to the application. The sync. pipe used for ipc should also be
encapsulated in the 'wiretap' library.
The following work must be considered:
- 'wiretap' file access must support a configurable number of files
of configurable size. The fact that there are multiple files must
not be visible outside 'wiretap'.
- A synchronization mechanism between parent and child process for
multiple dump file access must be defined, preferably also encapsulated
in the 'wiretap' lib.
- All file access in the Ethereal application must be done by means
of the 'wiretap' library, i.e. file descriptors, -handles should
not be visible outside 'wiretap'. The filename is the only
reference directly visible to the application.
- The dump file header for file type WTAP_FILE_PCAP must be extended
for multiple dump file support.
- Follow-Ups:
- Re: [Ethereal-dev] Ethereal core enhancements
- From: Guy Harris
- Re: [Ethereal-dev] Ethereal core enhancements
- From: Guy Harris
- Re: [Ethereal-dev] Ethereal core enhancements
- From: Guy Harris
- Re: [Ethereal-dev] Ethereal core enhancements
- Prev by Date: Re: [Ethereal-dev] new accessors
- Next by Date: [Ethereal-dev] Promiscuous-Mode Selection
- Previous by thread: Re: [Ethereal-dev] Signed/unsigned fixes
- Next by thread: Re: [Ethereal-dev] Ethereal core enhancements
- Index(es):





