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 UTIL_H 23 #define UTIL_H 24 25 /* defines */ 26 #define ADD 0 27 #define SUB 1 28 29 struct p_broker_timers { 30 time_t last_fail; 31 int retry_interval; 32 }; 33 34 /* prototypes */ 35 extern void setnonblocking(int); 36 extern void setblocking(int); 37 extern int daemonize(); 38 extern char *copy_argv(register char **); 39 extern char *extract_token(char **, int); 40 extern char *extract_plugin_name(char **); 41 extern void trim_spaces(char *); 42 extern void trim_all_spaces(char *); 43 extern void strip_quotes(char *); 44 extern void string_add_newline(char *); 45 extern int isblankline(char *); 46 extern int iscomment(char *); 47 extern int check_not_valid_char(char *, char *, int); 48 extern time_t roundoff_time(time_t, char *); 49 extern time_t calc_monthly_timeslot(time_t, int, int); 50 extern void write_pid_file(char *); 51 extern void write_pid_file_plugin(char *, char *, char *); 52 extern void remove_pid_file(char *); 53 extern int sanitize_buf_net(char *, char *, int); 54 extern int sanitize_buf(char *); 55 extern void mark_columns(char *); 56 extern int Setsocksize(int, int, int, void *, socklen_t); 57 extern void *map_shared(void *, size_t, int, int, int, off_t); 58 extern void lower_string(char *); 59 extern void evaluate_sums(u_int64_t *, u_int64_t *, char *, char *); 60 extern void stop_all_childs(); 61 extern int file_lock(int); 62 extern int file_unlock(int); 63 extern void pm_strftime(char *, int, char *, const time_t *, int); 64 extern void pm_strftime_same(char *, int, char *, const time_t *, int); 65 extern void insert_rfc3339_timezone(char *, int, const struct tm *); 66 extern void append_rfc3339_timezone(char *, int, const struct tm *); 67 extern int read_SQLquery_from_file(char *, char *, int); 68 extern void stick_bosbit(u_char *); 69 extern int check_bosbit(u_char *); 70 extern u_int32_t decode_mpls_label(u_char *); 71 extern void encode_mpls_label(char *, u_int32_t); 72 extern int timeval_cmp(struct timeval *, struct timeval *); 73 extern void exit_all(int); 74 extern void exit_plugin(int); 75 extern void exit_gracefully(int); 76 extern void reset_tag_label_status(struct packet_ptrs_vector *); 77 extern void reset_net_status(struct packet_ptrs *); 78 extern void reset_net_status_v(struct packet_ptrs_vector *); 79 extern void reset_shadow_status(struct packet_ptrs_vector *); 80 extern void reset_fallback_status(struct packet_ptrs *); 81 extern void set_sampling_table(struct packet_ptrs_vector *, u_char *); 82 extern void set_shadow_status(struct packet_ptrs *); 83 extern void set_default_preferences(struct configuration *); 84 extern FILE *open_output_file(char *, char *, int); 85 extern void open_pcap_savefile(struct pm_pcap_device *, char *); 86 extern void pm_pcap_device_initialize(struct pm_pcap_devices *); 87 extern void link_latest_output_file(char *, char *); 88 extern void close_output_file(FILE *); 89 extern int handle_dynname_internal_strings(char *, int, char *, struct primitives_ptrs *, int); 90 extern int handle_dynname_internal_strings_same(char *, int, char *, struct primitives_ptrs *, int); 91 extern int have_dynname_nontime(char *); 92 extern void escape_ip_uscores(char *); 93 extern int sql_history_to_secs(int, int); 94 extern void *pm_malloc(size_t); 95 extern void load_allow_file(char *, struct hosts_table *); 96 extern int check_allow(struct hosts_table *, struct sockaddr *); 97 extern int BTA_find_id(struct id_table *, struct packet_ptrs *, pm_id_t *, pm_id_t *); 98 extern void calc_refresh_timeout(time_t, time_t, int *); 99 extern void calc_refresh_timeout_sec(time_t, time_t, int *); 100 extern int load_tags(char *, struct pretag_filter *, char *); 101 extern int load_labels(char *, struct pretag_label_filter *, char *); 102 extern int evaluate_tags(struct pretag_filter *, pm_id_t); 103 extern int evaluate_labels(struct pretag_label_filter *, pt_label_t *); 104 extern char *write_sep(char *, int *); 105 extern void version_daemon(char *); 106 extern void set_truefalse_nonzero(int *); 107 extern char *ip_proto_print(u_int8_t, char *, int); 108 extern void parse_hostport(const char *, struct sockaddr *, socklen_t *); 109 extern bool is_prime(u_int32_t); 110 extern u_int32_t next_prime(u_int32_t); 111 extern char *null_terminate(char *, int); 112 extern char *uint_print(void *, int, int); 113 extern void reload_logs(); 114 extern int is_empty_256b(void *, int); 115 extern ssize_t pm_recv(int, void *, size_t, int, unsigned int); 116 117 extern char *compose_json_str(void *); 118 extern void write_and_free_json(FILE *, void *); 119 extern void add_writer_name_and_pid_json(void *, char *, pid_t); 120 extern void write_file_binary(FILE *, void *, size_t); 121 122 extern void compose_timestamp(char *, int, struct timeval *, int, int, int, int); 123 124 extern void print_primitives(int, char *); 125 extern int mkdir_multilevel(const char *, int, uid_t, gid_t); 126 extern char bin_to_hex(int); 127 extern int hex_to_bin(int); 128 extern int serialize_hex(const u_char *, u_char *, int); 129 extern int serialize_bin(const u_char *, u_char *, int); 130 131 extern void set_primptrs_funcs(struct extra_primitives *); 132 extern void primptrs_set_bgp(u_char *, struct extra_primitives *, struct primitives_ptrs *); 133 extern void primptrs_set_lbgp(u_char *, struct extra_primitives *, struct primitives_ptrs *); 134 extern void primptrs_set_nat(u_char *, struct extra_primitives *, struct primitives_ptrs *); 135 extern void primptrs_set_mpls(u_char *, struct extra_primitives *, struct primitives_ptrs *); 136 extern void primptrs_set_tun(u_char *, struct extra_primitives *, struct primitives_ptrs *); 137 extern void primptrs_set_custom(u_char *, struct extra_primitives *, struct primitives_ptrs *); 138 extern void primptrs_set_extras(u_char *, struct extra_primitives *, struct primitives_ptrs *); 139 extern void primptrs_set_vlen_hdr(u_char *, struct extra_primitives *, struct primitives_ptrs *); 140 141 extern int custom_primitives_vlen(struct custom_primitives_ptrs *); 142 extern void custom_primitives_reconcile(struct custom_primitives_ptrs *, struct custom_primitives *); 143 extern void custom_primitive_header_print(char *, int, struct custom_primitive_ptrs *, int); 144 extern void custom_primitive_value_print(char *, int, u_char *, struct custom_primitive_ptrs *, int); 145 extern void custom_primitives_debug(void *, void *); 146 147 extern unsigned char *vlen_prims_copy(struct pkt_vlen_hdr_primitives *); 148 extern void vlen_prims_init(struct pkt_vlen_hdr_primitives *, int); 149 extern void vlen_prims_free(struct pkt_vlen_hdr_primitives *); 150 extern int vlen_prims_cmp(struct pkt_vlen_hdr_primitives *, struct pkt_vlen_hdr_primitives *); 151 extern void vlen_prims_get(struct pkt_vlen_hdr_primitives *, pm_cfgreg_t, char **); 152 extern void vlen_prims_debug(struct pkt_vlen_hdr_primitives *); 153 extern void vlen_prims_insert(struct pkt_vlen_hdr_primitives *, pm_cfgreg_t, int, u_char *, int); 154 extern int vlen_prims_delete(struct pkt_vlen_hdr_primitives *, pm_cfgreg_t); 155 156 extern void hash_init_key(pm_hash_key_t *); 157 extern int hash_init_serial(pm_hash_serial_t *, u_int16_t); 158 extern int hash_alloc_key(pm_hash_key_t *, u_int16_t); 159 extern int hash_dup_key(pm_hash_key_t *, pm_hash_key_t *); 160 extern void hash_destroy_key(pm_hash_key_t *); 161 extern void hash_destroy_serial(pm_hash_serial_t *); 162 extern void hash_serial_set_off(pm_hash_serial_t *, u_int16_t); 163 extern void hash_serial_append(pm_hash_serial_t *, char *, u_int16_t, int); 164 extern pm_hash_key_t *hash_serial_get_key(pm_hash_serial_t *); 165 extern u_int16_t hash_serial_get_off(pm_hash_serial_t *); 166 extern u_int16_t hash_key_get_len(pm_hash_key_t *); 167 extern u_char *hash_key_get_val(pm_hash_key_t *); 168 extern int hash_key_cmp(pm_hash_key_t *, pm_hash_key_t *); 169 170 extern void dump_writers_init(); 171 extern void dump_writers_count(); 172 extern u_int32_t dump_writers_get_flags(); 173 extern u_int16_t dump_writers_get_active(); 174 extern u_int16_t dump_writers_get_max(); 175 extern int dump_writers_add(pid_t); 176 177 extern int pm_scandir(const char *, struct dirent ***, int (*select)(const struct dirent *), int (*compar)(const void *, const void *)); 178 extern void pm_scandir_free(struct dirent ***, int); 179 extern int pm_alphasort(const void *, const void *); 180 181 extern void *pm_tsearch(const void *, void **, int (*compar)(const void *, const void *), size_t); 182 extern void pm_tdestroy(void **, void (*free_node)(void *)); 183 184 extern int delete_line_from_file(int, char *); 185 186 extern void generate_random_string(char *, const int); 187 188 extern void P_broker_timers_set_last_fail(struct p_broker_timers *, time_t); 189 extern void P_broker_timers_set_retry_interval(struct p_broker_timers *, int); 190 extern void P_broker_timers_unset_last_fail(struct p_broker_timers *); 191 extern time_t P_broker_timers_get_last_fail(struct p_broker_timers *); 192 extern int P_broker_timers_get_retry_interval(struct p_broker_timers *); 193 extern time_t P_broker_timers_get_last_fail(struct p_broker_timers *); 194 195 extern primptrs_func primptrs_funcs[PRIMPTRS_FUNCS_N]; 196 197 #endif //UTIL_H 198