85 #ifndef LWIP_HDR_IP6_ZONE_H
86 #define LWIP_HDR_IP6_ZONE_H
101 #define IP6_NO_ZONE 0
106 #define IPADDR6_ZONE_INIT , IP6_NO_ZONE
109 #define ip6_addr_zone(ip6addr) ((ip6addr)->zone)
112 #define ip6_addr_has_zone(ip6addr) (ip6_addr_zone(ip6addr) != IP6_NO_ZONE)
115 #define ip6_addr_set_zone(ip6addr, zone_idx) ((ip6addr)->zone = (zone_idx))
118 #define ip6_addr_clear_zone(ip6addr) ((ip6addr)->zone = IP6_NO_ZONE)
121 #define ip6_addr_copy_zone(ip6addr1, ip6addr2) ((ip6addr1).zone = (ip6addr2).zone)
124 #define ip6_addr_equals_zone(ip6addr, zone_idx) ((ip6addr)->zone == (zone_idx))
128 #define ip6_addr_cmp_zone(ip6addr1, ip6addr2) ((ip6addr1)->zone == (ip6addr2)->zone)
136 enum lwip_ipv6_scope_type
154 #ifndef IPV6_CUSTOM_SCOPES
155 #define IPV6_CUSTOM_SCOPES 0
158 #if !IPV6_CUSTOM_SCOPES
177 #define ip6_addr_has_scope(ip6addr, type) \
178 (ip6_addr_islinklocal(ip6addr) || (((type) != IP6_UNICAST) && \
179 (ip6_addr_ismulticast_iflocal(ip6addr) || \
180 ip6_addr_ismulticast_linklocal(ip6addr))))
198 #define ip6_addr_assign_zone(ip6addr, type, netif) \
199 (ip6_addr_set_zone((ip6addr), \
200 ip6_addr_has_scope((ip6addr), (type)) ? netif_get_index(netif) : 0))
221 #define ip6_addr_test_zone(ip6addr, netif) \
222 (ip6_addr_equals_zone((ip6addr), netif_get_index(netif)))
228 #define ip6_addr_lacks_zone(ip6addr, type) \
229 (!ip6_addr_has_zone(ip6addr) && ip6_addr_has_scope((ip6addr), (type)))
249 #define ip6_addr_select_zone(dest, src) do { struct netif *selected_netif; \
250 selected_netif = ip6_route((src), (dest)); \
251 if (selected_netif != NULL) { \
252 ip6_addr_assign_zone((dest), IP6_UNKNOWN, selected_netif); \
261 #define IPADDR6_ZONE_INIT
262 #define ip6_addr_zone(ip6addr) (IP6_NO_ZONE)
263 #define ip6_addr_has_zone(ip6addr) (0)
264 #define ip6_addr_set_zone(ip6addr, zone_idx)
265 #define ip6_addr_clear_zone(ip6addr)
266 #define ip6_addr_copy_zone(ip6addr1, ip6addr2)
267 #define ip6_addr_equals_zone(ip6addr, zone_idx) (1)
268 #define ip6_addr_cmp_zone(ip6addr1, ip6addr2) (1)
269 #define IPV6_CUSTOM_SCOPES 0
270 #define ip6_addr_has_scope(ip6addr, type) (0)
271 #define ip6_addr_assign_zone(ip6addr, type, netif)
272 #define ip6_addr_test_zone(ip6addr, netif) (1)
273 #define ip6_addr_lacks_zone(ip6addr, type) (0)
274 #define ip6_addr_select_zone(ip6addr, src)
278 #if LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG
281 #define IP6_ADDR_ZONECHECK(ip6addr) LWIP_ASSERT("IPv6 zone check failed", \
282 ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) == ip6_addr_has_zone(ip6addr))
285 #define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif) LWIP_ASSERT("IPv6 netif zone check failed", \
286 ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) ? \
287 (ip6_addr_has_zone(ip6addr) && \
288 (((netif) == NULL) || ip6_addr_test_zone((ip6addr), (netif)))) : \
289 !ip6_addr_has_zone(ip6addr))
293 #define IP6_ADDR_ZONECHECK(ip6addr)
294 #define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif)