Commit | Line | Data |
---|---|---|
794f2398 SE |
1 | /* Useful functions for dealing with collections of IP addresses */ |
2 | ||
7138d0c5 SE |
3 | #ifndef ipaddr_h |
4 | #define ipaddr_h | |
5 | ||
794f2398 SE |
6 | struct subnet { |
7 | uint32_t prefix; | |
8 | uint32_t mask; | |
9 | uint32_t len; | |
10 | }; | |
11 | ||
12 | struct subnet_list { | |
13 | uint32_t entries; | |
14 | uint32_t alloc; | |
15 | struct subnet *list; | |
16 | }; | |
17 | ||
18 | struct iprange { | |
19 | uint32_t a,b; | |
20 | }; | |
21 | ||
22 | struct ipset { | |
23 | uint32_t l; /* Number of entries in list */ | |
24 | uint32_t a; /* Allocated space in list */ | |
25 | struct iprange *d; | |
26 | }; | |
7138d0c5 | 27 | |
794f2398 SE |
28 | extern struct subnet_list *subnet_list_new(void); |
29 | extern void subnet_list_free(struct subnet_list *a); | |
30 | extern void subnet_list_append(struct subnet_list *a, uint32_t prefix, | |
31 | uint32_t len); | |
32 | ||
33 | static inline bool_t subnet_match(struct subnet s, uint32_t address) | |
34 | { | |
35 | return (s.prefix==(address&s.mask)); | |
36 | } | |
37 | ||
38 | extern struct ipset *ipset_new(void); | |
39 | extern void ipset_free(struct ipset *a); | |
40 | extern struct ipset *ipset_from_subnet(struct subnet s); | |
41 | extern struct ipset *ipset_from_subnet_list(struct subnet_list *l); | |
42 | extern struct ipset *ipset_union(struct ipset *a, struct ipset *b); | |
43 | extern struct ipset *ipset_intersection(struct ipset *a, struct ipset *b); | |
44 | extern struct ipset *ipset_complement(struct ipset *a); | |
45 | extern struct ipset *ipset_subtract(struct ipset *a, struct ipset *b); | |
46 | extern bool_t ipset_is_empty(struct ipset *a); | |
47 | extern bool_t ipset_contains_addr(struct ipset *a, uint32_t addr); | |
48 | extern bool_t ipset_is_subset(struct ipset *super, struct ipset *sub); | |
49 | extern struct subnet_list *ipset_to_subnet_list(struct ipset *is); | |
7138d0c5 SE |
50 | |
51 | extern string_t ipaddr_to_string(uint32_t addr); | |
794f2398 SE |
52 | extern string_t subnet_to_string(struct subnet sn); |
53 | ||
54 | extern struct ipset *string_list_to_ipset(list_t *l,struct cloc loc, | |
fe5e9cc4 | 55 | cstring_t module, cstring_t param); |
794f2398 | 56 | |
fe5e9cc4 | 57 | extern uint32_t string_item_to_ipaddr(item_t *i, cstring_t desc); |
7138d0c5 SE |
58 | |
59 | #endif /* ipaddr_h */ |