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

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

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

<synopsis>



#define     <link linkend="LND-PROTO-MAGICS:CAPS">LND_PROTO_MAGICS</link>
enum        <link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link>;
<link linkend="LND-Protocol">LND_Protocol</link>* <link linkend="libnd-proto-new">libnd_proto_new</link>               (const <link linkend="char">char</link> *name,
                                             <link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer,
                                             <link linkend="guint32">guint32</link> magic);
<link linkend="void">void</link>        <link linkend="libnd-proto-free">libnd_proto_free</link>                (<link linkend="LND-Protocol">LND_Protocol</link> *proto);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-proto-is-raw">libnd_proto_is_raw</link>              (<link linkend="LND-Protocol">LND_Protocol</link> *proto);
const <link linkend="char">char</link>* <link linkend="libnd-proto-layer-to-string">libnd_proto_layer_to_string</link>     (<link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer);
</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-PROTO-MAGICS:CAPS" role="macro">LND_PROTO_MAGICS</title>
<indexterm><primary>LND_PROTO_MAGICS</primary></indexterm><programlisting>#define LND_PROTO_MAGICS 3
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="LND-ProtocolLayer" role="enum">enum LND_ProtocolLayer</title>
<indexterm><primary>LND_ProtocolLayer</primary></indexterm><programlisting>typedef enum {
  LND_PROTO_LAYER_LINK  = (1 &lt;&lt; 0),
  LND_PROTO_LAYER_NET   = (1 &lt;&lt; 1),
  LND_PROTO_LAYER_TRANS = (1 &lt;&lt; 2),
  LND_PROTO_LAYER_APP   = (1 &lt;&lt; 3)
} LND_ProtocolLayer;
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="libnd-proto-new" role="function">libnd_proto_new ()</title>
<indexterm><primary>libnd_proto_new</primary></indexterm><programlisting><link linkend="LND-Protocol">LND_Protocol</link>* libnd_proto_new               (const <link linkend="char">char</link> *name,
                                             <link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer,
                                             <link linkend="guint32">guint32</link> magic);</programlisting>
<para>
The function creates a new protocol with dummy operations hooked
into the function pointers. Commonly used magic values are the
DLT_xxx constants from bpf.h for the linklevel, ETHERTYPE_xxx for
the network layer, IPPROTO_xxx for the transport layer, and ports
as given in /etc/services for the application layer.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
<listitem><simpara> name of the protocol.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>layer</parameter>&nbsp;:</term>
<listitem><simpara> layer in the network stack that the new protocol lives at.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>magic</parameter>&nbsp;:</term>
<listitem><simpara> the magic value by which the protocol is commonly identified by the layer below.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new protocol, or <link linkend="NULL:CAPS"><literal>NULL</literal></link> on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-free" role="function">libnd_proto_free ()</title>
<indexterm><primary>libnd_proto_free</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_proto_free                (<link linkend="LND-Protocol">LND_Protocol</link> *proto);</programlisting>
<para>
The function releases all memory associated with a protocol.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>proto</parameter>&nbsp;:</term>
<listitem><simpara> protocol to free.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-is-raw" role="function">libnd_proto_is_raw ()</title>
<indexterm><primary>libnd_proto_is_raw</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_proto_is_raw              (<link linkend="LND-Protocol">LND_Protocol</link> *proto);</programlisting>
<para>
Use this function to determine whether a protocol is the
built-in raw data protocol.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>proto</parameter>&nbsp;:</term>
<listitem><simpara> protocol to test.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if <parameter>proto</parameter> is the raw protocol, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-layer-to-string" role="function">libnd_proto_layer_to_string ()</title>
<indexterm><primary>libnd_proto_layer_to_string</primary></indexterm><programlisting>const <link linkend="char">char</link>* libnd_proto_layer_to_string     (<link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer);</programlisting>
<para>
Mainly for debugging purposes, this function returns a statically
allocated string for the protocol layer identifier given in <parameter>layer</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>layer</parameter>&nbsp;:</term>
<listitem><simpara> layer identifier.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>


</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
