Implement lid_length mechanism into DLEP
[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 /*! Default Link-ID length in Octets for configuration */
62 #define DLEP_DEFAULT_LID_LENGTH_TXT "4"
63
64 /**
65  * Generic DLEP Constants
66  */
67 enum
68 {
69   /*! DLEP IANA_PORT */
70   DLEP_PORT = 854, //!< DLEP_PORT
71
72   /*! used for link id extension */
73   DLEP_DEFAULT_LID_LENGTH = 4,
74 };
75
76 /*! magic word for DLEP session */
77 #define DLEP_RFC8175_PREFIX "DLEP"
78
79 /**
80  * Predefined DLEP extension IDs
81  */
82 enum dlep_extensions
83 {
84   /*! number of DLEP base extensions */
85   DLEP_EXTENSION_BASE_COUNT = 3,
86
87   /*! DLEP protocol/session handling */
88   DLEP_EXTENSION_BASE_PROTO = -3,
89
90   /*! DLEP metrics defined by base RFC */
91   DLEP_EXTENSION_BASE_IP = -2,
92
93   /*! DLEP metrics defined by base RFC */
94   DLEP_EXTENSION_BASE_METRIC = -1,
95
96   /*! Additional DLEP physical layer statistics */
97   DLEP_EXTENSION_L1_STATS = 65520,
98
99   /*! Additional DLEP link layer statistics */
100   DLEP_EXTENSION_L2_STATS = 65521,
101
102   /*! Additional boolean radio attributes */
103   DLEP_EXTENSION_RADIO_ATTRIBUTES = 65522,
104
105   /*! DLEP Link ID */
106   DLEP_EXTENSION_LINK_ID = 65523,
107
108   /*! number of supported (non-base) DLEP extensions */
109   DLEP_EXTENSION_COUNT = 4,
110 };
111
112 /**
113  * DLEP signal IDs
114  */
115 enum dlep_signals
116 {
117   /*! control numbers to keep session restriction the same */
118   DLEP_KEEP_RESTRICTION = -3,
119
120   /*! control number to kill DLEP session */
121   DLEP_KILL_SESSION = -2,
122
123   /*! control number to allow all DLEP signals */
124   DLEP_ALL_SIGNALS = -1,
125
126   /*! constant added to UDP signals */
127   DLEP_IS_UDP_SIGNAL = 65536,
128
129   /*! Do not use! */
130   DLEP_RESERVED_SIGNAL = 0,
131
132   /*! Router announces its presence (UDP) */
133   DLEP_UDP_PEER_DISCOVERY = 1 + DLEP_IS_UDP_SIGNAL,
134
135   /*! Radio announces the open DLEP session port(s) (UDP) */
136   DLEP_UDP_PEER_OFFER = 2 + DLEP_IS_UDP_SIGNAL,
137
138   /*! Router announcing the supported extensions */
139   DLEP_SESSION_INITIALIZATION = 1,
140
141   /*! Radio announcing the supported extensions and default metrics */
142   DLEP_SESSION_INITIALIZATION_ACK = 2,
143
144   /*! Radio update interface scope data */
145   DLEP_SESSION_UPDATE = 3,
146
147   /*! Router acknowledges interface data update */
148   DLEP_SESSION_UPDATE_ACK = 4,
149
150   /*! Radio/Router terminates DLEP session */
151   DLEP_SESSION_TERMINATION = 5,
152
153   /*! Radio/Router acknowledge end of DLEP session */
154   DLEP_SESSION_TERMINATION_ACK = 6,
155
156   /*! Radio announces a new neighbor with metrics */
157   DLEP_DESTINATION_UP = 7,
158
159   /*! Router acknowledges new neighbor */
160   DLEP_DESTINATION_UP_ACK = 8,
161
162   /*! Router announce a new neighbor to the radio */
163   DLEP_DESTINATION_ANNOUNCE = 9,
164
165   /*! Radio acknowledges the new neighbor */
166   DLEP_DESTINATION_ANNOUNCE_ACK = 10,
167
168   /*! Radio announces a lost neighbor */
169   DLEP_DESTINATION_DOWN = 11,
170
171   /*! Router acknowledges lost neighbor */
172   DLEP_DESTINATION_DOWN_ACK = 12,
173
174   /*! Radio announces new metrics for a neighbor */
175   DLEP_DESTINATION_UPDATE = 13,
176
177   /*! Router demands a special link characteristic to a neighbor */
178   DLEP_LINK_CHARACTERISTICS_REQUEST = 14,
179
180   /*! Radio acknowledges the changed link characterestics */
181   DLEP_LINK_CHARACTERISTICS_ACK = 15,
182
183   /*! Radio/Router is still active */
184   DLEP_HEARTBEAT = 16,
185 };
186
187 /**
188  * DLEP TLV ids
189  */
190 enum dlep_tlvs
191 {
192   /*! did an operation succeed or failed */
193   DLEP_STATUS_TLV = 1,
194
195   /*! IPv4 address, port and TLS flag for a Radio DLEP port */
196   DLEP_IPV4_CONPOINT_TLV = 2,
197
198   /*! IPv6 address, port and TLS flag for a Radio DLEP port */
199   DLEP_IPV6_CONPOINT_TLV = 3,
200
201   /*! string identifier of a DLEP Radio/Router */
202   DLEP_PEER_TYPE_TLV = 4,
203
204   /*! interval between two Heartbeats a Radio/Router will send */
205   DLEP_HEARTBEAT_INTERVAL_TLV = 5,
206
207   /*! list of supported extensions of a DLEP Radio/Router */
208   DLEP_EXTENSIONS_SUPPORTED_TLV = 6,
209
210   /*! MAC address of a neighbor a DLEP message will refer to */
211   DLEP_MAC_ADDRESS_TLV = 7,
212
213   /*! IPv4 address of a DLEP neighbor */
214   DLEP_IPV4_ADDRESS_TLV = 8,
215
216   /*! IPv6 address of a DLEP neighbor */
217   DLEP_IPV6_ADDRESS_TLV = 9,
218
219   /*! IPv4 subnet of a DLEP neighbor */
220   DLEP_IPV4_SUBNET_TLV = 10,
221
222   /*! IPv6 subnet of a DLEP neigbor */
223   DLEP_IPV6_SUBNET_TLV = 11,
224
225   /*! maximum data rate (receive) in bit/s */
226   DLEP_MDRR_TLV = 12,
227
228   /*! maximum data rate (transmit) in bit/s */
229   DLEP_MDRT_TLV = 13,
230
231   /*! current data rate (receive) in bit/s */
232   DLEP_CDRR_TLV = 14,
233
234   /*! current data rate (transmit) in bit/s */
235   DLEP_CDRT_TLV = 15,
236
237   /*! latency in microseconds */
238   DLEP_LATENCY_TLV = 16,
239
240   /*! resources (receive) */
241   DLEP_RESOURCES_TLV = 17,
242
243   /*! relative link quality (receive) */
244   DLEP_RLQR_TLV = 18,
245
246   /*! relative link quality (transmit) */
247   DLEP_RLQT_TLV = 19,
248
249   /*! MTU of interface */
250   DLEP_MTU_TLV = 20,
251
252   /*! link ID TLV */
253   DLEP_LID_TLV = 21,
254
255   /*! link ID TLV */
256   DLEP_LID_LENGTH_TLV = 22,
257
258   /* l1 statistics */
259
260   /*! channel center frequency in Hz */
261   DLEP_FREQUENCY_TLV = 65408,
262
263   /*! channel bandwidth in Hz */
264   DLEP_BANDWIDTH_TLV,
265
266   /*! noise level in milli dBm */
267   DLEP_NOISE_LEVEL_TLV,
268
269   /*! total channel active time in ns */
270   DLEP_CHANNEL_ACTIVE_TLV,
271
272   /*! total channel busy time in ns */
273   DLEP_CHANNEL_BUSY_TLV,
274
275   /*! total channel receiver time in ns */
276   DLEP_CHANNEL_RX_TLV,
277
278   /*! total channel transmission time in ns */
279   DLEP_CHANNEL_TX_TLV,
280
281   /*! signal strength (receive) in milli dBm */
282   DLEP_SIGNAL_RX_TLV,
283
284   /*! signal strength (transmit) in milli dBm */
285   DLEP_SIGNAL_TX_TLV,
286
287   /* l2 statistics */
288
289   /*! total number of frames (receive) */
290   DLEP_FRAMES_R_TLV,
291
292   /*! total number of frames (transmit) */
293   DLEP_FRAMES_T_TLV,
294
295   /*! total number of bytes (receive) */
296   DLEP_BYTES_R_TLV,
297
298   /*! total number of bytes (transmit) */
299   DLEP_BYTES_T_TLV,
300
301   /*! outgoing throughput in bit/s */
302   DLEP_THROUGHPUT_T_TLV,
303
304   /*! total number of frame retransmissions */
305   DLEP_FRAMES_RETRIES_TLV,
306
307   /*! total number of failed transmissions */
308   DLEP_FRAMES_FAILED_TLV,
309
310   /* radio attributes */
311
312   /*! true if radio needs unicast traffic for MCS rate selection */
313   DLEP_MCS_BY_PROBING,
314
315   /*! true if radio can only receive unicast traffic */
316   DLEP_RX_ONLY_UNICAST,
317
318   /*! true if radio can only send unicast traffic */
319   DLEP_TX_ONLY_UNICAST,
320
321   /* more layer1 statistics */
322
323   /*! rx broadcast bitrate */
324   DLEP_CDRR_BC_TLV,
325 };
326
327 enum dlep_peer_type_flags
328 {
329   /*! radio does not implement access control */
330   DLEP_PEER_TYPE_OPEN = 0,
331
332   /*! radio does implement access control */
333   DLEP_PEER_TYPE_SECURED = 1,
334 };
335 /**
336  * Flags for IP address TLVs
337  */
338 enum dlep_ipaddr_indicator
339 {
340   /*! Add an IP address to a DLEP neighbor */
341   DLEP_IP_ADD = 1,
342
343   /*! Remove an IP address from a DLEP neighbor */
344   DLEP_IP_REMOVE = 0,
345 };
346
347 /**
348  * Flags for DLEP Connection Point
349  */
350 enum dlep_connection_point_flags
351 {
352   /*! Connection needs TLS */
353   DLEP_CONNECTION_TLS = 1,
354
355   /*! Connection needs no TLS */
356   DLEP_CONNECTION_PLAIN = 0,
357 };
358
359 /**
360  * DLEP status codes
361  */
362 enum dlep_status
363 {
364   /*! internal value for "no status set" */
365   DLEP_STATUS_NONE = -1,
366
367   /*! operation succeeded */
368   DLEP_STATUS_OKAY = 0,
369
370   /*! receiver does not need messages about the destination */
371   DLEP_STATUS_NOT_INTERESTED = 1,
372
373   /*! operation is refused at the moment */
374   DLEP_STATUS_REQUEST_DENIED = 2,
375
376   /*! message ID is unknown */
377   DLEP_STATUS_UNKNOWN_MESSAGE = 128,
378
379   /*! message happened at an unexpected time */
380   DLEP_STATUS_UNEXPECTED_MESSAGE = 129,
381
382   /*! unknown or invalid TLV in signal */
383   DLEP_STATUS_INVALID_DATA = 130,
384
385   /*! unknown MAC address destination */
386   DLEP_STATUS_INVALID_DESTINATION = 131,
387
388   /*! operation could not be done in the allocated time */
389   DLEP_STATUS_TIMED_OUT = 132,
390 };
391
392 #endif /* DLEP_IANA_H_ */