ndp.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
20 #ifndef NET_NDP_H
21 #define NET_NDP_H
22 
23 #include <stdint.h>
24 
25 #include "byteorder.h"
26 #include "net/ipv6/addr.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
37 #define NDP_RTR_ADV_FLAGS_MASK (0xc0)
38 #define NDP_RTR_ADV_FLAGS_M (0x80)
39 #define NDP_RTR_ADV_FLAGS_O (0x40)
49 #define NDP_RTR_ADV_CUR_HL_UNSPEC (0)
55 #define NDP_RTR_ADV_LTIME_SEC_MAX (9000)
56 
61 #define NDP_NBR_ADV_LTIME_NOT_DR (0)
62 
63 #define NDP_NBR_ADV_REACH_TIME (0)
64 #define NDP_NBR_ADV_RETRANS_TIMER (0)
72 #define NDP_NBR_ADV_FLAGS_MASK (0xe0)
73 #define NDP_NBR_ADV_FLAGS_R (0x80)
74 #define NDP_NBR_ADV_FLAGS_S (0x40)
75 #define NDP_NBR_ADV_FLAGS_O (0x20)
86 #define NDP_OPT_SL2A (1)
87 #define NDP_OPT_TL2A (2)
88 #define NDP_OPT_PI (3)
89 #define NDP_OPT_RH (4)
90 #define NDP_OPT_MTU (5)
91 #define NDP_OPT_AR (33)
92 #define NDP_OPT_6CTX (34)
93 #define NDP_OPT_ABR (35)
100 #define NDP_OPT_PI_FLAGS_MASK (0xc0)
101 #define NDP_OPT_PI_FLAGS_L (0x80)
102 #define NDP_OPT_PI_FLAGS_A (0x40)
110 #define NDP_OPT_PI_VALID_LTIME_INF (UINT32_MAX)
111 #define NDP_OPT_PI_PREF_LTIME_INF (UINT32_MAX)
119 #define NDP_OPT_PI_LEN (4U)
120 #define NDP_OPT_MTU_LEN (1U)
121 
128 #define NDP_MAX_INIT_RA_INTERVAL (16000U)
129 #define NDP_MAX_INIT_RA_NUMOF (3U)
130 #define NDP_MAX_FIN_RA_NUMOF (3U)
131 #define NDP_MIN_MS_DELAY_BETWEEN_RAS (3000U)
132 #define NDP_MAX_RA_DELAY (500U)
140 #define NDP_MAX_RS_MS_DELAY (1000U)
141 #define NDP_RS_MS_INTERVAL (4000U)
142 #define NDP_MAX_RS_NUMOF (3U)
150 #define NDP_MAX_MC_SOL_NUMOF (3U)
151 #define NDP_MAX_UC_SOL_NUMOF (3U)
152 #define NDP_MAX_ANYCAST_MS_DELAY (1000U)
153 #define NDP_MAX_NA_NUMOF (3U)
154 #define NDP_REACH_MS (30000U)
155 #define NDP_RETRANS_TIMER_MS (1000U)
161 #define NDP_MAX_RETRANS_TIMER_MS (60000U)
162 #define NDP_DELAY_FIRST_PROBE_MS (5000U)
163 #define NDP_MIN_RANDOM_FACTOR (500U)
164 #define NDP_MAX_RANDOM_FACTOR (1500U)
173 typedef struct __attribute__((packed)) {
174  uint8_t type;
175  uint8_t code;
178 } ndp_rtr_sol_t;
179 
186 typedef struct __attribute__((packed)) {
187  uint8_t type;
188  uint8_t code;
190  uint8_t cur_hl;
191  uint8_t flags;
195 } ndp_rtr_adv_t;
196 
203 typedef struct __attribute__((packed)) {
204  uint8_t type;
205  uint8_t code;
209 } ndp_nbr_sol_t;
210 
217 typedef struct __attribute__((packed)) {
218  uint8_t type;
219  uint8_t code;
221  uint8_t flags;
222  uint8_t resv[3];
224 } ndp_nbr_adv_t;
225 
232 typedef struct __attribute__((packed)) {
233  uint8_t type;
234  uint8_t code;
240 
245 typedef struct __attribute__((packed)) {
246  uint8_t type;
247  uint8_t len;
248 } ndp_opt_t;
249 
250 /* XXX: slla and tlla are just ndp_opt_t with variable link layer address
251  * appended */
252 
259 typedef struct __attribute__((packed)) {
260  uint8_t type;
261  uint8_t len;
262  uint8_t prefix_len;
263  uint8_t flags;
268 } ndp_opt_pi_t;
269 
276 typedef struct __attribute__((packed)) {
277  uint8_t type;
278  uint8_t len;
279  uint8_t resv[6];
280 } ndp_opt_rh_t;
281 
288 typedef struct __attribute__((packed)) {
289  uint8_t type;
290  uint8_t len;
293 } ndp_opt_mtu_t;
294 
295 
296 #ifdef __cplusplus
297 }
298 #endif
299 
300 #endif /* NET_NDP_H */
301 
network_uint32_t mtu
MTU.
Definition: ndp.h:292
uint8_t type
message type
Definition: ndp.h:174
Definitions for IPv6 addresses.
network_uint16_t csum
checksum
Definition: ndp.h:220
Prefix information option format.
Definition: ndp.h:259
Neighbor solicitation message format.
Definition: ndp.h:203
A 32 bit integer in big endian aka network byte order.
Definition: byteorder.h:86
Neighbor advertisement message format.
Definition: ndp.h:217
uint8_t code
message code
Definition: ndp.h:205
MTU option format.
Definition: ndp.h:288
uint8_t type
option type
Definition: ndp.h:260
A 16 bit integer in big endian aka network byte order.
Definition: byteorder.h:76
network_uint32_t pref_ltime
preferred lifetime
Definition: ndp.h:265
Redirected header option format.
Definition: ndp.h:276
uint8_t flags
flags
Definition: ndp.h:221
uint8_t cur_hl
current hop limit
Definition: ndp.h:190
uint8_t type
message type
Definition: ndp.h:233
network_uint16_t csum
checksum
Definition: ndp.h:235
General NDP option format.
Definition: ndp.h:245
network_uint32_t resv
reserved field
Definition: ndp.h:177
uint8_t flags
flags
Definition: ndp.h:191
uint8_t type
option type
Definition: ndp.h:289
uint8_t len
length in units of 8 octets
Definition: ndp.h:247
uint8_t type
option type
Definition: ndp.h:277
Router advertisement message format.
Definition: ndp.h:186
Redirect message format.
Definition: ndp.h:232
network_uint16_t csum
checksum
Definition: ndp.h:206
uint8_t prefix_len
prefix length
Definition: ndp.h:262
uint8_t type
message type
Definition: ndp.h:204
uint8_t type
message type
Definition: ndp.h:187
network_uint32_t resv
reserved field
Definition: ndp.h:266
ipv6_addr_t dst
destination address
Definition: ndp.h:238
network_uint32_t retrans_timer
retransmission timer
Definition: ndp.h:194
network_uint32_t reach_time
reachable time
Definition: ndp.h:193
ipv6_addr_t tgt
target address
Definition: ndp.h:237
network_uint32_t resv
reserved field
Definition: ndp.h:207
uint8_t code
message code
Definition: ndp.h:175
ipv6_addr_t tgt
target address
Definition: ndp.h:223
network_uint32_t valid_ltime
valid lifetime
Definition: ndp.h:264
Functions to work with different byte orders.
uint8_t type
option type
Definition: ndp.h:246
Router solicitation message format.
Definition: ndp.h:173
ipv6_addr_t prefix
prefix
Definition: ndp.h:267
uint8_t code
message code
Definition: ndp.h:188
uint8_t len
length in units of 8 octets
Definition: ndp.h:290
ipv6_addr_t tgt
target address
Definition: ndp.h:208
uint8_t type
message type
Definition: ndp.h:218
network_uint32_t resv
reserved field
Definition: ndp.h:236
Data type to represent an IPv6 address.
Definition: ipv6/addr.h:74
network_uint16_t resv
reserved field
Definition: ndp.h:291
uint8_t code
message code
Definition: ndp.h:219
uint8_t flags
flags
Definition: ndp.h:263
network_uint16_t csum
checksum
Definition: ndp.h:176
network_uint16_t ltime
router lifetime
Definition: ndp.h:192
uint8_t code
message code
Definition: ndp.h:234
uint8_t len
length in units of 8 octets
Definition: ndp.h:278
uint8_t len
length in units of 8 octets
Definition: ndp.h:261
network_uint16_t csum
checksum
Definition: ndp.h:189