<refentry id="libnetdude-libnd-trace">
<refmeta>
<refentrytitle id="top_of_page">libnd_trace</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>LIBNETDUDE Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>libnd_trace</refname>
<refpurpose></refpurpose>
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
</refnamediv>

<refsynopsisdiv id="synopsis">
<title id="synopsis.title">Synopsis</title>

<synopsis>



enum        <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link>;
#define     <link linkend="area-space-start">area_space_start</link>
#define     <link linkend="area-space-end">area_space_end</link>
#define     <link linkend="area-time-start">area_time_start</link>
#define     <link linkend="area-time-end">area_time_end</link>
<link linkend="LND-Trace">LND_Trace</link>*  <link linkend="libnd-trace-new">libnd_trace_new</link>                 (const <link linkend="char">char</link> *filename);
<link linkend="void">void</link>        <link linkend="libnd-trace-free">libnd_trace_free</link>                (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-init">libnd_trace_init</link>                (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             const <link linkend="char">char</link> *source_file);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-initialized">libnd_trace_initialized</link>         (const <link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="void">void</link>        <link linkend="libnd-trace-set-iterator-mode">libnd_trace_set_iterator_mode</link>   (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> mode);
<link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> <link linkend="libnd-trace-get-iterator-mode">libnd_trace_get_iterator_mode</link>
                                            (const <link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="void">void</link>        <link linkend="libnd-trace-set-area">libnd_trace_set_area</link>            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area);
<link linkend="void">void</link>        <link linkend="libnd-trace-get-area">libnd_trace_get_area</link>            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area);
const <link linkend="char">char</link>* <link linkend="libnd-trace-get-name">libnd_trace_get_name</link>            (const <link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="LND-Packet">LND_Packet</link>* <link linkend="libnd-trace-get-packets">libnd_trace_get_packets</link>         (const <link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-save">libnd_trace_save</link>                (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-save-as">libnd_trace_save_as</link>             (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             const <link linkend="char">char</link> *filename);
<link linkend="void">void</link>        <link linkend="libnd-trace-delete-hidden-packets">libnd_trace_delete_hidden_packets</link>
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="void">void</link>        <link linkend="libnd-trace-set-dirty">libnd_trace_set_dirty</link>           (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="gboolean">gboolean</link> dirty);
<link linkend="void">void</link>        <link linkend="libnd-trace-add-filter">libnd_trace_add_filter</link>          (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);
<link linkend="void">void</link>        <link linkend="libnd-trace-remove-filter">libnd_trace_remove_filter</link>       (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);
<link linkend="void">void</link>        <link linkend="libnd-trace-clear-filters">libnd_trace_clear_filters</link>       (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-has-filter">libnd_trace_has_filter</link>          (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);
<link linkend="guint64">guint64</link>     <link linkend="libnd-trace-apply-filters">libnd_trace_apply_filters</link>       (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-trace-sync">libnd_trace_sync</link>                (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="LND-TraceObserver">LND_TraceObserver</link>* <link linkend="libnd-trace-observer-new">libnd_trace_observer_new</link> (void);
<link linkend="void">void</link>        <link linkend="libnd-trace-observer-free">libnd_trace_observer_free</link>       (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);
<link linkend="void">void</link>        <link linkend="libnd-trace-add-observer">libnd_trace_add_observer</link>        (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);
<link linkend="void">void</link>        <link linkend="libnd-trace-del-observer">libnd_trace_del_observer</link>        (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);
<link linkend="void">void</link>        <link linkend="libnd-trace-tell-observers">libnd_trace_tell_observers</link>      (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);
<link linkend="void">void</link>        <link linkend="libnd-trace-block-packet-observer-op">libnd_trace_block_packet_observer_op</link>
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketObserverOp">LND_PacketObserverOp</link> op);
<link linkend="void">void</link>        <link linkend="libnd-trace-unblock-packet-observer-op">libnd_trace_unblock_packet_observer_op</link>
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketObserverOp">LND_PacketObserverOp</link> op);
<link linkend="void">void</link>        <link linkend="libnd-trace-block-trace-observer-op">libnd_trace_block_trace_observer_op</link>
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);
<link linkend="void">void</link>        <link linkend="libnd-trace-unblock-trace-observer-op">libnd_trace_unblock_trace_observer_op</link>
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);
<link linkend="void">void</link>        <link linkend="libnd-trace-area-init-time">libnd_trace_area_init_time</link>      (<link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv_start,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv_end);
<link linkend="void">void</link>        <link linkend="libnd-trace-area-init-space">libnd_trace_area_init_space</link>     (<link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             <link linkend="double">double</link> start,
                                             <link linkend="double">double</link> end);
</synopsis>
</refsynopsisdiv>









<refsect1 id="desc">
<title id="desc.title">Description</title>
<para>

</para>
</refsect1>

<refsect1 id="details">
<title id="details.title">Details</title>
<refsect2>
<title><anchor id="LND-TraceObserverOp" role="enum">enum LND_TraceObserverOp</title>
<indexterm><primary>LND_TraceObserverOp</primary></indexterm><programlisting>typedef enum {  
  LND_TRACE_MODIFIED      = (1 &lt;&lt; 0), /* Trace got modified */
  LND_TRACE_CLEANED       = (1 &lt;&lt; 1), /* Trace dirty bit got cleared */
  LND_TRACE_JUMPED        = (1 &lt;&lt; 2), /* Jump to other location occurred */
  LND_TRACE_RELOAD        = (1 &lt;&lt; 3), /* New packets loaded into memory */
  LND_TRACE_CLEAR         = (1 &lt;&lt; 4), /* Trace's current part got cleared */
  LND_TRACE_IT_AREA_SET   = (1 &lt;&lt; 5)  /* Trace's iterator area got set to new value */
} LND_TraceObserverOp;
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="area-space-start" role="macro">area_space_start</title>
<indexterm><primary>area_space_start</primary></indexterm><programlisting>#define area_space_start un.space.space_start
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="area-space-end" role="macro">area_space_end</title>
<indexterm><primary>area_space_end</primary></indexterm><programlisting>#define area_space_end   un.space.space_end
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="area-time-start" role="macro">area_time_start</title>
<indexterm><primary>area_time_start</primary></indexterm><programlisting>#define area_time_start  un.time.time_start
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="area-time-end" role="macro">area_time_end</title>
<indexterm><primary>area_time_end</primary></indexterm><programlisting>#define area_time_end    un.time.time_end
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="libnd-trace-new" role="function">libnd_trace_new ()</title>
<indexterm><primary>libnd_trace_new</primary></indexterm><programlisting><link linkend="LND-Trace">LND_Trace</link>*  libnd_trace_new                 (const <link linkend="char">char</link> *filename);</programlisting>
<para>
This is the constructor function for new traces. The <parameter>filename</parameter>
is the full name of a trace file. You can pass <link linkend="NULL:CAPS"><literal>NULL</literal></link> if you don't
want/can provide packet data yet (as in live capture, for example).
If a filename is given, the file is checked for existence
and readability, if these checks fail, <link linkend="NULL:CAPS"><literal>NULL</literal></link> is returned. Otherwise
the trace is read into memory and initialized.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> canonical name of the trace file in the filesystem
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new trace.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-free" role="function">libnd_trace_free ()</title>
<indexterm><primary>libnd_trace_free</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_free                (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
This function closes the tcpdump connection for this trace
and releases the memory it occupies, together with all its
packets.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to free.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-init" role="function">libnd_trace_init ()</title>
<indexterm><primary>libnd_trace_init</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_init                (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             const <link linkend="char">char</link> *source_file);</programlisting>
<para>
You can initialize a trace to a different input file using this function.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to initialize.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>source_file</parameter>&nbsp;:</term>
<listitem><simpara> trace file to initialize to.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when initializiation was successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-initialized" role="function">libnd_trace_initialized ()</title>
<indexterm><primary>libnd_trace_initialized</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_initialized         (const <link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The predicate checks whether a trace has been initialized, i.e.
<link linkend="libnd-trace-init-header"><function>libnd_trace_init_header()</function></link> has been called on this trace and its
<link linkend="pcap-file-header"><type>pcap_file_header</type></link> is thus initialized.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to check
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when the trace has been initialized,
<link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-set-iterator-mode" role="function">libnd_trace_set_iterator_mode ()</title>
<indexterm><primary>libnd_trace_set_iterator_mode</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_set_iterator_mode   (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> mode);</programlisting>
<para>
The function sets the default packet iteration mode of <parameter>trace</parameter>
to <parameter>mode</parameter>. The default mode is <link linkend="LND-PACKET-IT-AREA-R:CAPS"><literal>LND_PACKET_IT_AREA_R</literal></link>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to update.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>mode</parameter>&nbsp;:</term>
<listitem><simpara> iterator mode to use.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-get-iterator-mode" role="function">libnd_trace_get_iterator_mode ()</title>
<indexterm><primary>libnd_trace_get_iterator_mode</primary></indexterm><programlisting><link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> libnd_trace_get_iterator_mode
                                            (const <link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to query.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the currently active iterator mode of <parameter>trace</parameter>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-set-area" role="function">libnd_trace_set_area ()</title>
<indexterm><primary>libnd_trace_set_area</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_set_area            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area);</programlisting>
<para>
The function makes the boundaries defined by <parameter>area</parameter> the new current
trace area of <parameter>trace</parameter>. The memory pointed to by <parameter>area</parameter> is not used
after the function returns -- all values are copied over. It's
therefore safe to pass a pointer to an instance sitting on the
local stack.
</para>
<para>
Using a packet iterator on <parameter>area</parameter>, in
<link linkend="LND-PACKET-IT-AREA-R:CAPS"><literal>LND_PACKET_IT_AREA_R</literal></link> or <link linkend="LND-PACKET-IT-AREA-RW:CAPS"><literal>LND_PACKET_IT_AREA_RW</literal></link> modes will then
iterate over the packets within that region. If <parameter>area</parameter> is a
timeframe and that timeframe falls outside the timeframe covered
by the packets of <parameter>trace</parameter>, the boundaries for <parameter>trace</parameter>'s new active
area are adjusted to fall within the existing range.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to set active area for
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>area</parameter>&nbsp;:</term>
<listitem><simpara> <parameter>trace</parameter>'s new active area.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-get-area" role="function">libnd_trace_get_area ()</title>
<indexterm><primary>libnd_trace_get_area</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_get_area            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area);</programlisting>
<para>
The function reports <parameter>trace</parameter>'s current trace area in the area
structure pointed to by <parameter>area</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to obtain area from.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>area</parameter>&nbsp;:</term>
<listitem><simpara> resulting area.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-get-name" role="function">libnd_trace_get_name ()</title>
<indexterm><primary>libnd_trace_get_name</primary></indexterm><programlisting>const <link linkend="char">char</link>* libnd_trace_get_name            (const <link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
If the trace contains packets from a tracefile, its filename is
returned. Otherwise, a dummy name is generated and returned.
In both cases, pointers to local data are returned and should
be strdupped if you want to keep them around.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to query
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> trace name.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-get-packets" role="function">libnd_trace_get_packets ()</title>
<indexterm><primary>libnd_trace_get_packets</primary></indexterm><programlisting><link linkend="LND-Packet">LND_Packet</link>* libnd_trace_get_packets         (const <link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
For each loaded trace, Netdude only stores a certain number of
packets in memory at any one time. Use this function to get to
the beginning of the current list of packets.
This function returns it.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to look up packets in.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> first  or NULL if n/a.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-save" role="function">libnd_trace_save ()</title>
<indexterm><primary>libnd_trace_save</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_save                (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The trace is saved to disk. If it doesn't have a name yet,
libnd_trace_save_as_dialog is called. If saving was successful,
<link linkend="TRUE:CAPS"><literal>TRUE</literal></link> is returned, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to save.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> success status.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-save-as" role="function">libnd_trace_save_as ()</title>
<indexterm><primary>libnd_trace_save_as</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_save_as             (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             const <link linkend="char">char</link> *filename);</programlisting>
<para>
The name of the trace is changed and the trace saved subsequentially.
If saving was successful, <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> is returned, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to save.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> new name of the trace.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> success status.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-delete-hidden-packets" role="function">libnd_trace_delete_hidden_packets ()</title>
<indexterm><primary>libnd_trace_delete_hidden_packets</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_delete_hidden_packets
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The function iterates over all packets of the trace in the current
iteration mode (ie selection only, all local, or entire trace) and
drops every hidden packet. See <link linkend="libnd-packet-hide"><function>libnd_packet_hide()</function></link> and the filter API.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to delete packets from.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-set-dirty" role="function">libnd_trace_set_dirty ()</title>
<indexterm><primary>libnd_trace_set_dirty</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_set_dirty           (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="gboolean">gboolean</link> dirty);</programlisting>
<para>
This function sets the dirty state of <parameter>trace</parameter> and updates the
GUI accordingly. If the trace is marked dirty, you cannot close
it without confirmation.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to update.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>dirty</parameter>&nbsp;:</term>
<listitem><simpara> whether we're dirty or not.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-add-filter" role="function">libnd_trace_add_filter ()</title>
<indexterm><primary>libnd_trace_add_filter</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_add_filter          (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);</programlisting>
<para>
The function adds <parameter>filter</parameter> to <parameter>trace</parameter>. The filter is hooked into a list
that stores the filters that should be applied to this trace -- the
filter is not duplicated. Also, no checks are made whether the filter
already is added.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to add filter to.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>filter</parameter>&nbsp;:</term>
<listitem><simpara> filter added.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-remove-filter" role="function">libnd_trace_remove_filter ()</title>
<indexterm><primary>libnd_trace_remove_filter</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_remove_filter       (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);</programlisting>
<para>
The function removes <parameter>filter</parameter> from the list of filters registered for
<parameter>trace</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to remove filter from.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>filter</parameter>&nbsp;:</term>
<listitem><simpara> filter removed.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-clear-filters" role="function">libnd_trace_clear_filters ()</title>
<indexterm><primary>libnd_trace_clear_filters</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_clear_filters       (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The function removes all filters from <parameter>trace</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to remove filters from.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-has-filter" role="function">libnd_trace_has_filter ()</title>
<indexterm><primary>libnd_trace_has_filter</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_has_filter          (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-Filter">LND_Filter</link> *filter);</programlisting>
<para>
The function scans the filters registered for <parameter>trace</parameter> and sees whether
<parameter>filter</parameter> is among them. This is a pure pointer comparison, no semantic
equality check. However, there should be no need to duplicate instantiated
filters.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to query.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>filter</parameter>&nbsp;:</term>
<listitem><simpara> filter to check for.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when <parameter>trace</parameter> is using <parameter>filter</parameter>, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-apply-filters" role="function">libnd_trace_apply_filters ()</title>
<indexterm><primary>libnd_trace_apply_filters</primary></indexterm><programlisting><link linkend="guint64">guint64</link>     libnd_trace_apply_filters       (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The filter applies the filters set for <parameter>trace</parameter> using the filtering mode
currently specified for <parameter>trace</parameter>. The filters are applied to packets based
on the current packet iteration mode of <parameter>trace</parameter> (i.e., selection, part,
or entire trace).</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to filter.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the number of packets the filters were applied to.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-sync" role="function">libnd_trace_sync ()</title>
<indexterm><primary>libnd_trace_sync</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_trace_sync                (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The function saves the entire trace to the current output basename,
flattening out all currently existing trace parts. The result is
a "clean" version of the trace in that file.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to sync.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if all went well, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-observer-new" role="function">libnd_trace_observer_new ()</title>
<indexterm><primary>libnd_trace_observer_new</primary></indexterm><programlisting><link linkend="LND-TraceObserver">LND_TraceObserver</link>* libnd_trace_observer_new (void);</programlisting>
<para>
The function allocates a new, empty trace observer. You should
then fill in callbacks for the events you're interested in,
and register the thing using <link linkend="libnd-trace-add-observer"><function>libnd_trace_add_observer()</function></link>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new observer.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-observer-free" role="function">libnd_trace_observer_free ()</title>
<indexterm><primary>libnd_trace_observer_free</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_observer_free       (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);</programlisting>
<para>
The function releases all memory associated with <parameter>ob</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> observer to delete.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-add-observer" role="function">libnd_trace_add_observer ()</title>
<indexterm><primary>libnd_trace_add_observer</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_add_observer        (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);</programlisting>
<para>
The function registers the new observer for notifications about
future changes to traces.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> new observer to register.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-del-observer" role="function">libnd_trace_del_observer ()</title>
<indexterm><primary>libnd_trace_del_observer</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_del_observer        (<link linkend="LND-TraceObserver">LND_TraceObserver</link> *ob);</programlisting>
<para>
The function stops trace operations from being reported to
<parameter>ob</parameter>. It does not release <parameter>ob</parameter>'s memory, use <link linkend="libnd-trace-observer-free"><function>libnd_trace_observer_free()</function></link>
for that.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> observer to drop.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-tell-observers" role="function">libnd_trace_tell_observers ()</title>
<indexterm><primary>libnd_trace_tell_observers</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_tell_observers      (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);</programlisting>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>op</parameter>&nbsp;:</term>
<listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-block-packet-observer-op" role="function">libnd_trace_block_packet_observer_op ()</title>
<indexterm><primary>libnd_trace_block_packet_observer_op</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_block_packet_observer_op
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketObserverOp">LND_PacketObserverOp</link> op);</programlisting>
<para>
This function prevents packet modification events of type <parameter>op</parameter> from
being reported to registered observers.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to block event reporting for.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>op</parameter>&nbsp;:</term>
<listitem><simpara> operation to block from being reported.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-unblock-packet-observer-op" role="function">libnd_trace_unblock_packet_observer_op ()</title>
<indexterm><primary>libnd_trace_unblock_packet_observer_op</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_unblock_packet_observer_op
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketObserverOp">LND_PacketObserverOp</link> op);</programlisting>
<para>
This function allows packet modification events of type <parameter>op</parameter> to
be reported to registered observers.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace for which to allow event reporting.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>op</parameter>&nbsp;:</term>
<listitem><simpara> operation to allow being reported.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-block-trace-observer-op" role="function">libnd_trace_block_trace_observer_op ()</title>
<indexterm><primary>libnd_trace_block_trace_observer_op</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_block_trace_observer_op
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);</programlisting>
<para>
This function prevents trace modification events of type <parameter>op</parameter> from
being reported to registered observers.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to block event reporting for.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>op</parameter>&nbsp;:</term>
<listitem><simpara> operation to block from being reported.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-unblock-trace-observer-op" role="function">libnd_trace_unblock_trace_observer_op ()</title>
<indexterm><primary>libnd_trace_unblock_trace_observer_op</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_unblock_trace_observer_op
                                            (<link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-TraceObserverOp">LND_TraceObserverOp</link> op);</programlisting>
<para>
This function allows trace modification events of type <parameter>op</parameter> to
be reported to registered observers.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace for which to allow event reporting.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>op</parameter>&nbsp;:</term>
<listitem><simpara> operation to allow being reported.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-area-init-time" role="function">libnd_trace_area_init_time ()</title>
<indexterm><primary>libnd_trace_area_init_time</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_area_init_time      (<link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv_start,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv_end);</programlisting>
<para>
The function initializes the trace area pointed to by <parameter>area</parameter> to the
timeframe bounded by <parameter>tv_start</parameter> and <parameter>tv_end</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>area</parameter>&nbsp;:</term>
<listitem><simpara> area to initialize.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tv_start</parameter>&nbsp;:</term>
<listitem><simpara> start time
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tv_end</parameter>&nbsp;:</term>
<listitem><simpara> end time
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-trace-area-init-space" role="function">libnd_trace_area_init_space ()</title>
<indexterm><primary>libnd_trace_area_init_space</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_trace_area_init_space     (<link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             <link linkend="double">double</link> start,
                                             <link linkend="double">double</link> end);</programlisting>
<para>
The function initializes the trace area pointed to by <parameter>area</parameter> to the
region of packets between the <parameter>start</parameter> and <parameter>end</parameter> fractions of the trace.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>area</parameter>&nbsp;:</term>
<listitem><simpara> area to initialize.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>start</parameter>&nbsp;:</term>
<listitem><simpara> start point
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>end</parameter>&nbsp;:</term>
<listitem><simpara> end point
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
