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

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

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

<synopsis>



<link linkend="void">void</link>        (<link linkend="LND-ProtocolFunc">*LND_ProtocolFunc</link>)             (<link linkend="LND-Protocol">LND_Protocol</link> *proto,
                                             <link linkend="void">void</link> *user_data);
<link linkend="void">void</link>        <link linkend="libnd-proto-registry-init">libnd_proto_registry_init</link>       (void);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-proto-registry-register">libnd_proto_registry_register</link>   (<link linkend="LND-Protocol">LND_Protocol</link> *proto);
<link linkend="void">void</link>        <link linkend="libnd-proto-registry-unregister">libnd_proto_registry_unregister</link> (<link linkend="LND-Protocol">LND_Protocol</link> *proto);
<link linkend="LND-Protocol">LND_Protocol</link>* <link linkend="libnd-proto-registry-find">libnd_proto_registry_find</link>     (<link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer,
                                             <link linkend="guint32">guint32</link> magic);
<link linkend="guint">guint</link>       <link linkend="libnd-proto-registry-size">libnd_proto_registry_size</link>       (void);
<link linkend="void">void</link>        <link linkend="libnd-proto-registry-foreach-proto">libnd_proto_registry_foreach_proto</link>
                                            (<link linkend="LND-ProtocolFunc">LND_ProtocolFunc</link> callback,
                                             <link linkend="void">void</link> *user_data);
</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-ProtocolFunc" role="function">LND_ProtocolFunc ()</title>
<indexterm><primary>LND_ProtocolFunc</primary></indexterm><programlisting><link linkend="void">void</link>        (*LND_ProtocolFunc)             (<link linkend="LND-Protocol">LND_Protocol</link> *proto,
                                             <link linkend="void">void</link> *user_data);</programlisting>
<para>
This is the signature of functions that can be passed to
<link linkend="libnd-proto-registry-foreach-proto"><function>libnd_proto_registry_foreach_proto()</function></link>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>proto</parameter>&nbsp;:</term>
<listitem><simpara> iterated protocol.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
<listitem><simpara> arbitrary user data.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-init" role="function">libnd_proto_registry_init ()</title>
<indexterm><primary>libnd_proto_registry_init</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_proto_registry_init       (void);</programlisting>
<para>
The function initializes the registry, sets up hashes etc.</para>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-register" role="function">libnd_proto_registry_register ()</title>
<indexterm><primary>libnd_proto_registry_register</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_proto_registry_register   (<link linkend="LND-Protocol">LND_Protocol</link> *proto);</programlisting>
<para>
The function registers a protocol in the  registry.
For normal protocol plugins, this gets called automatically when
the plugin is loaded and initialized, so you don't have to do this
manually.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>proto</parameter>&nbsp;:</term>
<listitem><simpara> protocol to register.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when protocol was registered, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> on error or
when the protocol is already found in the registry.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-unregister" role="function">libnd_proto_registry_unregister ()</title>
<indexterm><primary>libnd_proto_registry_unregister</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_proto_registry_unregister (<link linkend="LND-Protocol">LND_Protocol</link> *proto);</programlisting>
<para>
The given protcol is removed from the registry. The protocol is
not touched otherwise.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>proto</parameter>&nbsp;:</term>
<listitem><simpara> protocol to unregister.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-find" role="function">libnd_proto_registry_find ()</title>
<indexterm><primary>libnd_proto_registry_find</primary></indexterm><programlisting><link linkend="LND-Protocol">LND_Protocol</link>* libnd_proto_registry_find     (<link linkend="LND-ProtocolLayer">LND_ProtocolLayer</link> layer,
                                             <link linkend="guint32">guint32</link> magic);</programlisting>
<para>
The function looks up a protocol plugin for a given layer and magic.
If the protocol isn't found, the raw data display plugin is
returned, which you can discern by a protocol ID value of 1. The <parameter>magic</parameter>
is the usual magic for the protocol you're looking for that is used
at the layer below the protocol to identify it, e.g. one of the <link linkend="DLT-xxx"><literal>DLT_xxx</literal></link>
values for a link layer protocol, or one of the <link linkend="ETHERTYPE-xxx"><literal>ETHERTYPE_xxx</literal></link> values
for a network layer protocol.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>layer</parameter>&nbsp;:</term>
<listitem><simpara> layer where to look for protocol
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>magic</parameter>&nbsp;:</term>
<listitem><simpara> magic of protocol.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> retrieved protocol - either the one you were looking for, or
the raw data protocol otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-size" role="function">libnd_proto_registry_size ()</title>
<indexterm><primary>libnd_proto_registry_size</primary></indexterm><programlisting><link linkend="guint">guint</link>       libnd_proto_registry_size       (void);</programlisting>
<para>
The function returns the number of protocols in the registry.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> number of protocols.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-proto-registry-foreach-proto" role="function">libnd_proto_registry_foreach_proto ()</title>
<indexterm><primary>libnd_proto_registry_foreach_proto</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_proto_registry_foreach_proto
                                            (<link linkend="LND-ProtocolFunc">LND_ProtocolFunc</link> callback,
                                             <link linkend="void">void</link> *user_data);</programlisting>
<para>
The function iterates over the registered protocols and applies
a callback function to each of them.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>callback</parameter>&nbsp;:</term>
<listitem><simpara> callback to call for each protocol.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
<listitem><simpara> arbitrary user data passed through to <parameter>callback</parameter>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
