Another DLEP status update
[oonf.git] / src-plugins / generic / dlep / dlep_iana.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
4  * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  *   notice, this list of conditions and the following disclaimer in
15  *   the documentation and/or other materials provided with the
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its
18  *   contributors may be used to endorse or promote products derived
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 /**
43  * @file
44  */
45
46 #ifndef DLEP_IANA_H_
47 #define DLEP_IANA_H_
48
49 /*! IPv4 address for DLEP multicast discovery */
50 #define DLEP_WELL_KNOWN_MULTICAST_ADDRESS "224.0.0.117"
51
52 /*! IPv6 address for DLEP multicast discovery */
53 #define DLEP_WELL_KNOWN_MULTICAST_ADDRESS_6 "FF02::1:7"
54
55 /*! UDP port for DLEP multicast discovery */
56 #define DLEP_WELL_KNOWN_MULTICAST_PORT_TXT "854"
57
58 /*! TCP port for DLEP radio server port */
59 #define DLEP_WELL_KNOWN_SESSION_PORT_TXT "854"
60 /**
61  * Generic DLEP Constant
62  */
63 enum
64 {
65   /*! DLEP IANA_PORT */
66   DLEP_PORT = 854, //!< DLEP_PORT
67 };
68
69 /*! magic word for DLEP session */
70 #define DLEP_RFC8175_PREFIX "DLEP"
71
72 /**
73  * Predefined DLEP extension IDs
74  */
75 enum dlep_extensions
76 {
77   /*! number of DLEP base extensions */
78   DLEP_EXTENSION_BASE_COUNT = 3,
79
80   /*! DLEP protocol/session handling */
81   DLEP_EXTENSION_BASE_PROTO = -3,
82
83   /*! DLEP metrics defined by base RFC */
84   DLEP_EXTENSION_BASE_IP = -2,
85
86   /*! DLEP metrics defined by base RFC */
87   DLEP_EXTENSION_BASE_METRIC = -1,
88
89   /*! Additional DLEP physical layer statistics */
90   DLEP_EXTENSION_L1_STATS = 65520,
91
92   /*! Additional DLEP link layer statistics */
93   DLEP_EXTENSION_L2_STATS = 65521,
94
95   /*! Additional boolean radio attributes */
96   DLEP_EXTENSION_RADIO_ATTRIBUTES = 65522,
97 };
98
99 /**
100  * DLEP signal IDs
101  */
102 enum dlep_signals
103 {
104   /*! control numbers to keep session restriction the same */
105   DLEP_KEEP_RESTRICTION = -3,
106
107   /*! control number to kill DLEP session */
108   DLEP_KILL_SESSION = -2,
109
110   /*! control number to allow all DLEP signals */
111   DLEP_ALL_SIGNALS = -1,
112
113   /*! constant added to UDP signals */
114   DLEP_IS_UDP_SIGNAL = 65536,
115
116   /*! Do not use! */
117   DLEP_RESERVED_SIGNAL = 0,
118
119   /*! Router announces its presence (UDP) */
120   DLEP_UDP_PEER_DISCOVERY = 1 + DLEP_IS_UDP_SIGNAL,
121
122   /*! Radio announces the open DLEP session port(s) (UDP) */
123   DLEP_UDP_PEER_OFFER = 2 + DLEP_IS_UDP_SIGNAL,
124
125   /*! Router announcing the supported extensions */
126   DLEP_SESSION_INITIALIZATION = 1,
127
128   /*! Radio announcing the supported extensions and default metrics */
129   DLEP_SESSION_INITIALIZATION_ACK = 2,
130
131   /*! Radio update interface scope data */
132   DLEP_SESSION_UPDATE = 3,
133
134   /*! Router acknowledges interface data update */
135   DLEP_SESSION_UPDATE_ACK = 4,
136
137   /*! Radio/Router terminates DLEP session */
138   DLEP_SESSION_TERMINATION = 5,
139
140   /*! Radio/Router acknowledge end of DLEP session */
141   DLEP_SESSION_TERMINATION_ACK = 6,
142
143   /*! Radio announces a new neighbor with metrics */
144   DLEP_DESTINATION_UP = 7,
145
146   /*! Router acknowledges new neighbor */
147   DLEP_DESTINATION_UP_ACK = 8,
148
149   /*! Router announce a new neighbor to the radio */
150   DLEP_DESTINATION_ANNOUNCE = 9,
151
152   /*! Radio acknowledges the new neighbor */
153   DLEP_DESTINATION_ANNOUNCE_ACK = 10,
154
155   /*! Radio announces a lost neighbor */
156   DLEP_DESTINATION_DOWN = 11,
157
158   /*! Router acknowledges lost neighbor */
159   DLEP_DESTINATION_DOWN_ACK = 12,
160
161   /*! Radio announces new metrics for a neighbor */
162   DLEP_DESTINATION_UPDATE = 13,
163
164   /*! Router demands a special link characteristic to a neighbor */
165   DLEP_LINK_CHARACTERISTICS_REQUEST = 14,
166
167   /*! Radio acknowledges the changed link characterestics */
168   DLEP_LINK_CHARACTERISTICS_ACK = 15,
169
170   /*! Radio/Router is still active */
171   DLEP_HEARTBEAT = 16,
172 };
173
174 /**
175  * DLEP TLV ids
176  */
177 enum dlep_tlvs
178 {
179   /*! did an operation succeed or failed */
180   DLEP_STATUS_TLV = 1,
181
182   /*! IPv4 address, port and TLS flag for a Radio DLEP port */
183   DLEP_IPV4_CONPOINT_TLV = 2,
184
185   /*! IPv6 address, port and TLS flag for a Radio DLEP port */
186   DLEP_IPV6_CONPOINT_TLV = 3,
187
188   /*! string identifier of a DLEP Radio/Router */
189   DLEP_PEER_TYPE_TLV = 4,
190
191   /*! interval between two Heartbeats a Radio/Router will send */
192   DLEP_HEARTBEAT_INTERVAL_TLV = 5,
193
194   /*! list of supported extensions of a DLEP Radio/Router */
195   DLEP_EXTENSIONS_SUPPORTED_TLV = 6,
196
197   /*! MAC address of a neighbor a DLEP message will refer to */
198   DLEP_MAC_ADDRESS_TLV = 7,
199
200   /*! IPv4 address of a DLEP neighbor */
201   DLEP_IPV4_ADDRESS_TLV = 8,
202
203   /*! IPv6 address of a DLEP neighbor */
204   DLEP_IPV6_ADDRESS_TLV = 9,
205
206   /*! IPv4 subnet of a DLEP neighbor */
207   DLEP_IPV4_SUBNET_TLV = 10,
208
209   /*! IPv6 subnet of a DLEP neigbor */
210   DLEP_IPV6_SUBNET_TLV = 11,
211
212   /*! maximum data rate (receive) in bit/s */
213   DLEP_MDRR_TLV = 12,
214
215   /*! maximum data rate (transmit) in bit/s */
216   DLEP_MDRT_TLV = 13,
217
218   /*! current data rate (receive) in bit/s */
219   DLEP_CDRR_TLV = 14,
220
221   /*! current data rate (transmit) in bit/s */
222   DLEP_CDRT_TLV = 15,
223
224   /*! latency in microseconds */
225   DLEP_LATENCY_TLV = 16,
226
227   /*! resources (receive) */
228   DLEP_RESOURCES_TLV = 17,
229
230   /*! relative link quality (receive) */
231   DLEP_RLQR_TLV = 18,
232
233   /*! relative link quality (transmit) */
234   DLEP_RLQT_TLV = 19,
235
236   /*! MTU of interface */
237   DLEP_MTU_TLV = 20,
238
239   /* l1 statistics */
240
241   /*! channel center frequency in Hz */
242   DLEP_FREQUENCY_TLV = 65408,
243
244   /*! channel bandwidth in Hz */
245   DLEP_BANDWIDTH_TLV,
246
247   /*! noise level in milli dBm */
248   DLEP_NOISE_LEVEL_TLV,
249
250   /*! total channel active time in ns */
251   DLEP_CHANNEL_ACTIVE_TLV,
252
253   /*! total channel busy time in ns */
254   DLEP_CHANNEL_BUSY_TLV,
255
256   /*! total channel receiver time in ns */
257   DLEP_CHANNEL_RX_TLV,
258
259   /*! total channel transmission time in ns */
260   DLEP_CHANNEL_TX_TLV,
261
262   /*! signal strength (receive) in milli dBm */
263   DLEP_SIGNAL_RX_TLV,
264
265   /*! signal strength (transmit) in milli dBm */
266   DLEP_SIGNAL_TX_TLV,
267
268   /* l2 statistics */
269
270   /*! total number of frames (receive) */
271   DLEP_FRAMES_R_TLV,
272
273   /*! total number of frames (transmit) */
274   DLEP_FRAMES_T_TLV,
275
276   /*! total number of bytes (receive) */
277   DLEP_BYTES_R_TLV,
278
279   /*! total number of bytes (transmit) */
280   DLEP_BYTES_T_TLV,
281
282   /*! outgoing throughput in bit/s */
283   DLEP_THROUGHPUT_T_TLV,
284
285   /*! total number of frame retransmissions */
286   DLEP_FRAMES_RETRIES_TLV,
287
288   /*! total number of failed transmissions */
289   DLEP_FRAMES_FAILED_TLV,
290
291   /* radio attributes */
292
293   /*! true if radio needs unicast traffic for MCS rate selection */
294   DLEP_MCS_BY_PROBING,
295
296   /*! true if radio can only receive unicast traffic */
297   DLEP_RX_ONLY_UNICAST,
298
299   /*! true if radio can only send unicast traffic */
300   DLEP_TX_ONLY_UNICAST,
301
302   /* more layer1 statistics */
303
304   /*! rx broadcast bitrate */
305   DLEP_CDRR_BC_TLV,
306 };
307
308 enum dlep_peer_type_flags
309 {
310   /*! radio does not implement access control */
311   DLEP_PEER_TYPE_OPEN = 0,
312
313   /*! radio does implement access control */
314   DLEP_PEER_TYPE_SECURED = 1,
315 };
316 /**
317  * Flags for IP address TLVs
318  */
319 enum dlep_ipaddr_indicator
320 {
321   /*! Add an IP address to a DLEP neighbor */
322   DLEP_IP_ADD = 1,
323
324   /*! Remove an IP address from a DLEP neighbor */
325   DLEP_IP_REMOVE = 0,
326 };
327
328 /**
329  * Flags for DLEP Connection Point
330  */
331 enum dlep_connection_point_flags
332 {
333   /*! Connection needs TLS */
334   DLEP_CONNECTION_TLS = 1,
335
336   /*! Connection needs no TLS */
337   DLEP_CONNECTION_PLAIN = 0,
338 };
339
340 /**
341  * DLEP status codes
342  */
343 enum dlep_status
344 {
345   /*! internal value for "no status set" */
346   DLEP_STATUS_NONE = -1,
347
348   /*! operation succeeded */
349   DLEP_STATUS_OKAY = 0,
350
351   /*! receiver does not need messages about the destination */
352   DLEP_STATUS_NOT_INTERESTED = 1,
353
354   /*! operation is refused at the moment */
355   DLEP_STATUS_REQUEST_DENIED = 2,
356
357   /*! message ID is unknown */
358   DLEP_STATUS_UNKNOWN_MESSAGE = 128,
359
360   /*! message happened at an unexpected time */
361   DLEP_STATUS_UNEXPECTED_MESSAGE = 129,
362
363   /*! unknown or invalid TLV in signal */
364   DLEP_STATUS_INVALID_DATA = 130,
365
366   /*! unknown MAC address destination */
367   DLEP_STATUS_INVALID_DESTINATION = 131,
368
369   /*! operation could not be done in the allocated time */
370   DLEP_STATUS_TIMED_OUT = 132,
371 };
372
373 #endif /* DLEP_IANA_H_ */