summaryrefslogtreecommitdiff
path: root/Documentation/linux_tv/media/dvb/net.rst
blob: c5c42e43d277a671659d3198539087283142db99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
.. -*- coding: utf-8; mode: rst -*-

.. _net:

###############
DVB Network API
###############
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.

Currently, two encapsulations are supported:

-  `Multi Protocol Encapsulation (MPE) <http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation>`__

-  `Ultra Lightweight Encapsulation (ULE) <http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation>`__

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
``/dev/dvb/adapter?/net?`` device node. The data will be available via
virtual ``dvb?_?`` network interfaces, and will be controlled/routed via
the standard ip tools (like ip, route, netstat, ifconfig, etc).

Data types and and ioctl definitions are defined via ``linux/dvb/net.h``
header.


.. _net_fcalls:

######################
DVB net Function Calls
######################

.. _NET_ADD_IF:

****************
ioctl NET_ADD_IF
****************

*man NET_ADD_IF(2)*

Creates a new network interface for a given Packet ID.


Synopsis
========

.. cpp:function:: int ioctl( int fd, int request, struct dvb_net_if *net_if )

Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <frontend_f_open>`.

``request``
    FE_SET_TONE

``net_if``
    pointer to struct :ref:`dvb_net_if <dvb-net-if>`


Description
===========

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.

The struct :ref:`dvb_net_if <dvb-net-if>`::ifnum field will be
filled with the number of the created interface.

RETURN VALUE

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.


.. _dvb-net-if-t:

struct dvb_net_if description
=============================


.. _dvb-net-if:

.. flat-table:: struct dvb_net_if
    :header-rows:  1
    :stub-columns: 0


    -  .. row 1

       -  ID

       -  Description

    -  .. row 2

       -  pid

       -  Packet ID (PID) of the MPEG-TS that contains data

    -  .. row 3

       -  ifnum

       -  number of the DVB interface.

    -  .. row 4

       -  feedtype

       -  Encapsulation type of the feed. It can be:
	  ``DVB_NET_FEEDTYPE_MPE`` for MPE encoding or
	  ``DVB_NET_FEEDTYPE_ULE`` for ULE encoding.



.. _NET_REMOVE_IF:

*******************
ioctl NET_REMOVE_IF
*******************

*man NET_REMOVE_IF(2)*

Removes a network interface.


Synopsis
========

.. cpp:function:: int ioctl( int fd, int request, int ifnum )

Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <frontend_f_open>`.

``request``
    FE_SET_TONE

``net_if``
    number of the interface to be removed


Description
===========

The NET_REMOVE_IF ioctl deletes an interface previously created via
:ref:`NET_ADD_IF <net>`.

RETURN VALUE

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.


.. _NET_GET_IF:

****************
ioctl NET_GET_IF
****************

*man NET_GET_IF(2)*

Read the configuration data of an interface created via
:ref:`NET_ADD_IF <net>`.


Synopsis
========

.. cpp:function:: int ioctl( int fd, int request, struct dvb_net_if *net_if )

Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <frontend_f_open>`.

``request``
    FE_SET_TONE

``net_if``
    pointer to struct :ref:`dvb_net_if <dvb-net-if>`


Description
===========

The NET_GET_IF ioctl uses the interface number given by the struct
:ref:`dvb_net_if <dvb-net-if>`::ifnum field and fills the content of
struct :ref:`dvb_net_if <dvb-net-if>` with the packet ID and
encapsulation type used on such interface. If the interface was not
created yet with :ref:`NET_ADD_IF <net>`, it will return -1 and fill
the ``errno`` with ``EINVAL`` error code.

RETURN VALUE

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.