| <title>DVB Network API</title> |
| <para>The DVB net device controls the mapping of data packages that are |
| part of a transport stream to be mapped into a virtual network interface, |
| visible through the standard Linux network protocol stack.</para> |
| <para>Currently, two encapsulations are supported:</para> |
| <itemizedlist> |
| <listitem><para><ulink url="http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation"> |
| Multi Protocol Encapsulation (MPE)</ulink></para></listitem> |
| <listitem><para><ulink url="http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation"> |
| Ultra Lightweight Encapsulation (ULE)</ulink></para></listitem> |
| </itemizedlist> |
| |
| <para>In order to create the Linux virtual network interfaces, an application |
| needs to tell to the Kernel what are the PIDs and the encapsulation types |
| that are present on the transport stream. This is done through |
| <constant>/dev/dvb/adapter?/net?</constant> device node. |
| The data will be available via virtual <constant>dvb?_?</constant> |
| network interfaces, and will be controlled/routed via the standard |
| ip tools (like ip, route, netstat, ifconfig, etc).</para> |
| <para> Data types and and ioctl definitions are defined via |
| <constant>linux/dvb/net.h</constant> header.</para> |
| |
| <section id="net_fcalls"> |
| <title>DVB net Function Calls</title> |
| |
| |
| <refentry id="NET_ADD_IF"> |
| <refmeta> |
| <refentrytitle>ioctl NET_ADD_IF</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>NET_ADD_IF</refname> |
| <refpurpose>Creates a new network interface for a given Packet ID.</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Arguments</title> |
| <variablelist> |
| <varlistentry> |
| <term><parameter>fd</parameter></term> |
| <listitem> |
| <para>&fe_fd;</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>request</parameter></term> |
| <listitem> |
| <para>FE_SET_TONE</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>net_if</parameter></term> |
| <listitem> |
| <para>pointer to &dvb-net-if;</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>The NET_ADD_IF ioctl system call selects the Packet ID (PID) that |
| contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE) |
| and the interface number for the new interface to be created. When the |
| system call successfully returns, a new virtual network interface is created.</para> |
| <para>The &dvb-net-if;::ifnum field will be filled with the number of the |
| created interface.</para> |
| |
| &return-value-dvb; |
| </refsect1> |
| |
| <refsect1 id="dvb-net-if-t"> |
| <title>struct <structname>dvb_net_if</structname> description</title> |
| |
| <table pgwide="1" frame="none" id="dvb-net-if"> |
| <title>struct <structname>dvb_net_if</structname></title> |
| <tgroup cols="2"> |
| &cs-def; |
| <thead> |
| <row> |
| <entry>ID</entry> |
| <entry>Description</entry> |
| </row> |
| </thead> |
| <tbody valign="top"> |
| <row> |
| <entry align="char">pid</entry> |
| <entry align="char">Packet ID (PID) of the MPEG-TS that contains |
| data</entry> |
| </row><row> |
| <entry align="char">ifnum</entry> |
| <entry align="char">number of the DVB interface.</entry> |
| </row><row> |
| <entry align="char">feedtype</entry> |
| <entry align="char">Encapsulation type of the feed. It can be: |
| <constant>DVB_NET_FEEDTYPE_MPE</constant> for MPE encoding |
| or |
| <constant>DVB_NET_FEEDTYPE_ULE</constant> for ULE encoding. |
| </entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| </refsect1> |
| </refentry> |
| |
| <refentry id="NET_REMOVE_IF"> |
| <refmeta> |
| <refentrytitle>ioctl NET_REMOVE_IF</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>NET_REMOVE_IF</refname> |
| <refpurpose>Removes a network interface.</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>int <parameter>ifnum</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Arguments</title> |
| <variablelist> |
| <varlistentry> |
| <term><parameter>fd</parameter></term> |
| <listitem> |
| <para>&fe_fd;</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>request</parameter></term> |
| <listitem> |
| <para>FE_SET_TONE</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>net_if</parameter></term> |
| <listitem> |
| <para>number of the interface to be removed</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>The NET_REMOVE_IF ioctl deletes an interface previously created |
| via &NET-ADD-IF;.</para> |
| |
| &return-value-dvb; |
| </refsect1> |
| </refentry> |
| |
| |
| <refentry id="NET_GET_IF"> |
| <refmeta> |
| <refentrytitle>ioctl NET_GET_IF</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>NET_GET_IF</refname> |
| <refpurpose>Read the configuration data of an interface created via |
| &NET-ADD-IF;.</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Arguments</title> |
| <variablelist> |
| <varlistentry> |
| <term><parameter>fd</parameter></term> |
| <listitem> |
| <para>&fe_fd;</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>request</parameter></term> |
| <listitem> |
| <para>FE_SET_TONE</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>net_if</parameter></term> |
| <listitem> |
| <para>pointer to &dvb-net-if;</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>The NET_GET_IF ioctl uses the interface number given by the |
| &dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with |
| the packet ID and encapsulation type used on such interface. If the |
| interface was not created yet with &NET-ADD-IF;, it will return -1 and |
| fill the <constant>errno</constant> with <constant>EINVAL</constant> |
| error code.</para> |
| |
| &return-value-dvb; |
| </refsect1> |
| </refentry> |
| </section> |