sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
Loading...
Searching...
No Matches
ip6_zone.h
Go to the documentation of this file.
1
53
54
/*
55
* Copyright (c) 2017 The MINIX 3 Project.
56
* All rights reserved.
57
*
58
* Redistribution and use in source and binary forms, with or without modification,
59
* are permitted provided that the following conditions are met:
60
*
61
* 1. Redistributions of source code must retain the above copyright notice,
62
* this list of conditions and the following disclaimer.
63
* 2. Redistributions in binary form must reproduce the above copyright notice,
64
* this list of conditions and the following disclaimer in the documentation
65
* and/or other materials provided with the distribution.
66
* 3. The name of the author may not be used to endorse or promote products
67
* derived from this software without specific prior written permission.
68
*
69
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
70
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
71
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
72
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
73
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
74
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
75
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
76
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
77
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
78
* OF SUCH DAMAGE.
79
*
80
* This file is part of the lwIP TCP/IP stack.
81
*
82
* Author: David van Moolenbroek <david@minix3.org>
83
*
84
*/
85
#ifndef LWIP_HDR_IP6_ZONE_H
86
#define LWIP_HDR_IP6_ZONE_H
87
88
#ifdef __cplusplus
89
extern
"C"
{
90
#endif
91
97
98
#if LWIP_IPV6
/* don't build if not configured for use in lwipopts.h */
99
101
#define IP6_NO_ZONE 0
102
103
#if LWIP_IPV6_SCOPES
104
106
#define IPADDR6_ZONE_INIT , IP6_NO_ZONE
107
109
#define ip6_addr_zone(ip6addr) ((ip6addr)->zone)
110
112
#define ip6_addr_has_zone(ip6addr) (ip6_addr_zone(ip6addr) != IP6_NO_ZONE)
113
115
#define ip6_addr_set_zone(ip6addr, zone_idx) ((ip6addr)->zone = (zone_idx))
116
118
#define ip6_addr_clear_zone(ip6addr) ((ip6addr)->zone = IP6_NO_ZONE)
119
121
#define ip6_addr_copy_zone(ip6addr1, ip6addr2) ((ip6addr1).zone = (ip6addr2).zone)
122
124
#define ip6_addr_equals_zone(ip6addr, zone_idx) ((ip6addr)->zone == (zone_idx))
125
127
#define ip6_addr_cmp_zone(addr1, addr2) ip6_addr_zone_eq(ip6addr1, ip6addr2)
130
#define ip6_addr_zone_eq(ip6addr1, ip6addr2) ((ip6addr1)->zone == (ip6addr2)->zone)
131
138
enum
lwip_ipv6_scope_type
139
{
141
IP6_UNKNOWN = 0,
143
IP6_UNICAST = 1,
145
IP6_MULTICAST = 2
146
};
147
156
#ifndef IPV6_CUSTOM_SCOPES
157
#define IPV6_CUSTOM_SCOPES 0
158
#endif
/* !IPV6_CUSTOM_SCOPES */
159
160
#if !IPV6_CUSTOM_SCOPES
161
179
#define ip6_addr_has_scope(ip6addr, type) \
180
(ip6_addr_islinklocal(ip6addr) || (((type) != IP6_UNICAST) && \
181
(ip6_addr_ismulticast_iflocal(ip6addr) || \
182
ip6_addr_ismulticast_linklocal(ip6addr))))
183
200
#define ip6_addr_assign_zone(ip6addr, type, netif) \
201
(ip6_addr_set_zone((ip6addr), \
202
ip6_addr_has_scope((ip6addr), (type)) ? netif_get_index(netif) : 0))
203
223
#define ip6_addr_test_zone(ip6addr, netif) \
224
(ip6_addr_equals_zone((ip6addr), netif_get_index(netif)))
225
226
#endif
/* !IPV6_CUSTOM_SCOPES */
227
230
#define ip6_addr_lacks_zone(ip6addr, type) \
231
(!ip6_addr_has_zone(ip6addr) && ip6_addr_has_scope((ip6addr), (type)))
232
251
#define ip6_addr_select_zone(dest, src) do { struct netif *selected_netif; \
252
selected_netif = ip6_route((src), (dest)); \
253
if (selected_netif != NULL) { \
254
ip6_addr_assign_zone((dest), IP6_UNKNOWN, selected_netif); \
255
} } while (0)
256
260
261
#else
/* LWIP_IPV6_SCOPES */
262
263
#define IPADDR6_ZONE_INIT
264
#define ip6_addr_zone(ip6addr) (IP6_NO_ZONE)
265
#define ip6_addr_has_zone(ip6addr) (0)
266
#define ip6_addr_set_zone(ip6addr, zone_idx)
267
#define ip6_addr_clear_zone(ip6addr)
268
#define ip6_addr_copy_zone(ip6addr1, ip6addr2)
269
#define ip6_addr_equals_zone(ip6addr, zone_idx) (1)
270
#define ip6_addr_zone_eq(ip6addr1, ip6addr2) (1)
271
#define IPV6_CUSTOM_SCOPES 0
272
#define ip6_addr_has_scope(ip6addr, type) (0)
273
#define ip6_addr_assign_zone(ip6addr, type, netif)
274
#define ip6_addr_test_zone(ip6addr, netif) (1)
275
#define ip6_addr_lacks_zone(ip6addr, type) (0)
276
#define ip6_addr_select_zone(ip6addr, src)
277
278
#endif
/* LWIP_IPV6_SCOPES */
279
280
#if LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG
281
283
#define IP6_ADDR_ZONECHECK(ip6addr) LWIP_ASSERT("IPv6 zone check failed", \
284
ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) == ip6_addr_has_zone(ip6addr))
285
287
#define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif) LWIP_ASSERT("IPv6 netif zone check failed", \
288
ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) ? \
289
(ip6_addr_has_zone(ip6addr) && \
290
(((netif) == NULL) || ip6_addr_test_zone((ip6addr), (netif)))) : \
291
!ip6_addr_has_zone(ip6addr))
292
293
#else
/* LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG */
294
295
#define IP6_ADDR_ZONECHECK(ip6addr)
296
#define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif)
297
298
#endif
/* LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG */
299
300
#endif
/* LWIP_IPV6 */
301
302
#ifdef __cplusplus
303
}
304
#endif
305
306
#endif
/* LWIP_HDR_IP6_ZONE_H */
core
ps2ip
include
lwip_include
lwip
ip6_zone.h
Generated by
1.18.0