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