]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/contrib/ngatm/netnatm/msg/uni_hdr.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / contrib / ngatm / netnatm / msg / uni_hdr.h
1 /*
2  * Copyright (c) 1996-2003
3  *      Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4  *      All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  * Author: Hartmut Brandt <harti@freebsd.org>
28  *
29  * $Begemot: libunimsg/netnatm/msg/uni_hdr.h,v 1.6 2004/07/08 08:22:05 brandt Exp $
30  */
31 #ifndef _NETNATM_MSG_UNI_HDR_H_
32 #define _NETNATM_MSG_UNI_HDR_H_
33
34 #include <sys/types.h>
35 #ifdef _KERNEL
36 #include <sys/stdint.h>
37 #else
38 #include <stdint.h>
39 #endif
40
41 #include <netnatm/msg/uni_config.h>
42
43 enum {
44         UNI_PROTO       = 0x09,         /* protocol discriminator */
45         PNNI_PROTO      = 0xf0,         /* PNNI protocol discriminator */
46 };
47
48 /*
49  * Message types
50  */
51 enum uni_msgtype {
52         UNI_UNKNOWN             = 0x100,/* unknown message */
53
54         UNI_ALERTING            = 0x01, /* alerting */
55         UNI_CALL_PROC           = 0x02, /* call proceeding */
56         UNI_SETUP               = 0x05, /* setup */
57         UNI_CONNECT             = 0x07, /* connect */
58         UNI_CONNECT_ACK         = 0x0f, /* connect ack */
59
60         UNI_RESTART             = 0x46, /* restart */
61         UNI_RELEASE             = 0x4d, /* release */
62         UNI_RESTART_ACK         = 0x4e, /* restart acknowledgement */
63         UNI_RELEASE_COMPL       = 0x5a, /* release complete */
64
65         UNI_NOTIFY              = 0x6e, /* notify user */
66         UNI_STATUS_ENQ          = 0x75, /* status enquiry */
67         UNI_STATUS              = 0x7d, /* status */
68
69         UNI_ADD_PARTY           = 0x80, /* add party */
70         UNI_ADD_PARTY_ACK       = 0x81, /* add party acknowledgement */
71         UNI_ADD_PARTY_REJ       = 0x82, /* add party reject */
72         UNI_DROP_PARTY          = 0x83, /* drop party */
73         UNI_DROP_PARTY_ACK      = 0x84, /* drop party acknowledgement */
74         UNI_PARTY_ALERTING      = 0x85, /* party alerting */
75
76         UNI_LEAF_SETUP_FAIL     = 0x90, /* leaf setup failed */
77         UNI_LEAF_SETUP_REQ      = 0x91, /* leaf setup request */
78
79         UNI_COBISETUP           = 0x15, /* Q.2932 COBI-setup */
80         UNI_FACILITY            = 0x62, /* Q.2932 facility */
81
82         UNI_MODIFY_REQ          = 0x88, /* Q.2963 Modify request */
83         UNI_MODIFY_ACK          = 0x89, /* Q.2963 Modify acknowledgement */
84         UNI_MODIFY_REJ          = 0x8a, /* Q.2963 Modify reject */
85         UNI_CONN_AVAIL          = 0x8b, /* Q.2963 Connection available */
86 };
87
88 /*
89  * Information element types
90  */
91 enum uni_ietype {
92         UNI_IE_CAUSE            = 0x08, /* cause */
93         UNI_IE_CALLSTATE        = 0x14, /* call state */
94         UNI_IE_FACILITY         = 0x1C, /* Q.2932 facility IE */
95         UNI_IE_NOTIFY           = 0x27, /* UNI4.0 notify */
96         UNI_IE_EETD             = 0x42, /* UNI4.0 end-to-end transit delay */
97         UNI_IE_CONNED           = 0x4c, /* UNI4.0/Q.2951 connected address */
98         UNI_IE_CONNEDSUB        = 0x4d, /* UNI4.0/Q.2951 connected subaddress */
99         UNI_IE_EPREF            = 0x54, /* endpoint reference */
100         UNI_IE_EPSTATE          = 0x55, /* enpoint state */
101         UNI_IE_AAL              = 0x58, /* ATM adaptation layer parameters */
102         UNI_IE_TRAFFIC          = 0x59, /* ATM traffic descriptor */
103         UNI_IE_CONNID           = 0x5a, /* connection identifier */
104         UNI_IE_QOS              = 0x5c, /* quality of service parameter */
105         UNI_IE_BHLI             = 0x5d, /* broadband higher layer information */
106         UNI_IE_BEARER           = 0x5e, /* broadband bearer capability */
107         UNI_IE_BLLI             = 0x5f, /* broadband lower layer information */
108         UNI_IE_LSHIFT           = 0x60, /* broadband locking shift */
109         UNI_IE_NLSHIFT          = 0x61, /* broadband non-locking shift */
110         UNI_IE_SCOMPL           = 0x62, /* broadband sending complete */
111         UNI_IE_REPEAT           = 0x63, /* broadband repeat indicator */
112         UNI_IE_CALLING          = 0x6c, /* calling party number */
113         UNI_IE_CALLINGSUB       = 0x6d, /* calling party subaddress */
114         UNI_IE_CALLED           = 0x70, /* called party number */
115         UNI_IE_CALLEDSUB        = 0x71, /* called party subaddress */
116         UNI_IE_TNS              = 0x78, /* transit network selection */
117         UNI_IE_RESTART          = 0x79, /* restart indicator */
118         UNI_IE_UU               = 0x7e, /* UNI4.0/Q.2957 user-to-user info */
119         UNI_IE_GIT              = 0x7f, /* UNI4.0 generic identifier transport*/
120         UNI_IE_MINTRAFFIC       = 0x81, /* Q.2962 minimum traffic desc */
121         UNI_IE_ATRAFFIC         = 0x82, /* Q.2962 alternate traffic desc */
122         UNI_IE_ABRSETUP         = 0x84, /* UNI4.0 ABR setup parameters */
123         UNI_IE_REPORT           = 0x89, /* Q.2963 broadband report type */
124         UNI_IE_CALLED_SOFT      = 0xe0, /* PNNI Calling party soft PVPC */
125         UNI_IE_CRANKBACK        = 0xe1, /* PNNI Crankback */
126         UNI_IE_DTL              = 0xe2, /* PNNI designated transit list */
127         UNI_IE_CALLING_SOFT     = 0xe3, /* PNNI Called party soft PVPC */
128         UNI_IE_ABRADD           = 0xe4, /* UNI4.0 ABR additional parameters */
129         UNI_IE_LIJ_CALLID       = 0xe8, /* UNI4.0 LIF call identifier */
130         UNI_IE_LIJ_PARAM        = 0xe9, /* UNI4.0 LIF parameters */
131         UNI_IE_LIJ_SEQNO        = 0xea, /* UNI4.0 LIF sequence number */
132         UNI_IE_CSCOPE           = 0xeb, /* UNI4.0 connection scope selection */
133         UNI_IE_EXQOS            = 0xec, /* UNI4.0 extended QoS parameters */
134         UNI_IE_MDCR             = 0xf0, /* UNI4.0+ Minimum desired call rate */
135         UNI_IE_UNREC            = 0xfe,
136 };
137
138 enum uni_coding {
139         UNI_CODING_ITU = 0x0,
140         UNI_CODING_NET = 0x3,
141 };
142
143 enum uni_msgact {
144         UNI_MSGACT_CLEAR        = 0x0,
145         UNI_MSGACT_IGNORE       = 0x1,
146         UNI_MSGACT_REPORT       = 0x2,
147
148         UNI_MSGACT_DEFAULT      = 0x4
149 };
150
151 enum uni_ieact {
152         UNI_IEACT_CLEAR         = 0x00, /* clear call */
153         UNI_IEACT_IGNORE        = 0x01, /* ignore IE and proceed */
154         UNI_IEACT_REPORT        = 0x02, /* ignore IE, report and proceed */
155         UNI_IEACT_MSG_IGNORE    = 0x05, /* ignore message */
156         UNI_IEACT_MSG_REPORT    = 0x06, /* ignore message and report */
157
158         UNI_IEACT_DEFAULT       = 0x08
159 };
160
161 struct uni_cref {
162         u_int   flag;
163         u_int   cref;
164 };
165
166 /*
167  * Message header.
168  */
169 struct uni_msghdr {
170         struct uni_cref cref;
171         enum uni_msgact act;            /* action indicator */
172         u_int           pass:1;         /* PNNI pass along request */
173 };
174
175 enum {
176         CREF_GLOBAL     = 0,
177         CREF_DUMMY      = 0x7fffff,
178 };
179
180 /*
181  * General information element header.
182  */
183 struct uni_iehdr {
184         enum uni_coding coding;         /* coding standard */
185         enum uni_ieact  act;            /* action indicator */
186         u_int           pass : 1;       /* PNNI pass along request */
187         u_int           present;        /* which optional elements are present */
188 #define UNI_IE_EMPTY    0x80000000
189 #define UNI_IE_PRESENT  0x40000000
190 #define UNI_IE_ERROR    0x20000000
191 #define UNI_IE_XXX      0x10000000
192 #define UNI_IE_MASK     0xf0000000
193 };
194
195 #define IE_ISPRESENT(IE) \
196         (((IE).h.present & (UNI_IE_PRESENT|UNI_IE_EMPTY)) == UNI_IE_PRESENT)
197 #define IE_SETPRESENT(IE) \
198         ((IE).h.present = ((IE).h.present & ~UNI_IE_MASK) | \
199                 UNI_IE_PRESENT)
200
201 #define IE_ADDPRESENT(IE) \
202         ((IE).h.present = ((IE).h.present & ~UNI_IE_EMPTY) | \
203                 UNI_IE_PRESENT)
204
205 #define IE_ISEMPTY(IE) \
206         (((IE).h.present & UNI_IE_MASK) == (UNI_IE_PRESENT | UNI_IE_EMPTY))
207 #define IE_SETEMPTY(IE) \
208         ((IE).h.present = ((IE).h.present & ~UNI_IE_MASK) | \
209                 UNI_IE_EMPTY | UNI_IE_PRESENT)
210
211 #define IE_ISERROR(IE) \
212         (((IE).h.present & UNI_IE_MASK) == (UNI_IE_PRESENT | UNI_IE_ERROR))
213 #define IE_SETERROR(IE) \
214         ((IE).h.present = ((IE).h.present & ~UNI_IE_MASK) | \
215                 UNI_IE_ERROR | UNI_IE_PRESENT)
216
217 #define IE_ISGOOD(IE) \
218         (((IE).h.present & UNI_IE_MASK) == (UNI_IE_PRESENT))
219
220 #endif