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