2 .\" Copyright (c) 2001-2003
3 .\" Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4 .\" All rights reserved.
6 .\" Author: Hartmut Brandt <harti@FreeBSD.org>
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\" notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\" notice, this list of conditions and the following disclaimer in the
15 .\" documentation and/or other materials provided with the distribution.
17 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 .Nd netgraph UNI node type
38 .In netnatm/msg/unistruct.h
39 .In netnatm/sig/unidef.h
40 .In netgraph/atm/ng_uni.h
44 netgraph node type implements ATM Forum signalling 4.0.
46 After creation of the node, the UNI instance must be created by sending
50 If the node is enabled, the UNI parameters
51 can be retrieved and modified, and the protocol can be started.
53 The node is shut down either by an
55 message, or when all hooks are disconnected.
59 node has three hooks with fixed names:
60 .Bl -tag -width ".Va upper"
62 This hook is the interface of the UNI protocol to the transport layer of
63 the ATM control plane.
64 The node expects the interface exported by
70 interface of the UNI protocol.
71 Because there is no standardized interface
72 at this point, this implementation follows more or less the interface
73 specified by the SDL diagrams in ITU-T recommendations Q.2931 and Q.2971.
76 or a switch CAC should be stacked at this interface.
77 The message format at the
79 hook is described below.
82 is functional, it makes sometimes sense to switch this hook to queueing mode
83 from the peer node upon connection.
90 node is loosely modelled after the interface specified in the ITU-T signalling
92 There is however one derivation from this: normally there exists
93 four kinds of signals: requests, responses, indications and confirmations.
94 These signals are usually triggered either by external events (receiving a
95 message) or internal events (a timer or another signal).
97 fine for user APIs that are entirely asynchronous, and in cases where
98 error handling is not taken into account.
99 With synchronous APIs and error
100 handling however, there is a problem.
101 If, for example, the application
102 issues a request to set up a connection,
103 it may do it by sending a
106 Normally, the UNI stack will send a SETUP message and
107 receive a message from the switch (a RELEASE, CONNECT, CALL PROCEEDING or
108 ALERTING), or a timer in the UNI stack will time out.
109 In any of these cases,
110 the UNI stack is supposed to report an event back to the application, and
111 the application will unblock (in the case of a synchronous API) and handle
113 The problem occurs when an error happens.
115 memory to send the SETUP message and to start the timer.
117 application will block forever because no received message and no timer
119 For this reason this implementation uses an additional message:
120 for each signal sent from the application to the stack, the stack will
121 respond with an error code.
122 If this code is zero, the stack has accepted
123 the signal and the application may block; if the code is non-zero, the signal
124 is effectively ignored and the code describes what was wrong.
126 makes it very easy to make a blocking interface out of the message based
131 interface uses the following structure:
141 field contains the actual signal that is sent from the user to UNI or from
145 can be used by the user to correlate requests with events and responses.
146 If an error response, a confirmation or an indication was triggered by
147 a request or response, the cookie from that request or response is carried in
148 the message from the stack to the user.
151 field is followed by the actual data for the signal.
153 The signal is one of the following:
156 UNIAPI_ERROR, /* UNI -> API */
158 UNIAPI_CALL_CREATED, /* UNI -> API */
159 UNIAPI_CALL_DESTROYED, /* UNI -> API */
160 UNIAPI_PARTY_CREATED, /* UNI -> API */
161 UNIAPI_PARTY_DESTROYED, /* UNI -> API */
163 UNIAPI_LINK_ESTABLISH_request, /* API -> UNI */
164 UNIAPI_LINK_ESTABLISH_confirm, /* UNI -> API */
165 UNIAPI_LINK_RELEASE_request, /* API -> UNI */
166 UNIAPI_LINK_RELEASE_confirm, /* UNI -> API */
168 UNIAPI_RESET_request, /* API -> UNI */
169 UNIAPI_RESET_confirm, /* UNI -> API */
170 UNIAPI_RESET_indication, /* UNI -> API */
171 UNIAPI_RESET_ERROR_indication, /* UNI -> API */
172 UNIAPI_RESET_response, /* API -> UNI */
173 UNIAPI_RESET_ERROR_response, /* API -> UNI */
174 UNIAPI_RESET_STATUS_indication, /* UNI -> API */
176 UNIAPI_SETUP_request, /* API -> UNI */
177 UNIAPI_SETUP_indication, /* UNI -> API */
178 UNIAPI_SETUP_response, /* API -> UNI */
179 UNIAPI_SETUP_confirm, /* UNI -> API */
180 UNIAPI_SETUP_COMPLETE_indication, /* UNI -> API */
181 UNIAPI_ALERTING_request, /* API -> UNI */
182 UNIAPI_ALERTING_indication, /* UNI -> API */
183 UNIAPI_PROCEEDING_request, /* API -> UNI */
184 UNIAPI_PROCEEDING_indication, /* UNI -> API */
185 UNIAPI_RELEASE_request, /* API -> UNI */
186 UNIAPI_RELEASE_indication, /* UNI -> API */
187 UNIAPI_RELEASE_response, /* API -> UNI */
188 UNIAPI_RELEASE_confirm, /* UNI -> API */
189 UNIAPI_NOTIFY_request, /* API -> UNI */
190 UNIAPI_NOTIFY_indication, /* UNI -> API */
191 UNIAPI_STATUS_indication, /* UNI -> API */
192 UNIAPI_STATUS_ENQUIRY_request, /* API -> UNI */
194 UNIAPI_ADD_PARTY_request, /* API -> UNI */
195 UNIAPI_ADD_PARTY_indication, /* UNI -> API */
196 UNIAPI_PARTY_ALERTING_request, /* API -> UNI */
197 UNIAPI_PARTY_ALERTING_indication, /* UNI -> API */
198 UNIAPI_ADD_PARTY_ACK_request, /* API -> UNI */
199 UNIAPI_ADD_PARTY_ACK_indication, /* UNI -> API */
200 UNIAPI_ADD_PARTY_REJ_request, /* API -> UNI */
201 UNIAPI_ADD_PARTY_REJ_indication, /* UNI -> API */
202 UNIAPI_DROP_PARTY_request, /* API -> UNI */
203 UNIAPI_DROP_PARTY_indication, /* UNI -> API */
204 UNIAPI_DROP_PARTY_ACK_request, /* API -> UNI */
205 UNIAPI_DROP_PARTY_ACK_indication, /* UNI -> API */
207 UNIAPI_ABORT_CALL_request, /* API -> UNI */
213 The meaning of most of the signals can be deduced from the ITU-T SDLs.
214 A number of signals, however, is unique to this implementation:
215 .Bl -tag -width indent
217 This is the error response, mentioned earlier.
218 It carries an error code or
219 zero, if the signal was accepted by the stack.
220 .It Dv UNIAPI_CALL_CREATED
221 The UNI stack has created a call instance either from an incoming SETUP or
222 from the user requesting an outgoing SETUP.
223 This may be used to synchronize
224 the creation and destroying of call data between the UNI stack and the user.
225 .It Dv UNIAPI_CALL_DESTROYED
226 A call instance has been destroyed and all resources have been freed.
227 .It Dv UNIAPI_PARTY_CREATED
228 A new party has been created for an existing point-to-multipoint call.
229 This may be used to synchronize the creation and destroying of party data
230 between the UNI stack and the user.
231 .It Dv UNIAPI_PARTY_DESTROYED
232 A party has been destroyed and all resources have been freed.
233 .It Dv UNIAPI_ABORT_CALL_request
234 This requests the stack to destroy the call instance
235 and free all its resources,
236 without sending any messages to the network.
238 This is not a signal, but rather a definition to get the number of defined
242 Each of the signals is followed by a fixed size structure defined in
243 .In netnatm/sig/unidef.h .
247 node understands the standard control messages, plus the following:
248 .Bl -tag -width indent
249 .It Dv NGM_UNI_SETDEBUG
250 Set debugging facility levels.
251 The UNI stack defines a number of debugging
252 facilities, each one associated with a debugging level.
253 If the debugging level
254 of a facility is non-zero, text output will be generated to the console.
255 The message uses the following structure:
257 struct ngm_uni_debug {
258 uint32_t level[UNI_MAXFACILITY];
261 .It Dv NGM_UNI_SETDEBUG
262 Get debugging facility levels.
266 .It Dv NGM_UNI_GET_CONFIG
267 Retrieve the current configuration of the UNI instance.
268 This message returns a
273 uint32_t proto; /* which protocol */
274 uint32_t popt; /* protocol option */
275 uint32_t option; /* other options */
276 uint32_t timer301; /* T301 */
277 uint32_t timer303; /* T303 */
278 uint32_t init303; /* T303 retransmission count */
279 uint32_t timer308; /* T308 */
280 uint32_t init308; /* T308 retransmission count */
281 uint32_t timer309; /* T309 */
282 uint32_t timer310; /* T310 */
283 uint32_t timer313; /* T313 */
284 uint32_t timer316; /* T316 */
285 uint32_t init316; /* T316 retransmission count */
286 uint32_t timer317; /* T317 */
287 uint32_t timer322; /* T322 */
288 uint32_t init322; /* T322 retransmission count */
289 uint32_t timer397; /* T397 */
290 uint32_t timer398; /* T398 */
291 uint32_t timer399; /* T399 */
297 specifies one of the following protocols:
300 UNIPROTO_UNI40U, /* UNI4.0 user side */
301 UNIPROTO_UNI40N, /* UNI4.0 network side */
302 UNIPROTO_PNNI10, /* PNNI1.0 */
306 Some protocols may have options which can be set in
310 UNIPROTO_GFP, /* enable GFP */
316 field controls parsing and checking of messages:
319 UNIOPT_GIT_HARD, /* harder check of GIT IE */
320 UNIOPT_BEARER_HARD, /* harder check of BEARER IE */
321 UNIOPT_CAUSE_HARD, /* harder check of CAUSE IE */
325 All timer values are given in milliseconds.
326 Note, however, that the actual
327 resolution of the timers depend on system configuration (see
329 .It Dv NGM_UNI_SET_CONFIG
330 Change the UNI configuration.
333 struct ngm_uni_set_config {
334 struct uni_config config;
335 struct ngm_uni_config_mask mask;
337 struct ngm_uni_config_mask {
340 uint32_t option_mask;
345 .Vt ngm_uni_config_mask
346 specify which configuration parameter to change.
349 field contains bit definitions for all timers, retransmission counters
354 selects which of the protocol options to change, and
356 specifies which options should be changed.
357 The following bits are defined:
359 enum uni_config_mask {
387 .Vt "enum uni_option"
389 .It Dv NGM_UNI_ENABLE
390 Create the UNI instance and enable processing.
391 Before the UNI is enabled parameters cannot be retrieved or set.
392 .It Dv NGM_UNI_DISABLE
393 Destroy the UNI instance and free all resources.
394 Note, that connections are not released.
406 and this manual page were written by
407 .An Harti Brandt Aq harti@FreeBSD.org
411 LIJ (leaf-initiated-join) is not implemented yet.
413 GFP (generic functional protocol, Q.2932.1) is not yet implemented.
417 PNNI not yet implemented.
419 Need to implement connection modification and the Q.2931 amendments.