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

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

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

<synopsis>



enum        <link linkend="LND-TPM-NavMode">LND_TPM_NavMode</link>;
<link linkend="LND-TPM:CAPS">LND_TPM</link>*    <link linkend="libnd-tpm-new">libnd_tpm_new</link>                   (<link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="void">void</link>        <link linkend="libnd-tpm-free">libnd_tpm_free</link>                  (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-read-packet">libnd_tpm_read_packet</link>           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-Packet">LND_Packet</link> *packet);
<link linkend="void">void</link>        <link linkend="libnd-tpm-load-packets">libnd_tpm_load_packets</link>          (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="void">void</link>        <link linkend="libnd-tpm-load-prev-part">libnd_tpm_load_prev_part</link>        (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="void">void</link>        <link linkend="libnd-tpm-load-next-part">libnd_tpm_load_next_part</link>        (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="void">void</link>        <link linkend="libnd-tpm-set-output-file">libnd_tpm_set_output_file</link>       (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="char">char</link> *filename);
<link linkend="guint">guint</link>       <link linkend="libnd-tpm-num-memory-packets">libnd_tpm_num_memory_packets</link>    ();
<link linkend="void">void</link>        <link linkend="libnd-tpm-clear-current-part">libnd_tpm_clear_current_part</link>    (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="gboolean">gboolean</link> emit_signal);
<link linkend="void">void</link>        <link linkend="libnd-tpm-add-part">libnd_tpm_add_part</link>              (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TracePart">LND_TracePart</link> *tp);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-remove-part">libnd_tpm_remove_part</link>           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TracePart">LND_TracePart</link> *tp);
<link linkend="pcapnav-result-t">pcapnav_result_t</link> <link linkend="libnd-tpm-goto-ts">libnd_tpm_goto_ts</link>          (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *timestamp);
<link linkend="pcapnav-result-t">pcapnav_result_t</link> <link linkend="libnd-tpm-goto-fraction">libnd_tpm_goto_fraction</link>    (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="double">double</link> fraction);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-goto-loc">libnd_tpm_goto_loc</link>              (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-is-tp-overlap">libnd_tpm_is_tp_overlap</link>         (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="LND-TracePart">LND_TracePart</link> *tp1,
                                             const <link linkend="LND-TracePart">LND_TracePart</link> *tp2);
<link linkend="off-t">off_t</link>       <link linkend="libnd-tpm-map-loc-to-offset">libnd_tpm_map_loc_to_offset</link>     (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);
<link linkend="pcapnav-result-t">pcapnav_result_t</link> <link linkend="libnd-tpm-map-offset-to-loc">libnd_tpm_map_offset_to_loc</link>
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="off-t">off_t</link> offset,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-map-loc-to-timestamp">libnd_tpm_map_loc_to_timestamp</link>  (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);
<link linkend="pcapnav-result-t">pcapnav_result_t</link> <link linkend="libnd-tpm-map-fraction-to-loc">libnd_tpm_map_fraction_to_loc</link>
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="double">double</link> fraction,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);
<link linkend="pcapnav-result-t">pcapnav_result_t</link> <link linkend="libnd-tpm-map-timestamp-to-loc">libnd_tpm_map_timestamp_to_loc</link>
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *timestamp,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);
<link linkend="off-t">off_t</link>       <link linkend="libnd-tpm-get-offset">libnd_tpm_get_offset</link>            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-tpm-find-locs">libnd_tpm_find_locs</link>             (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *start,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *end);
<link linkend="double">double</link>      <link linkend="libnd-tpm-get-space-fraction">libnd_tpm_get_space_fraction</link>    (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="off-t">off_t</link> offset);
<link linkend="double">double</link>      <link linkend="libnd-tpm-get-time-fraction">libnd_tpm_get_time_fraction</link>     (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);
<link linkend="double">double</link>      <link linkend="libnd-tpm-get-rel-size">libnd_tpm_get_rel_size</link>          (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="LND-Packet">LND_Packet</link>* <link linkend="libnd-tpm-get-packets">libnd_tpm_get_packets</link>           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="LND-Packet">LND_Packet</link>* <link linkend="libnd-tpm-get-sel">libnd_tpm_get_sel</link>               (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
<link linkend="void">void</link>        <link linkend="libnd-tpm-pcap-read-handler">libnd_tpm_pcap_read_handler</link>     (<link linkend="u-char">u_char</link> *data,
                                             const struct <link linkend="pcap-pkthdr">pcap_pkthdr</link> *h,
                                             const <link linkend="u-char">u_char</link> *pdata);
<link linkend="void">void</link>        <link linkend="libnd-tpm-dump-parts">libnd_tpm_dump_parts</link>            (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);
</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-TPM-NavMode" role="enum">enum LND_TPM_NavMode</title>
<indexterm><primary>LND_TPM_NavMode</primary></indexterm><programlisting>typedef enum {
  LND_TPM_SPACE,
  LND_TPM_TIME,
  LND_TPM_ERROR
} LND_TPM_NavMode;
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-new" role="function">libnd_tpm_new ()</title>
<indexterm><primary>libnd_tpm_new</primary></indexterm><programlisting><link linkend="LND-TPM:CAPS">LND_TPM</link>*    libnd_tpm_new                   (<link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
The function allocates a new trace part manager, sets up basic
stuff and returns it. It does not load any packets yet.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace to manage.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new manager.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-free" role="function">libnd_tpm_free ()</title>
<indexterm><primary>libnd_tpm_free</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_free                  (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
The function shuts down <parameter>tpm</parameter> properly and releases
any memory occupied. It also takes care of freeing
all related trace parts, removing temporary files etc.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager to free.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-read-packet" role="function">libnd_tpm_read_packet ()</title>
<indexterm><primary>libnd_tpm_read_packet</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_read_packet           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-Packet">LND_Packet</link> *packet);</programlisting>
<para>
The function tries to read a single packet from the current location
in the trace. The resulting packet data is read into <parameter>packet</parameter>. NOTE:
Upon return, <parameter>packet</parameter> is not initialized, and its raw packet data
points to volatile storage. If you want to keep the packet around
after further calls to this function, you need to <link linkend="libnd-packet-duplicate"><function>libnd_packet_duplicate()</function></link>
the packet!</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>packet</parameter>&nbsp;:</term>
<listitem><simpara> result pointer.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-load-packets" role="function">libnd_tpm_load_packets ()</title>
<indexterm><primary>libnd_tpm_load_packets</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_load_packets          (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
This function loads as many packets into memory as configured
by the user, and fires an LND_TRACE_RELOAD event after the
packets have been loaded.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-load-prev-part" role="function">libnd_tpm_load_prev_part ()</title>
<indexterm><primary>libnd_tpm_load_prev_part</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_load_prev_part        (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
The function is function loads as many packets into memory as the user
has configured, so that the last packet is located before the first
one of the current trace part. After the packets are loaded, an
LND_TRACE_RELOAD event is fired.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-load-next-part" role="function">libnd_tpm_load_next_part ()</title>
<indexterm><primary>libnd_tpm_load_next_part</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_load_next_part        (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>

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


</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-set-output-file" role="function">libnd_tpm_set_output_file ()</title>
<indexterm><primary>libnd_tpm_set_output_file</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_set_output_file       (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="char">char</link> *filename);</programlisting>
<para>
The function sets <parameter>filename</parameter> as the new base file name to write to.
Handle with care, you shouldn't really need this function. It's used
e.g. when a trace is saved to cause the packets to be written to the
original filename.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>filename</parameter>&nbsp;:</term>
<listitem><simpara> new base file name.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-num-memory-packets" role="function">libnd_tpm_num_memory_packets ()</title>
<indexterm><primary>libnd_tpm_num_memory_packets</primary></indexterm><programlisting><link linkend="guint">guint</link>       libnd_tpm_num_memory_packets    ();</programlisting>
<para>
This is a helper function returning the maximum number of
packets to keep in memory at any one point, as configured
by the user.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> maximum number of packets to be kept in memory at any time.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-clear-current-part" role="function">libnd_tpm_clear_current_part ()</title>
<indexterm><primary>libnd_tpm_clear_current_part</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_clear_current_part    (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="gboolean">gboolean</link> emit_signal);</programlisting>
<para>
The function releases <parameter>tpm</parameter>'s current trace part. If the part got modified,
it is added to the layers of trace parts on top of the base file, otherwise
it is simply freed. Depending on <parameter>emit_signal</parameter>, a <link linkend="LND-TRACE-CLEAR:CAPS"><literal>LND_TRACE_CLEAR</literal></link> signal
is delivered to registered trace observers or not.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager whose current trace part to clear.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>emit_signal</parameter>&nbsp;:</term>
<listitem><simpara> whether to emit a <link linkend="LND-TRACE-CLEAR:CAPS"><literal>LND_TRACE_CLEAR</literal></link> signal or not.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-add-part" role="function">libnd_tpm_add_part ()</title>
<indexterm><primary>libnd_tpm_add_part</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_add_part              (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TracePart">LND_TracePart</link> *tp);</programlisting>
<para>
The function adds <parameter>tp</parameter> to <parameter>tpm</parameter>'s trace parts.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tp</parameter>&nbsp;:</term>
<listitem><simpara> trace part to add.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-remove-part" role="function">libnd_tpm_remove_part ()</title>
<indexterm><primary>libnd_tpm_remove_part</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_remove_part           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TracePart">LND_TracePart</link> *tp);</programlisting>
<para>
The function removes <parameter>tp</parameter> from <parameter>tpm</parameter>'s trace parts. This only
works when <parameter>tp</parameter> is a plateau, that is, when there are no other
parts stacked on top of it.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tp</parameter>&nbsp;:</term>
<listitem><simpara> trace part to remove.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if operation was successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-goto-ts" role="function">libnd_tpm_goto_ts ()</title>
<indexterm><primary>libnd_tpm_goto_ts</primary></indexterm><programlisting><link linkend="pcapnav-result-t">pcapnav_result_t</link> libnd_tpm_goto_ts          (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *timestamp);</programlisting>
<para>
The function jumps to the packet whose timestamp has a timestamp closest to
<parameter>timestamp</parameter>. If the current trace part was previously modified, it is swapped
out to disk first. If the jump succeeded, an LND_TRACE_JUMPED event is
fired.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>timestamp</parameter>&nbsp;:</term>
<listitem><simpara> timestamp to jump to.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> result of jump, <link linkend="PCAPNAV-DEFINITELY:CAPS"><literal>PCAPNAV_DEFINITELY</literal></link> if it was successful. See
pcapnav.h for the other possible outcomes.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-goto-fraction" role="function">libnd_tpm_goto_fraction ()</title>
<indexterm><primary>libnd_tpm_goto_fraction</primary></indexterm><programlisting><link linkend="pcapnav-result-t">pcapnav_result_t</link> libnd_tpm_goto_fraction    (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="double">double</link> fraction);</programlisting>
<para>
The function jumps to the packet closest to the given size fraction of the
full trace. If the current trace part was previously modified, it is swapped
out to disk first. If the jump succeeded, an LND_TRACE_JUMPED event is
fired.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>fraction</parameter>&nbsp;:</term>
<listitem><simpara> fraction to jump to.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> result of jump, <link linkend="PCAPNAV-DEFINITELY:CAPS"><literal>PCAPNAV_DEFINITELY</literal></link> if it was successful. See
pcapnav.h for the other possible outcomes.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-goto-loc" role="function">libnd_tpm_goto_loc ()</title>
<indexterm><primary>libnd_tpm_goto_loc</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_goto_loc              (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);</programlisting>
<para>
The function jumps to the location given by <parameter>loc</parameter>. You can calculate a
location in three ways: using <link linkend="libnd-tpm-find-offset"><function>libnd_tpm_find_offset()</function></link>,
<link linkend="libnd-tpm-find-fraction"><function>libnd_tpm_find_fraction()</function></link> and <link linkend="libnd-tpm-find-timestamp"><function>libnd_tpm_find_timestamp()</function></link>.
If the jump succeeded, an LND_TRACE_JUMPED event is fired.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> location to jump to.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if jump was successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-is-tp-overlap" role="function">libnd_tpm_is_tp_overlap ()</title>
<indexterm><primary>libnd_tpm_is_tp_overlap</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_is_tp_overlap         (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="LND-TracePart">LND_TracePart</link> *tp1,
                                             const <link linkend="LND-TracePart">LND_TracePart</link> *tp2);</programlisting>
<para>
The function tests two trace parts for overlap.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tp1</parameter>&nbsp;:</term>
<listitem><simpara> first trace part.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tp2</parameter>&nbsp;:</term>
<listitem><simpara> second trace part.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if <parameter>tp1</parameter> and <parameter>tp2</parameter> overlap, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-map-loc-to-offset" role="function">libnd_tpm_map_loc_to_offset ()</title>
<indexterm><primary>libnd_tpm_map_loc_to_offset</primary></indexterm><programlisting><link linkend="off-t">off_t</link>       libnd_tpm_map_loc_to_offset     (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);</programlisting>
<para>
The function takes a trace location as input an calculates the
global offset in <parameter>tpm</parameter>'s trace that corresponds to this location.
Opposite to <link linkend="libnd-tpm-map-offset-to-loc"><function>libnd_tpm_map_offset_to_loc()</function></link>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> trace location.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> calculated offset.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-map-offset-to-loc" role="function">libnd_tpm_map_offset_to_loc ()</title>
<indexterm><primary>libnd_tpm_map_offset_to_loc</primary></indexterm><programlisting><link linkend="pcapnav-result-t">pcapnav_result_t</link> libnd_tpm_map_offset_to_loc
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="off-t">off_t</link> offset,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);</programlisting>
<para>
The function takes <parameter>offset</parameter> as input and calculates the trace location
for the packet closest to <parameter>offset</parameter> in <parameter>tpm</parameter>'s current trace part
arrangement. Opposite of <link linkend="libnd-tpm-map-location-to-offset"><function>libnd_tpm_map_location_to_offset()</function></link>.
The resulting location is reported in <parameter>loc</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>offset</parameter>&nbsp;:</term>
<listitem><simpara> offset to calculate with.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> result pointer.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> success state of operation.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-map-loc-to-timestamp" role="function">libnd_tpm_map_loc_to_timestamp ()</title>
<indexterm><primary>libnd_tpm_map_loc_to_timestamp</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_map_loc_to_timestamp  (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);</programlisting>
<para>
The function takes trace location <parameter>loc</parameter> as input and looks up the timestamp
of the packet that is closest to this location in <parameter>tpm</parameter>'s current trace
part scenario.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> trace location to find timestamp of.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tv</parameter>&nbsp;:</term>
<listitem><simpara> result pointer for calculated timestamp.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> of the calculation was successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-map-fraction-to-loc" role="function">libnd_tpm_map_fraction_to_loc ()</title>
<indexterm><primary>libnd_tpm_map_fraction_to_loc</primary></indexterm><programlisting><link linkend="pcapnav-result-t">pcapnav_result_t</link> libnd_tpm_map_fraction_to_loc
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="double">double</link> fraction,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);</programlisting>
<para>
This function calculates the location (i.e., trace part and offset
within that trace part) of a fractional offset in the trace (for example,
0.5 is the middle of the trace). The resulting trace location is reported
in <parameter>loc</parameter> upon return.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager of trace.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>fraction</parameter>&nbsp;:</term>
<listitem><simpara> fraction to calculate.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> result pointer, receives calculated location.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the success status of the operation. This is a pcapnav
result type as the function relies on pcapnav to perform this operation.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-map-timestamp-to-loc" role="function">libnd_tpm_map_timestamp_to_loc ()</title>
<indexterm><primary>libnd_tpm_map_timestamp_to_loc</primary></indexterm><programlisting><link linkend="pcapnav-result-t">pcapnav_result_t</link> libnd_tpm_map_timestamp_to_loc
                                            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             struct <link linkend="bpf-timeval">bpf_timeval</link> *timestamp,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *loc);</programlisting>
<para>
This function calculates the location (i.e., trace part and offset
within that trace part) of the packet with a timestamp closest to <parameter>timestamp</parameter>.
The resulting trace location is reported in <parameter>loc</parameter> upon return.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager of trace.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>timestamp</parameter>&nbsp;:</term>
<listitem><simpara> timestamp to calculate.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>loc</parameter>&nbsp;:</term>
<listitem><simpara> result pointer, receives calculated location.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the success status of the operation. This is a pcapnav
result type as the function relies on pcapnav to perform this operation.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-offset" role="function">libnd_tpm_get_offset ()</title>
<indexterm><primary>libnd_tpm_get_offset</primary></indexterm><programlisting><link linkend="off-t">off_t</link>       libnd_tpm_get_offset            (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the absolute offset in bytes from the start of the
trace file, in the current trace parts configuration. Does
not include the size of the trace file header.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-find-locs" role="function">libnd_tpm_find_locs ()</title>
<indexterm><primary>libnd_tpm_find_locs</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_tpm_find_locs             (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="LND-TraceArea">LND_TraceArea</link> *area,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *start,
                                             <link linkend="LND-TraceLoc">LND_TraceLoc</link> *end);</programlisting>
<para>
The function takes the trace area pointed to by <parameter>area</parameter> as
input and calculates the start and end trace locations that
the boundaries of this area correspond to in <parameter>tpm</parameter>'s current
trace part arrangement. The results are returned through
<parameter>start</parameter> and <parameter>end</parameter>, respectively.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>area</parameter>&nbsp;:</term>
<listitem><simpara> trace area to calculate locations of.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>start</parameter>&nbsp;:</term>
<listitem><simpara> result pointer for start location.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>end</parameter>&nbsp;:</term>
<listitem><simpara> result pointer for end location.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> of the calculation was successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-space-fraction" role="function">libnd_tpm_get_space_fraction ()</title>
<indexterm><primary>libnd_tpm_get_space_fraction</primary></indexterm><programlisting><link linkend="double">double</link>      libnd_tpm_get_space_fraction    (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             <link linkend="off-t">off_t</link> offset);</programlisting>
<para>
The function returns the fraction in the trace where <parameter>offset</parameter> is located.
0.5 means that we're currently in the middle of the file, 1.0 that we're at the end.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>offset</parameter>&nbsp;:</term>
<listitem><simpara> offset to calculate with.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> fraction in space.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-time-fraction" role="function">libnd_tpm_get_time_fraction ()</title>
<indexterm><primary>libnd_tpm_get_time_fraction</primary></indexterm><programlisting><link linkend="double">double</link>      libnd_tpm_get_time_fraction     (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm,
                                             const struct <link linkend="bpf-timeval">bpf_timeval</link> *tv);</programlisting>
<para>
The function returns the fraction in the trace where the packet with
timestamp <parameter>tv</parameter> is located. 0.5 means that we're currently at the point
in trace whose packets are in the middle between the start- and end
times of the full trace.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tv</parameter>&nbsp;:</term>
<listitem><simpara> timestamp to calculate with.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> fraction in time currently visited.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-rel-size" role="function">libnd_tpm_get_rel_size ()</title>
<indexterm><primary>libnd_tpm_get_rel_size</primary></indexterm><programlisting><link linkend="double">double</link>      libnd_tpm_get_rel_size          (const <link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
The function compares the size (in bytes) of the trace part that is currently loaded into memory
to the size of the entire trace, and returns that ration.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> size of trace part loaded / size of entire trace.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-packets" role="function">libnd_tpm_get_packets ()</title>
<indexterm><primary>libnd_tpm_get_packets</primary></indexterm><programlisting><link linkend="LND-Packet">LND_Packet</link>* libnd_tpm_get_packets           (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> first packet in list of currently loaded packets, if any. Otherwise
returned value is <link linkend="NULL:CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-get-sel" role="function">libnd_tpm_get_sel ()</title>
<indexterm><primary>libnd_tpm_get_sel</primary></indexterm><programlisting><link linkend="LND-Packet">LND_Packet</link>* libnd_tpm_get_sel               (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> first packet in list of selected packets in current trace part,
if any. Otherwise the returned value is <link linkend="NULL:CAPS"><literal>NULL</literal></link>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-pcap-read-handler" role="function">libnd_tpm_pcap_read_handler ()</title>
<indexterm><primary>libnd_tpm_pcap_read_handler</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_pcap_read_handler     (<link linkend="u-char">u_char</link> *data,
                                             const struct <link linkend="pcap-pkthdr">pcap_pkthdr</link> *h,
                                             const <link linkend="u-char">u_char</link> *pdata);</programlisting>
<para>
This is a pcap read handler that expects the data ptr to be an
LND_TracePart *. It adds the passed packet to this trace part.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
<listitem><simpara> an <link linkend="LND-TPM:CAPS"><type>LND_TPM</type></link> pointer.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>h</parameter>&nbsp;:</term>
<listitem><simpara> pointer to a pcap packet header
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>pdata</parameter>&nbsp;:</term>
<listitem><simpara> packet data
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-tpm-dump-parts" role="function">libnd_tpm_dump_parts ()</title>
<indexterm><primary>libnd_tpm_dump_parts</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_tpm_dump_parts            (<link linkend="LND-TPM:CAPS">LND_TPM</link> *tpm);</programlisting>
<para>
This debugging function prints a textual description of the
current trace part arrangement to the console.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>tpm</parameter>&nbsp;:</term>
<listitem><simpara> trace part manager whose trace parts to print.
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
