Implement addr_mask and addr_inside and tests.
[darkstat] / 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 <arpa/inet.h>
14
15 struct addr {
16 union {
17 in_addr_t v4;
18 struct in6_addr v6;
19 } ip;
20 enum { IPv4 = 4, IPv6 = 6 } family;
21 };
22
23 int addr_equal(const struct addr * const a, const struct addr * const b);
24 const char *addr_to_str(const struct addr * const a);
25 void addr_mask(struct addr *a, const struct addr * const mask);
26 int addr_inside(const struct addr * const a,
27 const struct addr * const net, const struct addr * const mask);
28
29 /* Returns 0 on success, gai_strerror() code otherwise. */
30 int str_to_addr(const char *s, struct addr *a);
31
32 #endif
33 /* vim:set ts=3 sw=3 tw=78 et: */