xref: /minix3/minix/lib/liblwip/dist/src/include/lwip/inet.h (revision 5d5fbe79c1b60734f34c69330aec5496644e8651)
1*5d5fbe79SDavid van Moolenbroek /**
2*5d5fbe79SDavid van Moolenbroek  * @file
3*5d5fbe79SDavid van Moolenbroek  * This file (together with sockets.h) aims to provide structs and functions from
4*5d5fbe79SDavid van Moolenbroek  * - arpa/inet.h
5*5d5fbe79SDavid van Moolenbroek  * - netinet/in.h
6*5d5fbe79SDavid van Moolenbroek  *
7*5d5fbe79SDavid van Moolenbroek  */
8*5d5fbe79SDavid van Moolenbroek 
9*5d5fbe79SDavid van Moolenbroek /*
10*5d5fbe79SDavid van Moolenbroek  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
11*5d5fbe79SDavid van Moolenbroek  * All rights reserved.
12*5d5fbe79SDavid van Moolenbroek  *
13*5d5fbe79SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without modification,
14*5d5fbe79SDavid van Moolenbroek  * are permitted provided that the following conditions are met:
15*5d5fbe79SDavid van Moolenbroek  *
16*5d5fbe79SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright notice,
17*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer.
18*5d5fbe79SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright notice,
19*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer in the documentation
20*5d5fbe79SDavid van Moolenbroek  *    and/or other materials provided with the distribution.
21*5d5fbe79SDavid van Moolenbroek  * 3. The name of the author may not be used to endorse or promote products
22*5d5fbe79SDavid van Moolenbroek  *    derived from this software without specific prior written permission.
23*5d5fbe79SDavid van Moolenbroek  *
24*5d5fbe79SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
25*5d5fbe79SDavid van Moolenbroek  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26*5d5fbe79SDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27*5d5fbe79SDavid van Moolenbroek  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28*5d5fbe79SDavid van Moolenbroek  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
29*5d5fbe79SDavid van Moolenbroek  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30*5d5fbe79SDavid van Moolenbroek  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31*5d5fbe79SDavid van Moolenbroek  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32*5d5fbe79SDavid van Moolenbroek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
33*5d5fbe79SDavid van Moolenbroek  * OF SUCH DAMAGE.
34*5d5fbe79SDavid van Moolenbroek  *
35*5d5fbe79SDavid van Moolenbroek  * This file is part of the lwIP TCP/IP stack.
36*5d5fbe79SDavid van Moolenbroek  *
37*5d5fbe79SDavid van Moolenbroek  * Author: Adam Dunkels <adam@sics.se>
38*5d5fbe79SDavid van Moolenbroek  *
39*5d5fbe79SDavid van Moolenbroek  */
40*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_HDR_INET_H
41*5d5fbe79SDavid van Moolenbroek #define LWIP_HDR_INET_H
42*5d5fbe79SDavid van Moolenbroek 
43*5d5fbe79SDavid van Moolenbroek #include "lwip/opt.h"
44*5d5fbe79SDavid van Moolenbroek #include "lwip/def.h"
45*5d5fbe79SDavid van Moolenbroek #include "lwip/ip_addr.h"
46*5d5fbe79SDavid van Moolenbroek #include "lwip/ip6_addr.h"
47*5d5fbe79SDavid van Moolenbroek 
48*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
49*5d5fbe79SDavid van Moolenbroek extern "C" {
50*5d5fbe79SDavid van Moolenbroek #endif
51*5d5fbe79SDavid van Moolenbroek 
52*5d5fbe79SDavid van Moolenbroek /* If your port already typedef's in_addr_t, define IN_ADDR_T_DEFINED
53*5d5fbe79SDavid van Moolenbroek    to prevent this code from redefining it. */
54*5d5fbe79SDavid van Moolenbroek #if !defined(in_addr_t) && !defined(IN_ADDR_T_DEFINED)
55*5d5fbe79SDavid van Moolenbroek typedef u32_t in_addr_t;
56*5d5fbe79SDavid van Moolenbroek #endif
57*5d5fbe79SDavid van Moolenbroek 
58*5d5fbe79SDavid van Moolenbroek struct in_addr {
59*5d5fbe79SDavid van Moolenbroek   in_addr_t s_addr;
60*5d5fbe79SDavid van Moolenbroek };
61*5d5fbe79SDavid van Moolenbroek 
62*5d5fbe79SDavid van Moolenbroek struct in6_addr {
63*5d5fbe79SDavid van Moolenbroek   union {
64*5d5fbe79SDavid van Moolenbroek     u32_t u32_addr[4];
65*5d5fbe79SDavid van Moolenbroek     u8_t  u8_addr[16];
66*5d5fbe79SDavid van Moolenbroek   } un;
67*5d5fbe79SDavid van Moolenbroek #define s6_addr  un.u8_addr
68*5d5fbe79SDavid van Moolenbroek };
69*5d5fbe79SDavid van Moolenbroek 
70*5d5fbe79SDavid van Moolenbroek /** 255.255.255.255 */
71*5d5fbe79SDavid van Moolenbroek #define INADDR_NONE         IPADDR_NONE
72*5d5fbe79SDavid van Moolenbroek /** 127.0.0.1 */
73*5d5fbe79SDavid van Moolenbroek #define INADDR_LOOPBACK     IPADDR_LOOPBACK
74*5d5fbe79SDavid van Moolenbroek /** 0.0.0.0 */
75*5d5fbe79SDavid van Moolenbroek #define INADDR_ANY          IPADDR_ANY
76*5d5fbe79SDavid van Moolenbroek /** 255.255.255.255 */
77*5d5fbe79SDavid van Moolenbroek #define INADDR_BROADCAST    IPADDR_BROADCAST
78*5d5fbe79SDavid van Moolenbroek 
79*5d5fbe79SDavid van Moolenbroek /** This macro can be used to initialize a variable of type struct in6_addr
80*5d5fbe79SDavid van Moolenbroek     to the IPv6 wildcard address. */
81*5d5fbe79SDavid van Moolenbroek #define IN6ADDR_ANY_INIT {{{0,0,0,0}}}
82*5d5fbe79SDavid van Moolenbroek /** This macro can be used to initialize a variable of type struct in6_addr
83*5d5fbe79SDavid van Moolenbroek     to the IPv6 loopback address. */
84*5d5fbe79SDavid van Moolenbroek #define IN6ADDR_LOOPBACK_INIT {{{0,0,0,PP_HTONL(1)}}}
85*5d5fbe79SDavid van Moolenbroek /** This variable is initialized by the system to contain the wildcard IPv6 address. */
86*5d5fbe79SDavid van Moolenbroek extern const struct in6_addr in6addr_any;
87*5d5fbe79SDavid van Moolenbroek 
88*5d5fbe79SDavid van Moolenbroek /* Definitions of the bits in an (IPv4) Internet address integer.
89*5d5fbe79SDavid van Moolenbroek 
90*5d5fbe79SDavid van Moolenbroek    On subnets, host and network parts are found according to
91*5d5fbe79SDavid van Moolenbroek    the subnet mask, not these masks.  */
92*5d5fbe79SDavid van Moolenbroek #define IN_CLASSA(a)        IP_CLASSA(a)
93*5d5fbe79SDavid van Moolenbroek #define IN_CLASSA_NET       IP_CLASSA_NET
94*5d5fbe79SDavid van Moolenbroek #define IN_CLASSA_NSHIFT    IP_CLASSA_NSHIFT
95*5d5fbe79SDavid van Moolenbroek #define IN_CLASSA_HOST      IP_CLASSA_HOST
96*5d5fbe79SDavid van Moolenbroek #define IN_CLASSA_MAX       IP_CLASSA_MAX
97*5d5fbe79SDavid van Moolenbroek 
98*5d5fbe79SDavid van Moolenbroek #define IN_CLASSB(b)        IP_CLASSB(b)
99*5d5fbe79SDavid van Moolenbroek #define IN_CLASSB_NET       IP_CLASSB_NET
100*5d5fbe79SDavid van Moolenbroek #define IN_CLASSB_NSHIFT    IP_CLASSB_NSHIFT
101*5d5fbe79SDavid van Moolenbroek #define IN_CLASSB_HOST      IP_CLASSB_HOST
102*5d5fbe79SDavid van Moolenbroek #define IN_CLASSB_MAX       IP_CLASSB_MAX
103*5d5fbe79SDavid van Moolenbroek 
104*5d5fbe79SDavid van Moolenbroek #define IN_CLASSC(c)        IP_CLASSC(c)
105*5d5fbe79SDavid van Moolenbroek #define IN_CLASSC_NET       IP_CLASSC_NET
106*5d5fbe79SDavid van Moolenbroek #define IN_CLASSC_NSHIFT    IP_CLASSC_NSHIFT
107*5d5fbe79SDavid van Moolenbroek #define IN_CLASSC_HOST      IP_CLASSC_HOST
108*5d5fbe79SDavid van Moolenbroek #define IN_CLASSC_MAX       IP_CLASSC_MAX
109*5d5fbe79SDavid van Moolenbroek 
110*5d5fbe79SDavid van Moolenbroek #define IN_CLASSD(d)        IP_CLASSD(d)
111*5d5fbe79SDavid van Moolenbroek #define IN_CLASSD_NET       IP_CLASSD_NET     /* These ones aren't really */
112*5d5fbe79SDavid van Moolenbroek #define IN_CLASSD_NSHIFT    IP_CLASSD_NSHIFT  /*   net and host fields, but */
113*5d5fbe79SDavid van Moolenbroek #define IN_CLASSD_HOST      IP_CLASSD_HOST    /*   routing needn't know. */
114*5d5fbe79SDavid van Moolenbroek #define IN_CLASSD_MAX       IP_CLASSD_MAX
115*5d5fbe79SDavid van Moolenbroek 
116*5d5fbe79SDavid van Moolenbroek #define IN_MULTICAST(a)     IP_MULTICAST(a)
117*5d5fbe79SDavid van Moolenbroek 
118*5d5fbe79SDavid van Moolenbroek #define IN_EXPERIMENTAL(a)  IP_EXPERIMENTAL(a)
119*5d5fbe79SDavid van Moolenbroek #define IN_BADCLASS(a)      IP_BADCLASS(a)
120*5d5fbe79SDavid van Moolenbroek 
121*5d5fbe79SDavid van Moolenbroek #define IN_LOOPBACKNET      IP_LOOPBACKNET
122*5d5fbe79SDavid van Moolenbroek 
123*5d5fbe79SDavid van Moolenbroek 
124*5d5fbe79SDavid van Moolenbroek #ifndef INET_ADDRSTRLEN
125*5d5fbe79SDavid van Moolenbroek #define INET_ADDRSTRLEN     IP4ADDR_STRLEN_MAX
126*5d5fbe79SDavid van Moolenbroek #endif
127*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV6
128*5d5fbe79SDavid van Moolenbroek #ifndef INET6_ADDRSTRLEN
129*5d5fbe79SDavid van Moolenbroek #define INET6_ADDRSTRLEN    IP6ADDR_STRLEN_MAX
130*5d5fbe79SDavid van Moolenbroek #endif
131*5d5fbe79SDavid van Moolenbroek #endif
132*5d5fbe79SDavid van Moolenbroek 
133*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4
134*5d5fbe79SDavid van Moolenbroek 
135*5d5fbe79SDavid van Moolenbroek #define inet_addr_from_ip4addr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr))
136*5d5fbe79SDavid van Moolenbroek #define inet_addr_to_ip4addr(target_ipaddr, source_inaddr)   (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr))
137*5d5fbe79SDavid van Moolenbroek 
138*5d5fbe79SDavid van Moolenbroek /* directly map this to the lwip internal functions */
139*5d5fbe79SDavid van Moolenbroek #define inet_addr(cp)                   ipaddr_addr(cp)
140*5d5fbe79SDavid van Moolenbroek #define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t*)addr)
141*5d5fbe79SDavid van Moolenbroek #define inet_ntoa(addr)                 ip4addr_ntoa((const ip4_addr_t*)&(addr))
142*5d5fbe79SDavid van Moolenbroek #define inet_ntoa_r(addr, buf, buflen)  ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen)
143*5d5fbe79SDavid van Moolenbroek 
144*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV4 */
145*5d5fbe79SDavid van Moolenbroek 
146*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV6
147*5d5fbe79SDavid van Moolenbroek #define inet6_addr_from_ip6addr(target_in6addr, source_ip6addr) {(target_in6addr)->un.u32_addr[0] = (source_ip6addr)->addr[0]; \
148*5d5fbe79SDavid van Moolenbroek                                                                  (target_in6addr)->un.u32_addr[1] = (source_ip6addr)->addr[1]; \
149*5d5fbe79SDavid van Moolenbroek                                                                  (target_in6addr)->un.u32_addr[2] = (source_ip6addr)->addr[2]; \
150*5d5fbe79SDavid van Moolenbroek                                                                  (target_in6addr)->un.u32_addr[3] = (source_ip6addr)->addr[3];}
151*5d5fbe79SDavid van Moolenbroek #define inet6_addr_to_ip6addr(target_ip6addr, source_in6addr)   {(target_ip6addr)->addr[0] = (source_in6addr)->un.u32_addr[0]; \
152*5d5fbe79SDavid van Moolenbroek                                                                  (target_ip6addr)->addr[1] = (source_in6addr)->un.u32_addr[1]; \
153*5d5fbe79SDavid van Moolenbroek                                                                  (target_ip6addr)->addr[2] = (source_in6addr)->un.u32_addr[2]; \
154*5d5fbe79SDavid van Moolenbroek                                                                  (target_ip6addr)->addr[3] = (source_in6addr)->un.u32_addr[3]; \
155*5d5fbe79SDavid van Moolenbroek                                                                  ip6_addr_clear_zone(target_ip6addr);}
156*5d5fbe79SDavid van Moolenbroek 
157*5d5fbe79SDavid van Moolenbroek /* directly map this to the lwip internal functions */
158*5d5fbe79SDavid van Moolenbroek #define inet6_aton(cp, addr)            ip6addr_aton(cp, (ip6_addr_t*)addr)
159*5d5fbe79SDavid van Moolenbroek #define inet6_ntoa(addr)                ip6addr_ntoa((const ip6_addr_t*)&(addr))
160*5d5fbe79SDavid van Moolenbroek #define inet6_ntoa_r(addr, buf, buflen) ip6addr_ntoa_r((const ip6_addr_t*)&(addr), buf, buflen)
161*5d5fbe79SDavid van Moolenbroek 
162*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV6 */
163*5d5fbe79SDavid van Moolenbroek 
164*5d5fbe79SDavid van Moolenbroek 
165*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
166*5d5fbe79SDavid van Moolenbroek }
167*5d5fbe79SDavid van Moolenbroek #endif
168*5d5fbe79SDavid van Moolenbroek 
169*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_HDR_INET_H */
170