ea2ae3ff272154be0e0fb5cd13451cc645f87e58
[darkstat.git] / addr.h
1 /* darkstat 3
2  * copyright (c) 2011 Emil Mikulic.
3  *
4  * addr.h: compound IPv4/IPv6 address
5  * (because struct sockaddr_storage stores too much)
6  *
7  * You may use, modify and redistribute this file under the terms of the
8  * GNU General Public License version 2. (see COPYING.GPL)
9  */
10 #ifndef __DARKSTAT_ADDR_H
11 #define __DARKSTAT_ADDR_H
12
13 #include <sys/socket.h> /* for AF_INET6 */
14 #include <netinet/in.h> /* for in6_addr */
15
16 struct addr {
17    union {
18       in_addr_t v4;
19       struct in6_addr v6;
20    } ip;
21    enum { IPv4 = 4, IPv6 = 6 } family;
22 };
23
24 int addr_equal(const struct addr * const a, const struct addr * const b);
25 const char *addr_to_str(const struct addr * const a);
26 void addr_mask(struct addr *a, const struct addr * const mask);
27 int addr_inside(const struct addr * const a,
28    const struct addr * const net, const struct addr * const mask);
29
30 /* Returns 0 on success, gai_strerror() code otherwise. */
31 int str_to_addr(const char *s, struct addr *a);
32
33 #endif
34 /* vim:set ts=3 sw=3 tw=78 et: */