Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of OmniWheels by
nd6_priv.h
00001 /** 00002 * @file 00003 * 00004 * Neighbor discovery and stateless address autoconfiguration for IPv6. 00005 * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 00006 * (Address autoconfiguration). 00007 */ 00008 00009 /* 00010 * Copyright (c) 2010 Inico Technologies Ltd. 00011 * All rights reserved. 00012 * 00013 * Redistribution and use in source and binary forms, with or without modification, 00014 * are permitted provided that the following conditions are met: 00015 * 00016 * 1. Redistributions of source code must retain the above copyright notice, 00017 * this list of conditions and the following disclaimer. 00018 * 2. Redistributions in binary form must reproduce the above copyright notice, 00019 * this list of conditions and the following disclaimer in the documentation 00020 * and/or other materials provided with the distribution. 00021 * 3. The name of the author may not be used to endorse or promote products 00022 * derived from this software without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 00025 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00026 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 00027 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00028 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00029 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00030 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00031 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00032 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 00033 * OF SUCH DAMAGE. 00034 * 00035 * This file is part of the lwIP TCP/IP stack. 00036 * 00037 * Author: Ivan Delamer <delamer@inicotech.com> 00038 * 00039 * 00040 * Please coordinate changes and requests with Ivan Delamer 00041 * <delamer@inicotech.com> 00042 */ 00043 00044 #ifndef LWIP_HDR_ND6_PRIV_H 00045 #define LWIP_HDR_ND6_PRIV_H 00046 00047 #include "lwip/opt.h" 00048 00049 #if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ 00050 00051 #include "lwip/pbuf.h" 00052 #include "lwip/ip6_addr.h" 00053 #include "lwip/netif.h" 00054 00055 00056 #ifdef __cplusplus 00057 extern "C" { 00058 #endif 00059 00060 #if LWIP_ND6_QUEUEING 00061 /** struct for queueing outgoing packets for unknown address 00062 * defined here to be accessed by memp.h 00063 */ 00064 struct nd6_q_entry { 00065 struct nd6_q_entry *next; 00066 struct pbuf *p; 00067 }; 00068 #endif /* LWIP_ND6_QUEUEING */ 00069 00070 /** Struct for tables. */ 00071 struct nd6_neighbor_cache_entry { 00072 ip6_addr_t next_hop_address; 00073 struct netif *netif; 00074 u8_t lladdr[NETIF_MAX_HWADDR_LEN]; 00075 /*u32_t pmtu;*/ 00076 #if LWIP_ND6_QUEUEING 00077 /** Pointer to queue of pending outgoing packets on this entry. */ 00078 struct nd6_q_entry *q; 00079 #else /* LWIP_ND6_QUEUEING */ 00080 /** Pointer to a single pending outgoing packet on this entry. */ 00081 struct pbuf *q; 00082 #endif /* LWIP_ND6_QUEUEING */ 00083 u8_t state; 00084 u8_t isrouter; 00085 union { 00086 u32_t reachable_time; /* in seconds */ 00087 u32_t delay_time; /* ticks (ND6_TMR_INTERVAL) */ 00088 u32_t probes_sent; 00089 u32_t stale_time; /* ticks (ND6_TMR_INTERVAL) */ 00090 } counter; 00091 }; 00092 00093 struct nd6_destination_cache_entry { 00094 ip6_addr_t destination_addr; 00095 ip6_addr_t next_hop_addr; 00096 u16_t pmtu; 00097 u32_t age; 00098 }; 00099 00100 struct nd6_prefix_list_entry { 00101 ip6_addr_t prefix; 00102 struct netif *netif; 00103 u32_t invalidation_timer; /* in seconds */ 00104 }; 00105 00106 struct nd6_router_list_entry { 00107 struct nd6_neighbor_cache_entry *neighbor_entry; 00108 u32_t invalidation_timer; /* in seconds */ 00109 u8_t flags; 00110 }; 00111 00112 enum nd6_neighbor_cache_entry_state { 00113 ND6_NO_ENTRY = 0, 00114 ND6_INCOMPLETE, 00115 ND6_REACHABLE, 00116 ND6_STALE, 00117 ND6_DELAY, 00118 ND6_PROBE 00119 }; 00120 00121 #define ND6_HOPLIM 255 /* maximum hop limit, required in all ND packets */ 00122 00123 #define ND6_2HRS 7200 /* two hours, expressed in number of seconds */ 00124 00125 /* Router tables. */ 00126 /* @todo make these static? and entries accessible through API? */ 00127 extern struct nd6_neighbor_cache_entry neighbor_cache[]; 00128 extern struct nd6_destination_cache_entry destination_cache[]; 00129 extern struct nd6_prefix_list_entry prefix_list[]; 00130 extern struct nd6_router_list_entry default_router_list[]; 00131 00132 /* Default values, can be updated by a RA message. */ 00133 extern u32_t reachable_time; 00134 extern u32_t retrans_timer; 00135 00136 #ifdef __cplusplus 00137 } 00138 #endif 00139 00140 #endif /* LWIP_IPV6 */ 00141 00142 #endif /* LWIP_HDR_ND6_PRIV_H */
Generated on Fri Jul 22 2022 04:53:57 by
1.7.2
