17
17
* as published by the Free Software Foundation; either version
18
18
* 2 of the License, or (at your option) any later version.
20
* Copyright (C) 2001-2010 Alexandre Cassen, <acassen@freebox.fr>
20
* Copyright (C) 2001-2011 Alexandre Cassen, <acassen@linux-vs.org>
162
/* IP string to sockaddr_storage */
164
inet_stosockaddr(char *ip, char *port, struct sockaddr_storage *addr)
169
addr->ss_family = (strchr(ip, ':')) ? AF_INET6 : AF_INET;
171
/* remove range and mask stuff */
172
if (strstr(ip, "-")) {
173
while (*cp != '-' && *cp != '\0')
177
} else if (strstr(ip, "/")) {
178
while (*cp != '/' && *cp != '\0')
184
if (addr->ss_family == AF_INET6) {
185
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) addr;
187
addr6->sin6_port = htons(atoi(port));
188
addr_ip = &addr6->sin6_addr;
190
struct sockaddr_in *addr4 = (struct sockaddr_in *) addr;
192
addr4->sin_port = htons(atoi(port));
193
addr_ip = &addr4->sin_addr;
196
if (!inet_pton(addr->ss_family, ip, addr_ip))
202
/* IP network to string representation */
204
inet_sockaddrtos2(struct sockaddr_storage *addr, char *addr_str)
208
if (addr->ss_family == AF_INET6) {
209
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) addr;
210
addr_ip = &addr6->sin6_addr;
212
struct sockaddr_in *addr4 = (struct sockaddr_in *) addr;
213
addr_ip = &addr4->sin_addr;
216
if (!inet_ntop(addr->ss_family, addr_ip, addr_str, INET6_ADDRSTRLEN))
223
inet_sockaddrtos(struct sockaddr_storage *addr)
225
static char addr_str[INET6_ADDRSTRLEN];
226
inet_sockaddrtos2(addr, addr_str);
231
inet_sockaddrport(struct sockaddr_storage *addr)
235
if (addr->ss_family == AF_INET6) {
236
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) addr;
237
port = addr6->sin6_port;
239
struct sockaddr_in *addr4 = (struct sockaddr_in *) addr;
240
port = addr4->sin_port;
247
inet_sockaddrip4(struct sockaddr_storage *addr)
249
if (addr->ss_family != AF_INET)
252
return ((struct sockaddr_in *) addr)->sin_addr.s_addr;
256
inet_sockaddrip6(struct sockaddr_storage *addr, struct in6_addr *ip6)
258
if (addr->ss_family != AF_INET6)
261
*ip6 = ((struct sockaddr_in6 *) addr)->sin6_addr;
163
267
* IP string to network representation
164
268
* Highly inspired from Paul Vixie code.