Prusa MINI Firmware overview
nd6_priv.h
Go to the documentation of this file.
1 /**
2  * @file
3  *
4  * Neighbor discovery and stateless address autoconfiguration for IPv6.
5  * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
6  * (Address autoconfiguration).
7  */
8 
9 /*
10  * Copyright (c) 2010 Inico Technologies Ltd.
11  * All rights reserved.
12  *
13  * Redistribution and use in source and binary forms, with or without modification,
14  * are permitted provided that the following conditions are met:
15  *
16  * 1. Redistributions of source code must retain the above copyright notice,
17  * this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright notice,
19  * this list of conditions and the following disclaimer in the documentation
20  * and/or other materials provided with the distribution.
21  * 3. The name of the author may not be used to endorse or promote products
22  * derived from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
25  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
29  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
33  * OF SUCH DAMAGE.
34  *
35  * This file is part of the lwIP TCP/IP stack.
36  *
37  * Author: Ivan Delamer <delamer@inicotech.com>
38  *
39  *
40  * Please coordinate changes and requests with Ivan Delamer
41  * <delamer@inicotech.com>
42  */
43 
44 #ifndef LWIP_HDR_ND6_PRIV_H
45 #define LWIP_HDR_ND6_PRIV_H
46 
47 #include "lwip/opt.h"
48 
49 #if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */
50 
51 #include "lwip/pbuf.h"
52 #include "lwip/ip6_addr.h"
53 #include "lwip/netif.h"
54 
55 
56 #ifdef __cplusplus
57 extern "C" {
58 #endif
59 
60 #if LWIP_ND6_QUEUEING
61 /** struct for queueing outgoing packets for unknown address
62  * defined here to be accessed by memp.h
63  */
64 struct nd6_q_entry {
65  struct nd6_q_entry *next;
66  struct pbuf *p;
67 };
68 #endif /* LWIP_ND6_QUEUEING */
69 
70 /** Struct for tables. */
71 struct nd6_neighbor_cache_entry {
72  ip6_addr_t next_hop_address;
73  struct netif *netif;
74  u8_t lladdr[NETIF_MAX_HWADDR_LEN];
75  /*u32_t pmtu;*/
76 #if LWIP_ND6_QUEUEING
77  /** Pointer to queue of pending outgoing packets on this entry. */
78  struct nd6_q_entry *q;
79 #else /* LWIP_ND6_QUEUEING */
80  /** Pointer to a single pending outgoing packet on this entry. */
81  struct pbuf *q;
82 #endif /* LWIP_ND6_QUEUEING */
83  u8_t state;
84  u8_t isrouter;
85  union {
86  u32_t reachable_time; /* in ms since value may originate from network packet */
87  u32_t delay_time; /* ticks (ND6_TMR_INTERVAL) */
88  u32_t probes_sent;
89  u32_t stale_time; /* ticks (ND6_TMR_INTERVAL) */
90  } counter;
91 };
92 
93 struct nd6_destination_cache_entry {
94  ip6_addr_t destination_addr;
95  ip6_addr_t next_hop_addr;
96  u16_t pmtu;
97  u32_t age;
98 };
99 
100 struct nd6_prefix_list_entry {
101  ip6_addr_t prefix;
102  struct netif *netif;
103  u32_t invalidation_timer; /* in ms since value may originate from network packet */
104 #if LWIP_IPV6_AUTOCONFIG
105  u8_t flags;
106 #define ND6_PREFIX_AUTOCONFIG_AUTONOMOUS 0x01
107 #define ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED 0x02
108 #define ND6_PREFIX_AUTOCONFIG_ADDRESS_DUPLICATE 0x04
109 #endif /* LWIP_IPV6_AUTOCONFIG */
110 };
111 
112 struct nd6_router_list_entry {
113  struct nd6_neighbor_cache_entry *neighbor_entry;
114  u32_t invalidation_timer; /* in ms since value may originate from network packet */
115  u8_t flags;
116 };
117 
118 enum nd6_neighbor_cache_entry_state {
119  ND6_NO_ENTRY = 0,
120  ND6_INCOMPLETE,
121  ND6_REACHABLE,
122  ND6_STALE,
123  ND6_DELAY,
124  ND6_PROBE
125 };
126 
127 /* Router tables. */
128 /* @todo make these static? and entries accessible through API? */
129 extern struct nd6_neighbor_cache_entry neighbor_cache[];
130 extern struct nd6_destination_cache_entry destination_cache[];
131 extern struct nd6_prefix_list_entry prefix_list[];
132 extern struct nd6_router_list_entry default_router_list[];
133 
134 /* Default values, can be updated by a RA message. */
135 extern u32_t reachable_time;
136 extern u32_t retrans_timer;
137 
138 #ifdef __cplusplus
139 }
140 #endif
141 
142 #endif /* LWIP_IPV6 */
143 
144 #endif /* LWIP_HDR_ND6_PRIV_H */
opt.h
NETIF_MAX_HWADDR_LEN
#define NETIF_MAX_HWADDR_LEN
Definition: netif.h:63
pbuf.h
u16_t
uint16_t u16_t
Definition: arch.h:121
u32_t
uint32_t u32_t
Definition: arch.h:123
state
static volatile fsensor_t state
Definition: filament_sensor.c:23
netif::flags
u8_t flags
Definition: netif.h:305
netif.h
u8_t
uint8_t u8_t
Definition: arch.h:119
netif
Definition: netif.h:225
ip6_addr.h
pbuf
Definition: pbuf.h:142