1 /*
2     pmacct (Promiscuous mode IP Accounting package)
3     pmacct is Copyright (C) 2003-2020 by Paolo Lucente
4 */
5 
6 /*
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16 
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 */
21 
22 #ifndef ADDR_H
23 #define ADDR_H
24 
25 /* defines */
26 #if defined IM_LITTLE_ENDIAN
27 #define IS_IPV4_MULTICAST(a) ((((u_int32_t)(a)) & 0x000000f0) == 0x000000e0)
28 #else
29 #define IS_IPV4_MULTICAST(a) ((((u_int32_t)(a)) & 0xf0000000) == 0xe0000000)
30 #endif
31 #define IS_IPV6_MULTICAST(a) (((const uint8_t *) (a))[0] == 0xff)
32 
33 /* prototypes */
34 extern unsigned int str_to_addr(const char *, struct host_addr *);
35 extern unsigned int addr_to_str(char *, const struct host_addr *);
36 extern unsigned int addr_mask_to_str(char *, int, const struct host_addr *, const struct host_mask *);
37 extern unsigned int str_to_addr_mask(const char *, struct host_addr *, struct host_mask *);
38 extern unsigned int addr_to_sa(struct sockaddr *, struct host_addr *, u_int16_t);
39 extern unsigned int sa_to_addr(struct sockaddr *, struct host_addr *, u_int16_t *);
40 extern int sa_addr_cmp(struct sockaddr *, struct host_addr *);
41 extern int sa_port_cmp(struct sockaddr *, u_int16_t);
42 extern int host_addr_cmp(struct host_addr *, struct host_addr *);
43 extern int host_addr_cmp2(struct host_addr *, struct host_addr *);
44 extern int host_addr_mask_sa_cmp(struct host_addr *, struct host_mask *, struct sockaddr *);
45 extern int host_addr_mask_cmp(struct host_addr *, struct host_mask *, struct host_addr *);
46 extern unsigned int raw_to_sa(struct sockaddr *, u_char *, u_int16_t port, u_int8_t);
47 extern unsigned int raw_to_addr(struct host_addr *, u_char *, u_int8_t);
48 extern unsigned int sa_to_str(char *, int, const struct sockaddr *);
49 extern unsigned int sa_to_port(int *, const struct sockaddr *);
50 extern void *pm_htonl6(void *);
51 extern void *pm_ntohl6(void *);
52 extern u_int64_t pm_htonll(u_int64_t);
53 extern u_int64_t pm_ntohll(u_int64_t);
54 extern int ip6_addr_cmp(void *, void *);
55 extern void ip6_addr_cpy(void *, void *);
56 extern void ip6_addr_32bit_cpy(void *, void *, int, int, int);
57 extern void etheraddr_string(const u_char *, char *);
58 extern int string_etheraddr(const char *, u_char *);
59 extern int is_multicast(struct host_addr *);
60 extern int is_any(struct host_addr *);
61 extern void clean_sin_addr(struct sockaddr *);
62 extern unsigned int label_to_addr(const char *, struct host_addr *, int);
63 extern u_int8_t etype_to_af(u_int16_t);
64 extern u_int16_t af_to_etype(u_int8_t);
65 extern u_int32_t addr_hash(struct host_addr *, u_int32_t);
66 extern u_int32_t addr_port_hash(struct host_addr *, u_int16_t, u_int32_t);
67 extern u_int16_t sa_has_family(struct sockaddr *);
68 
69 extern void ipv4_to_ipv4_mapped(struct sockaddr_storage *);
70 extern void ipv4_mapped_to_ipv4(struct sockaddr_storage *);
71 
72 #endif //ADDR_H
73