1 /*
2 pmacct (Promiscuous mode IP Accounting package)
3 pmacct is Copyright (C) 2003-2019 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 /*
23 PG_* functions are used only by PostgreSQL plugin;
24 MY_* functions are used only by MySQL plugin;
25 count_* functions are used by more than one plugin;
26 fake_* functions are used to supply static zero-filled values;
27 */
28
29 /* includes */
30 #include "pmacct.h"
31 #include "addr.h"
32 #include "pmacct-data.h"
33 #include "plugin_hooks.h"
34 #include "sql_common.h"
35 #include "ip_flow.h"
36 #include "classifier.h"
37 #include "bgp/bgp.h"
38 #include "rpki/rpki.h"
39 #if defined (WITH_NDPI)
40 #include "ndpi/ndpi.h"
41 #endif
42
43 static const char fake_mac[] = "0:0:0:0:0:0";
44 static const char fake_host[] = "0.0.0.0";
45 static const char fake_as[] = "0";
46 static const char fake_comm[] = "";
47 static const char fake_as_path[] = "";
48
49 /* Functions */
50 #if defined (HAVE_L2)
count_src_mac_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)51 void count_src_mac_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
52 {
53 char sbuf[18];
54 u_int8_t ubuf[ETH_ADDR_LEN];
55
56 memcpy(ubuf, cache_elem->primitives.eth_shost, ETH_ADDR_LEN);
57 etheraddr_string(ubuf, sbuf);
58 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, sbuf);
59 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
60 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
61 *ptr_where += strlen(*ptr_where);
62 *ptr_values += strlen(*ptr_values);
63 }
64
count_dst_mac_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)65 void count_dst_mac_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
66 {
67 char sbuf[18];
68 u_int8_t ubuf[ETH_ADDR_LEN];
69
70 memcpy(ubuf, cache_elem->primitives.eth_dhost, ETH_ADDR_LEN);
71 etheraddr_string(ubuf, sbuf);
72 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, sbuf);
73 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
74 *ptr_where += strlen(*ptr_where);
75 *ptr_values += strlen(*ptr_values);
76 }
77
count_vlan_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)78 void count_vlan_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
79 {
80 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.vlan_id);
81 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.vlan_id);
82 *ptr_where += strlen(*ptr_where);
83 *ptr_values += strlen(*ptr_values);
84 }
85
count_cos_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)86 void count_cos_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
87 {
88 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.cos);
89 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.cos);
90 *ptr_where += strlen(*ptr_where);
91 *ptr_values += strlen(*ptr_values);
92 }
93
count_etype_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)94 void count_etype_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
95 {
96 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.etype);
97 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.etype);
98 *ptr_where += strlen(*ptr_where);
99 *ptr_values += strlen(*ptr_values);
100 }
101 #endif
102
count_src_host_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)103 void count_src_host_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
104 {
105 char ptr[INET6_ADDRSTRLEN];
106
107 addr_to_str(ptr, &cache_elem->primitives.src_ip);
108 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
109 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
110 *ptr_where += strlen(*ptr_where);
111 *ptr_values += strlen(*ptr_values);
112 }
113
count_src_net_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)114 void count_src_net_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
115 {
116 char ptr[INET6_ADDRSTRLEN];
117
118 addr_to_str(ptr, &cache_elem->primitives.src_net);
119 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
120 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
121 *ptr_where += strlen(*ptr_where);
122 *ptr_values += strlen(*ptr_values);
123 }
124
count_src_as_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)125 void count_src_as_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
126 {
127 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_as);
128 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_as);
129 *ptr_where += strlen(*ptr_where);
130 *ptr_values += strlen(*ptr_values);
131 }
132
count_dst_host_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)133 void count_dst_host_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
134 {
135 char ptr[INET6_ADDRSTRLEN];
136
137 addr_to_str(ptr, &cache_elem->primitives.dst_ip);
138 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
139 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
140 *ptr_where += strlen(*ptr_where);
141 *ptr_values += strlen(*ptr_values);
142 }
143
count_dst_net_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)144 void count_dst_net_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
145 {
146 char ptr[INET6_ADDRSTRLEN];
147
148 addr_to_str(ptr, &cache_elem->primitives.dst_net);
149 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
150 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
151 *ptr_where += strlen(*ptr_where);
152 *ptr_values += strlen(*ptr_values);
153 }
154
count_dst_as_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)155 void count_dst_as_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
156 {
157 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_as);
158 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_as);
159 *ptr_where += strlen(*ptr_where);
160 *ptr_values += strlen(*ptr_values);
161 }
162
count_in_iface_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)163 void count_in_iface_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
164 {
165 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.ifindex_in);
166 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.ifindex_in);
167 *ptr_where += strlen(*ptr_where);
168 *ptr_values += strlen(*ptr_values);
169 }
170
count_out_iface_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)171 void count_out_iface_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
172 {
173 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.ifindex_out);
174 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.ifindex_out);
175 *ptr_where += strlen(*ptr_where);
176 *ptr_values += strlen(*ptr_values);
177 }
178
count_src_nmask_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)179 void count_src_nmask_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
180 {
181 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_nmask);
182 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_nmask);
183 *ptr_where += strlen(*ptr_where);
184 *ptr_values += strlen(*ptr_values);
185 }
186
count_dst_nmask_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)187 void count_dst_nmask_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
188 {
189 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_nmask);
190 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_nmask);
191 *ptr_where += strlen(*ptr_where);
192 *ptr_values += strlen(*ptr_values);
193 }
194
195 #if defined WITH_GEOIP
count_src_host_country_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)196 void count_src_host_country_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
197 {
198 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, GeoIP_code_by_id(cache_elem->primitives.src_ip_country.id));
199 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, GeoIP_code_by_id(cache_elem->primitives.src_ip_country.id));
200 *ptr_where += strlen(*ptr_where);
201 *ptr_values += strlen(*ptr_values);
202 }
203
count_dst_host_country_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)204 void count_dst_host_country_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
205 {
206 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, GeoIP_code_by_id(cache_elem->primitives.dst_ip_country.id));
207 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, GeoIP_code_by_id(cache_elem->primitives.dst_ip_country.id));
208 *ptr_where += strlen(*ptr_where);
209 *ptr_values += strlen(*ptr_values);
210 }
211 #endif
212 #if defined WITH_GEOIPV2
count_src_host_country_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)213 void count_src_host_country_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
214 {
215 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_ip_country.str);
216 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_ip_country.str);
217 *ptr_where += strlen(*ptr_where);
218 *ptr_values += strlen(*ptr_values);
219 }
220
count_dst_host_country_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)221 void count_dst_host_country_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
222 {
223 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_ip_country.str);
224 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_ip_country.str);
225 *ptr_where += strlen(*ptr_where);
226 *ptr_values += strlen(*ptr_values);
227 }
228
count_src_host_pocode_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)229 void count_src_host_pocode_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
230 {
231 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_ip_pocode.str);
232 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_ip_pocode.str);
233 *ptr_where += strlen(*ptr_where);
234 *ptr_values += strlen(*ptr_values);
235 }
236
count_dst_host_pocode_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)237 void count_dst_host_pocode_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
238 {
239 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_ip_pocode.str);
240 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_ip_pocode.str);
241 *ptr_where += strlen(*ptr_where);
242 *ptr_values += strlen(*ptr_values);
243 }
244
count_src_host_coords_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)245 void count_src_host_coords_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
246 {
247 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_ip_lat, cache_elem->primitives.src_ip_lon);
248 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_ip_lat, cache_elem->primitives.src_ip_lon);
249 *ptr_where += strlen(*ptr_where);
250 *ptr_values += strlen(*ptr_values);
251 }
252
count_dst_host_coords_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)253 void count_dst_host_coords_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
254 {
255 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_ip_lat, cache_elem->primitives.dst_ip_lon);
256 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_ip_lat, cache_elem->primitives.dst_ip_lon);
257 *ptr_where += strlen(*ptr_where);
258 *ptr_values += strlen(*ptr_values);
259 }
260 #endif
count_sampling_rate_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)261 void count_sampling_rate_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
262 {
263 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.sampling_rate);
264 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.sampling_rate);
265 *ptr_where += strlen(*ptr_where);
266 *ptr_values += strlen(*ptr_values);
267 }
268
count_sampling_direction_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)269 void count_sampling_direction_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
270 {
271 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.sampling_direction);
272 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.sampling_direction);
273 *ptr_where += strlen(*ptr_where);
274 *ptr_values += strlen(*ptr_values);
275 }
276
count_post_nat_src_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)277 void count_post_nat_src_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
278 {
279 char ptr[INET6_ADDRSTRLEN];
280
281 addr_to_str(ptr, &cache_elem->pnat->post_nat_src_ip);
282 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
283 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
284 *ptr_where += strlen(*ptr_where);
285 *ptr_values += strlen(*ptr_values);
286 }
287
count_post_nat_dst_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)288 void count_post_nat_dst_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
289 {
290 char ptr[INET6_ADDRSTRLEN];
291
292 addr_to_str(ptr, &cache_elem->pnat->post_nat_dst_ip);
293 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
294 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
295 *ptr_where += strlen(*ptr_where);
296 *ptr_values += strlen(*ptr_values);
297 }
298
count_post_nat_src_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)299 void count_post_nat_src_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
300 {
301 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->post_nat_src_port);
302 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->post_nat_src_port);
303 *ptr_where += strlen(*ptr_where);
304 *ptr_values += strlen(*ptr_values);
305 }
306
count_post_nat_dst_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)307 void count_post_nat_dst_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
308 {
309 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->post_nat_dst_port);
310 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->post_nat_dst_port);
311 *ptr_where += strlen(*ptr_where);
312 *ptr_values += strlen(*ptr_values);
313 }
314
count_nat_event_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)315 void count_nat_event_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
316 {
317 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->nat_event);
318 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->nat_event);
319 *ptr_where += strlen(*ptr_where);
320 *ptr_values += strlen(*ptr_values);
321 }
322
count_mpls_label_top_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)323 void count_mpls_label_top_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
324 {
325 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pmpls->mpls_label_top);
326 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pmpls->mpls_label_top);
327 *ptr_where += strlen(*ptr_where);
328 *ptr_values += strlen(*ptr_values);
329 }
330
count_mpls_label_bottom_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)331 void count_mpls_label_bottom_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
332 {
333 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pmpls->mpls_label_bottom);
334 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pmpls->mpls_label_bottom);
335 *ptr_where += strlen(*ptr_where);
336 *ptr_values += strlen(*ptr_values);
337 }
338
count_mpls_stack_depth_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)339 void count_mpls_stack_depth_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
340 {
341 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pmpls->mpls_stack_depth);
342 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pmpls->mpls_stack_depth);
343 *ptr_where += strlen(*ptr_where);
344 *ptr_values += strlen(*ptr_values);
345 }
346
count_tunnel_src_mac_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)347 void count_tunnel_src_mac_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
348 {
349 char sbuf[18];
350 u_int8_t ubuf[ETH_ADDR_LEN];
351
352 memcpy(ubuf, cache_elem->ptun->tunnel_eth_shost, ETH_ADDR_LEN);
353 etheraddr_string(ubuf, sbuf);
354 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, sbuf);
355 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
356 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
357 *ptr_where += strlen(*ptr_where);
358 *ptr_values += strlen(*ptr_values);
359 }
360
count_tunnel_dst_mac_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)361 void count_tunnel_dst_mac_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
362 {
363 char sbuf[18];
364 u_int8_t ubuf[ETH_ADDR_LEN];
365
366 memcpy(ubuf, cache_elem->ptun->tunnel_eth_dhost, ETH_ADDR_LEN);
367 etheraddr_string(ubuf, sbuf);
368 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, sbuf);
369 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, sbuf);
370 *ptr_where += strlen(*ptr_where);
371 *ptr_values += strlen(*ptr_values);
372 }
373
count_tunnel_src_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)374 void count_tunnel_src_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
375 {
376 char ptr[INET6_ADDRSTRLEN];
377
378 addr_to_str(ptr, &cache_elem->ptun->tunnel_src_ip);
379 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
380 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
381 *ptr_where += strlen(*ptr_where);
382 *ptr_values += strlen(*ptr_values);
383 }
384
count_tunnel_dst_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)385 void count_tunnel_dst_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
386 {
387 char ptr[INET6_ADDRSTRLEN];
388
389 addr_to_str(ptr, &cache_elem->ptun->tunnel_dst_ip);
390 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
391 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
392 *ptr_where += strlen(*ptr_where);
393 *ptr_values += strlen(*ptr_values);
394 }
395
MY_count_tunnel_ip_proto_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)396 void MY_count_tunnel_ip_proto_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
397 {
398 char proto[PROTO_NUM_STRLEN];
399
400 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ip_proto_print(cache_elem->ptun->tunnel_proto, proto, PROTO_NUM_STRLEN));
401 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ip_proto_print(cache_elem->ptun->tunnel_proto, proto, PROTO_NUM_STRLEN));
402
403 *ptr_where += strlen(*ptr_where);
404 *ptr_values += strlen(*ptr_values);
405 }
406
PG_count_tunnel_ip_proto_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)407 void PG_count_tunnel_ip_proto_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
408 {
409 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->ptun->tunnel_proto);
410 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->ptun->tunnel_proto);
411 *ptr_where += strlen(*ptr_where);
412 *ptr_values += strlen(*ptr_values);
413 }
414
count_tunnel_ip_tos_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)415 void count_tunnel_ip_tos_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
416 {
417 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->ptun->tunnel_tos);
418 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->ptun->tunnel_tos);
419 *ptr_where += strlen(*ptr_where);
420 *ptr_values += strlen(*ptr_values);
421 }
422
count_tunnel_src_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)423 void count_tunnel_src_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
424 {
425 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->ptun->tunnel_src_port);
426 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->ptun->tunnel_src_port);
427 *ptr_where += strlen(*ptr_where);
428 *ptr_values += strlen(*ptr_values);
429 }
430
count_tunnel_dst_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)431 void count_tunnel_dst_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
432 {
433 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->ptun->tunnel_dst_port);
434 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->ptun->tunnel_dst_port);
435 *ptr_where += strlen(*ptr_where);
436 *ptr_values += strlen(*ptr_values);
437 }
438
count_vxlan_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)439 void count_vxlan_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
440 {
441 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->ptun->tunnel_id);
442 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->ptun->tunnel_id);
443 *ptr_where += strlen(*ptr_where);
444 *ptr_values += strlen(*ptr_values);
445 }
446
PG_copy_count_timestamp_start_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)447 void PG_copy_count_timestamp_start_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
448 {
449 static char time_str[VERYSHORTBUFLEN];
450
451 pm_strftime(time_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->pnat->timestamp_start.tv_sec, config.timestamps_utc);
452
453 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_start.tv_sec); // dummy
454 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, time_str);
455 *ptr_where += strlen(*ptr_where);
456 *ptr_values += strlen(*ptr_values);
457 }
458
count_timestamp_start_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)459 void count_timestamp_start_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
460 {
461 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_start.tv_sec);
462 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_start.tv_sec);
463 *ptr_where += strlen(*ptr_where);
464 *ptr_values += strlen(*ptr_values);
465 }
466
count_timestamp_start_residual_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)467 void count_timestamp_start_residual_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
468 {
469 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_start.tv_usec);
470 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_start.tv_usec);
471 *ptr_where += strlen(*ptr_where);
472 *ptr_values += strlen(*ptr_values);
473 }
474
PG_copy_count_timestamp_end_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)475 void PG_copy_count_timestamp_end_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
476 {
477 static char time_str[VERYSHORTBUFLEN];
478
479 pm_strftime(time_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->pnat->timestamp_end.tv_sec, config.timestamps_utc);
480
481 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_end.tv_sec); // dummy
482 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, time_str);
483 *ptr_where += strlen(*ptr_where);
484 *ptr_values += strlen(*ptr_values);
485 }
486
count_timestamp_end_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)487 void count_timestamp_end_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
488 {
489 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_end.tv_sec);
490 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_end.tv_sec);
491 *ptr_where += strlen(*ptr_where);
492 *ptr_values += strlen(*ptr_values);
493 }
494
count_timestamp_end_residual_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)495 void count_timestamp_end_residual_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
496 {
497 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_end.tv_usec);
498 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_end.tv_usec);
499 *ptr_where += strlen(*ptr_where);
500 *ptr_values += strlen(*ptr_values);
501 }
502
PG_copy_count_timestamp_arrival_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)503 void PG_copy_count_timestamp_arrival_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
504 {
505 static char time_str[VERYSHORTBUFLEN];
506
507 pm_strftime(time_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->pnat->timestamp_arrival.tv_sec, config.timestamps_utc);
508
509 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_arrival.tv_sec); // dummy
510 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, time_str);
511 *ptr_where += strlen(*ptr_where);
512 *ptr_values += strlen(*ptr_values);
513 }
514
count_timestamp_arrival_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)515 void count_timestamp_arrival_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
516 {
517 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_arrival.tv_sec);
518 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_arrival.tv_sec);
519 *ptr_where += strlen(*ptr_where);
520 *ptr_values += strlen(*ptr_values);
521 }
522
count_timestamp_arrival_residual_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)523 void count_timestamp_arrival_residual_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
524 {
525 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pnat->timestamp_arrival.tv_usec);
526 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pnat->timestamp_arrival.tv_usec);
527 *ptr_where += strlen(*ptr_where);
528 *ptr_values += strlen(*ptr_values);
529 }
530
PG_copy_count_timestamp_min_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)531 void PG_copy_count_timestamp_min_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
532 {
533 static char time_str[VERYSHORTBUFLEN];
534
535 pm_strftime(time_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->stitch->timestamp_min.tv_sec, config.timestamps_utc);
536
537 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_min.tv_sec); // dummy
538 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, time_str);
539 *ptr_where += strlen(*ptr_where);
540 *ptr_values += strlen(*ptr_values);
541 }
542
count_timestamp_min_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)543 void count_timestamp_min_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
544 {
545 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_min.tv_sec);
546 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->stitch->timestamp_min.tv_sec);
547 *ptr_where += strlen(*ptr_where);
548 *ptr_values += strlen(*ptr_values);
549 }
550
count_timestamp_min_residual_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)551 void count_timestamp_min_residual_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
552 {
553 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_min.tv_usec);
554 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->stitch->timestamp_min.tv_usec);
555 *ptr_where += strlen(*ptr_where);
556 *ptr_values += strlen(*ptr_values);
557 }
558
PG_copy_count_timestamp_max_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)559 void PG_copy_count_timestamp_max_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
560 {
561 static char time_str[VERYSHORTBUFLEN];
562
563 pm_strftime(time_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->stitch->timestamp_max.tv_sec, config.timestamps_utc);
564
565 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_max.tv_sec); // dummy
566 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, time_str);
567 *ptr_where += strlen(*ptr_where);
568 *ptr_values += strlen(*ptr_values);
569 }
570
count_timestamp_max_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)571 void count_timestamp_max_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
572 {
573 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_max.tv_sec);
574 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->stitch->timestamp_max.tv_sec);
575 *ptr_where += strlen(*ptr_where);
576 *ptr_values += strlen(*ptr_values);
577 }
578
count_timestamp_max_residual_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)579 void count_timestamp_max_residual_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
580 {
581 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->stitch->timestamp_max.tv_usec);
582 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->stitch->timestamp_max.tv_usec);
583 *ptr_where += strlen(*ptr_where);
584 *ptr_values += strlen(*ptr_values);
585 }
586
count_export_proto_seqno_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)587 void count_export_proto_seqno_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
588 {
589 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.export_proto_seqno);
590 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.export_proto_seqno);
591 *ptr_where += strlen(*ptr_where);
592 *ptr_values += strlen(*ptr_values);
593 }
594
count_export_proto_version_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)595 void count_export_proto_version_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
596 {
597 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.export_proto_version);
598 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.export_proto_version);
599 *ptr_where += strlen(*ptr_where);
600 *ptr_values += strlen(*ptr_values);
601 }
602
count_export_proto_sysid_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)603 void count_export_proto_sysid_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
604 {
605 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.export_proto_sysid);
606 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.export_proto_sysid);
607 *ptr_where += strlen(*ptr_where);
608 *ptr_values += strlen(*ptr_values);
609 }
610
count_custom_primitives_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)611 void count_custom_primitives_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
612 {
613 struct custom_primitive_ptrs *cp_entry;
614
615 cp_entry = &config.cpptrs.primitive[idata->cp_idx];
616
617 if (cp_entry->ptr->len != PM_VARIABLE_LENGTH) {
618 char cp_str[SRVBUFLEN];
619
620 custom_primitive_value_print(cp_str, SRVBUFLEN, cache_elem->pcust, cp_entry, FALSE);
621 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cp_str);
622 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cp_str);
623 }
624 else {
625 char *label_ptr = NULL, empty_string[] = "";
626
627 vlen_prims_get(cache_elem->pvlen, cp_entry->ptr->type, &label_ptr);
628 if (!label_ptr) label_ptr = empty_string;
629 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, label_ptr);
630 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, label_ptr);
631 }
632
633 *ptr_where += strlen(*ptr_where);
634 *ptr_values += strlen(*ptr_values);
635
636 idata->cp_idx++;
637 idata->cp_idx %= config.cpptrs.num;
638 }
639
count_std_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)640 void count_std_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
641 {
642 char *bgp_comm_ptr = NULL, empty_string[] = "";
643
644 vlen_prims_get(cache_elem->pvlen, COUNT_INT_STD_COMM, &bgp_comm_ptr);
645 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
646
647 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
648 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
649 *ptr_where += strlen(*ptr_where);
650 *ptr_values += strlen(*ptr_values);
651 }
652
count_ext_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)653 void count_ext_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
654 {
655 char *bgp_comm_ptr = NULL, empty_string[] = "";
656
657 vlen_prims_get(cache_elem->pvlen, COUNT_INT_EXT_COMM, &bgp_comm_ptr);
658 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
659
660 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
661 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
662 *ptr_where += strlen(*ptr_where);
663 *ptr_values += strlen(*ptr_values);
664 }
665
count_lrg_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)666 void count_lrg_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
667 {
668 char *bgp_comm_ptr = NULL, empty_string[] = "";
669
670 vlen_prims_get(cache_elem->pvlen, COUNT_INT_LRG_COMM, &bgp_comm_ptr);
671 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
672
673 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
674 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
675 *ptr_where += strlen(*ptr_where);
676 *ptr_values += strlen(*ptr_values);
677 }
678
count_as_path_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)679 void count_as_path_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
680 {
681 char *as_path_ptr = NULL, empty_string[] = "";
682
683 vlen_prims_get(cache_elem->pvlen, COUNT_INT_AS_PATH, &as_path_ptr);
684 if (!as_path_ptr) as_path_ptr = empty_string;
685
686 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, as_path_ptr);
687 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, as_path_ptr);
688 *ptr_where += strlen(*ptr_where);
689 *ptr_values += strlen(*ptr_values);
690 }
691
count_src_std_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)692 void count_src_std_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
693 {
694 char *bgp_comm_ptr = NULL, empty_string[] = "";
695
696 vlen_prims_get(cache_elem->pvlen, COUNT_INT_SRC_STD_COMM, &bgp_comm_ptr);
697 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
698
699 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
700 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
701 *ptr_where += strlen(*ptr_where);
702 *ptr_values += strlen(*ptr_values);
703 }
704
count_src_ext_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)705 void count_src_ext_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
706 {
707 char *bgp_comm_ptr = NULL, empty_string[] = "";
708
709 vlen_prims_get(cache_elem->pvlen, COUNT_INT_SRC_EXT_COMM, &bgp_comm_ptr);
710 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
711
712 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
713 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
714 *ptr_where += strlen(*ptr_where);
715 *ptr_values += strlen(*ptr_values);
716 }
717
count_src_lrg_comm_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)718 void count_src_lrg_comm_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
719 {
720 char *bgp_comm_ptr = NULL, empty_string[] = "";
721
722 vlen_prims_get(cache_elem->pvlen, COUNT_INT_SRC_LRG_COMM, &bgp_comm_ptr);
723 if (!bgp_comm_ptr) bgp_comm_ptr = empty_string;
724
725 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, bgp_comm_ptr);
726 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, bgp_comm_ptr);
727 *ptr_where += strlen(*ptr_where);
728 *ptr_values += strlen(*ptr_values);
729 }
730
count_src_as_path_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)731 void count_src_as_path_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
732 {
733 char *as_path_ptr = NULL, empty_string[] = "";
734
735 vlen_prims_get(cache_elem->pvlen, COUNT_INT_SRC_AS_PATH, &as_path_ptr);
736 if (!as_path_ptr) as_path_ptr = empty_string;
737
738 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, as_path_ptr);
739 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, as_path_ptr);
740 *ptr_where += strlen(*ptr_where);
741 *ptr_values += strlen(*ptr_values);
742 }
743
count_local_pref_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)744 void count_local_pref_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
745 {
746 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->local_pref);
747 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->local_pref);
748 *ptr_where += strlen(*ptr_where);
749 *ptr_values += strlen(*ptr_values);
750 }
751
count_src_local_pref_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)752 void count_src_local_pref_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
753 {
754 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->src_local_pref);
755 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->src_local_pref);
756 *ptr_where += strlen(*ptr_where);
757 *ptr_values += strlen(*ptr_values);
758 }
759
count_med_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)760 void count_med_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
761 {
762 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->med);
763 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->med);
764 *ptr_where += strlen(*ptr_where);
765 *ptr_values += strlen(*ptr_values);
766 }
767
count_src_med_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)768 void count_src_med_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
769 {
770 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->src_med);
771 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->src_med);
772 *ptr_where += strlen(*ptr_where);
773 *ptr_values += strlen(*ptr_values);
774 }
775
count_dst_roa_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)776 void count_dst_roa_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
777 {
778 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, rpki_roa_print(cache_elem->pbgp->dst_roa));
779 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, rpki_roa_print(cache_elem->pbgp->dst_roa));
780 *ptr_where += strlen(*ptr_where);
781 *ptr_values += strlen(*ptr_values);
782 }
783
count_src_roa_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)784 void count_src_roa_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
785 {
786 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, rpki_roa_print(cache_elem->pbgp->src_roa));
787 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, rpki_roa_print(cache_elem->pbgp->src_roa));
788 *ptr_where += strlen(*ptr_where);
789 *ptr_values += strlen(*ptr_values);
790 }
791
count_mpls_vpn_rd_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)792 void count_mpls_vpn_rd_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
793 {
794 char ptr[SRVBUFLEN];
795
796 bgp_rd2str(ptr, &cache_elem->pbgp->mpls_vpn_rd);
797 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
798 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
799 *ptr_where += strlen(*ptr_where);
800 *ptr_values += strlen(*ptr_values);
801 }
802
count_mpls_pw_id_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)803 void count_mpls_pw_id_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
804 {
805 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->mpls_pw_id);
806 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->mpls_pw_id);
807 *ptr_where += strlen(*ptr_where);
808 *ptr_values += strlen(*ptr_values);
809 }
810
count_peer_src_as_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)811 void count_peer_src_as_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
812 {
813 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->peer_src_as);
814 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->peer_src_as);
815 *ptr_where += strlen(*ptr_where);
816 *ptr_values += strlen(*ptr_values);
817 }
818
count_peer_dst_as_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)819 void count_peer_dst_as_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
820 {
821 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->pbgp->peer_dst_as);
822 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->pbgp->peer_dst_as);
823 *ptr_where += strlen(*ptr_where);
824 *ptr_values += strlen(*ptr_values);
825 }
826
count_peer_src_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)827 void count_peer_src_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
828 {
829 char ptr[INET6_ADDRSTRLEN];
830
831 addr_to_str(ptr, &cache_elem->pbgp->peer_src_ip);
832 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ptr);
833 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ptr);
834 *ptr_where += strlen(*ptr_where);
835 *ptr_values += strlen(*ptr_values);
836 }
837
count_peer_dst_ip_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)838 void count_peer_dst_ip_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
839 {
840 char ptr[INET6_ADDRSTRLEN], *indirect_ptr = ptr;
841
842 addr_to_str(ptr, &cache_elem->pbgp->peer_dst_ip);
843 if (!strlen(ptr)) indirect_ptr = (char *) fake_host;
844 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, indirect_ptr);
845 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, indirect_ptr);
846 *ptr_where += strlen(*ptr_where);
847 *ptr_values += strlen(*ptr_values);
848 }
849
count_src_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)850 void count_src_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
851 {
852 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.src_port);
853 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.src_port);
854 *ptr_where += strlen(*ptr_where);
855 *ptr_values += strlen(*ptr_values);
856 }
857
count_dst_port_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)858 void count_dst_port_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
859 {
860 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.dst_port);
861 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.dst_port);
862 *ptr_where += strlen(*ptr_where);
863 *ptr_values += strlen(*ptr_values);
864 }
865
count_tcpflags_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)866 void count_tcpflags_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
867 {
868 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->tcp_flags);
869 *ptr_values += strlen(*ptr_values);
870 }
871
count_ip_tos_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)872 void count_ip_tos_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
873 {
874 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.tos);
875 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.tos);
876 *ptr_where += strlen(*ptr_where);
877 *ptr_values += strlen(*ptr_values);
878 }
879
MY_count_ip_proto_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)880 void MY_count_ip_proto_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
881 {
882 char proto[PROTO_NUM_STRLEN];
883
884 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ip_proto_print(cache_elem->primitives.proto, proto, PROTO_NUM_STRLEN));
885 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ip_proto_print(cache_elem->primitives.proto, proto, PROTO_NUM_STRLEN));
886
887 *ptr_where += strlen(*ptr_where);
888 *ptr_values += strlen(*ptr_values);
889 }
890
PG_count_ip_proto_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)891 void PG_count_ip_proto_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
892 {
893 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.proto);
894 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.proto);
895 *ptr_where += strlen(*ptr_where);
896 *ptr_values += strlen(*ptr_values);
897 }
898
count_copy_timestamp_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)899 void count_copy_timestamp_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
900 {
901 static char btime_str[VERYSHORTBUFLEN], now_str[VERYSHORTBUFLEN];
902
903 pm_strftime(btime_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &cache_elem->basetime, config.timestamps_utc);
904 pm_strftime(now_str, VERYSHORTBUFLEN, "%Y-%m-%d %H:%M:%S", &idata->now, config.timestamps_utc);
905
906 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->basetime); // dummy
907 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, now_str, btime_str);
908 *ptr_where += strlen(*ptr_where);
909 *ptr_values += strlen(*ptr_values);
910 }
911
count_timestamp_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)912 void count_timestamp_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
913 {
914 time_t tme = idata->now;
915
916 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->basetime);
917 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, tme, cache_elem->basetime);
918 *ptr_where += strlen(*ptr_where);
919 *ptr_values += strlen(*ptr_values);
920 }
921
count_tag_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)922 void count_tag_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
923 {
924 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.tag);
925 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.tag);
926 *ptr_where += strlen(*ptr_where);
927 *ptr_values += strlen(*ptr_values);
928 }
929
count_tag2_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)930 void count_tag2_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
931 {
932 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, cache_elem->primitives.tag2);
933 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, cache_elem->primitives.tag2);
934 *ptr_where += strlen(*ptr_where);
935 *ptr_values += strlen(*ptr_values);
936 }
937
count_label_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)938 void count_label_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
939 {
940 char *label_ptr = NULL, empty_string[] = "";
941
942 vlen_prims_get(cache_elem->pvlen, COUNT_INT_LABEL, &label_ptr);
943 if (!label_ptr) label_ptr = empty_string;
944
945 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, label_ptr);
946 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, label_ptr);
947 *ptr_where += strlen(*ptr_where);
948 *ptr_values += strlen(*ptr_values);
949 }
950
count_class_id_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)951 void count_class_id_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
952 {
953 char buf[MAX_PROTOCOL_LEN+1];
954
955 memset(buf, 0, MAX_PROTOCOL_LEN+1);
956 if (cache_elem->primitives.class && class[cache_elem->primitives.class-1].id) {
957 strlcpy(buf, class[cache_elem->primitives.class-1].protocol, MAX_PROTOCOL_LEN);
958 buf[sizeof(buf)-1] = '\0';
959 }
960 else strlcpy(buf, "unknown", MAX_PROTOCOL_LEN);
961
962 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, buf);
963 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, buf);
964 *ptr_where += strlen(*ptr_where);
965 *ptr_values += strlen(*ptr_values);
966 }
967
968 #if defined (WITH_NDPI)
count_ndpi_class_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)969 void count_ndpi_class_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
970 {
971 char ndpi_class[SUPERSHORTBUFLEN];
972
973 snprintf(ndpi_class, SUPERSHORTBUFLEN, "%s/%s",
974 ndpi_get_proto_name(pm_ndpi_wfl->ndpi_struct, cache_elem->primitives.ndpi_class.master_protocol),
975 ndpi_get_proto_name(pm_ndpi_wfl->ndpi_struct, cache_elem->primitives.ndpi_class.app_protocol));
976
977 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, ndpi_class);
978 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, ndpi_class);
979 *ptr_where += strlen(*ptr_where);
980 *ptr_values += strlen(*ptr_values);
981 }
982 #endif
983
count_counters_setclause_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_set,char ** ptr_none)984 void count_counters_setclause_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_set, char **ptr_none)
985 {
986 snprintf(*ptr_set, SPACELEFT(set_clause), set[num].string, cache_elem->packet_counter, cache_elem->bytes_counter);
987 *ptr_set += strlen(*ptr_set);
988 }
989
count_flows_setclause_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_set,char ** ptr_none)990 void count_flows_setclause_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_set, char **ptr_none)
991 {
992 snprintf(*ptr_set, SPACELEFT(set_clause), set[num].string, cache_elem->flows_counter);
993 *ptr_set += strlen(*ptr_set);
994 }
995
count_tcpflags_setclause_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_set,char ** ptr_none)996 void count_tcpflags_setclause_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_set, char **ptr_none)
997 {
998 snprintf(*ptr_set, SPACELEFT(set_clause), set[num].string, cache_elem->tcp_flags);
999 *ptr_set += strlen(*ptr_set);
1000 }
1001
count_noop_setclause_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_set,char ** ptr_none)1002 void count_noop_setclause_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_set, char **ptr_none)
1003 {
1004 strncpy(*ptr_set, set[num].string, SPACELEFT(set_clause));
1005 *ptr_set += strlen(*ptr_set);
1006 }
1007
count_noop_setclause_event_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_set,char ** ptr_none)1008 void count_noop_setclause_event_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_set, char **ptr_none)
1009 {
1010 strncpy(*ptr_set, set_event[num].string, SPACELEFT(set_clause));
1011 *ptr_set += strlen(*ptr_set);
1012 }
1013
1014 /* Fake handlers next */
fake_mac_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1015 void fake_mac_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1016 {
1017 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, fake_mac);
1018 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, fake_mac);
1019 *ptr_where += strlen(*ptr_where);
1020 *ptr_values += strlen(*ptr_values);
1021 }
1022
fake_host_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1023 void fake_host_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1024 {
1025 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, fake_host);
1026 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, fake_host);
1027 *ptr_where += strlen(*ptr_where);
1028 *ptr_values += strlen(*ptr_values);
1029 }
1030
fake_as_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1031 void fake_as_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1032 {
1033 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, fake_as);
1034 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, fake_as);
1035 *ptr_where += strlen(*ptr_where);
1036 *ptr_values += strlen(*ptr_values);
1037 }
1038
fake_comms_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1039 void fake_comms_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1040 {
1041 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, fake_comm);
1042 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, fake_comm);
1043 *ptr_where += strlen(*ptr_where);
1044 *ptr_values += strlen(*ptr_values);
1045 }
1046
fake_as_path_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1047 void fake_as_path_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1048 {
1049 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, fake_as_path);
1050 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, fake_as_path);
1051 *ptr_where += strlen(*ptr_where);
1052 *ptr_values += strlen(*ptr_values);
1053 }
1054
count_src_host_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1055 void count_src_host_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1056 {
1057 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1058 char ptr[INET6_ADDRSTRLEN];
1059
1060 addr_to_str(ptr, &cache_elem->primitives.src_ip);
1061 aton = aton_v6;
1062
1063 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1064 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1065 *ptr_where += strlen(*ptr_where);
1066 *ptr_values += strlen(*ptr_values);
1067 }
1068
count_dst_host_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1069 void count_dst_host_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1070 {
1071 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1072 char ptr[INET6_ADDRSTRLEN];
1073
1074 addr_to_str(ptr, &cache_elem->primitives.dst_ip);
1075 aton = aton_v6;
1076
1077 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1078 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1079 *ptr_where += strlen(*ptr_where);
1080 *ptr_values += strlen(*ptr_values);
1081 }
1082
count_src_net_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1083 void count_src_net_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1084 {
1085 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1086 char ptr[INET6_ADDRSTRLEN];
1087
1088 addr_to_str(ptr, &cache_elem->primitives.src_net);
1089 aton = aton_v6;
1090
1091 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1092 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1093 *ptr_where += strlen(*ptr_where);
1094 *ptr_values += strlen(*ptr_values);
1095 }
1096
count_dst_net_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1097 void count_dst_net_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1098 {
1099 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1100 char ptr[INET6_ADDRSTRLEN];
1101
1102 addr_to_str(ptr, &cache_elem->primitives.dst_net);
1103 aton = aton_v6;
1104
1105 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1106 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1107 *ptr_where += strlen(*ptr_where);
1108 *ptr_values += strlen(*ptr_values);
1109 }
1110
count_peer_src_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1111 void count_peer_src_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1112 {
1113 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1114 char ptr[INET6_ADDRSTRLEN];
1115
1116 addr_to_str(ptr, &cache_elem->pbgp->peer_src_ip);
1117 aton = aton_v6;
1118
1119 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1120 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1121 *ptr_where += strlen(*ptr_where);
1122 *ptr_values += strlen(*ptr_values);
1123 }
1124
count_peer_dst_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1125 void count_peer_dst_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1126 {
1127 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1128 char ptr[INET6_ADDRSTRLEN];
1129
1130 addr_to_str(ptr, &cache_elem->pbgp->peer_dst_ip);
1131 aton = aton_v6;
1132
1133 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1134 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1135 *ptr_where += strlen(*ptr_where);
1136 *ptr_values += strlen(*ptr_values);
1137 }
1138
count_post_nat_src_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1139 void count_post_nat_src_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1140 {
1141 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1142 char ptr[INET6_ADDRSTRLEN];
1143
1144 addr_to_str(ptr, &cache_elem->pnat->post_nat_src_ip);
1145 aton = aton_v6;
1146
1147 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1148 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1149 *ptr_where += strlen(*ptr_where);
1150 *ptr_values += strlen(*ptr_values);
1151 }
1152
count_post_nat_dst_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1153 void count_post_nat_dst_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1154 {
1155 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1156 char ptr[INET6_ADDRSTRLEN];
1157
1158 addr_to_str(ptr, &cache_elem->pnat->post_nat_dst_ip);
1159 aton = aton_v6;
1160
1161 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1162 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1163 *ptr_where += strlen(*ptr_where);
1164 *ptr_values += strlen(*ptr_values);
1165 }
1166
count_tunnel_src_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1167 void count_tunnel_src_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1168 {
1169 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1170 char ptr[INET6_ADDRSTRLEN];
1171
1172 addr_to_str(ptr, &cache_elem->ptun->tunnel_src_ip);
1173 aton = aton_v6;
1174
1175 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1176 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1177 *ptr_where += strlen(*ptr_where);
1178 *ptr_values += strlen(*ptr_values);
1179 }
1180
count_tunnel_dst_ip_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1181 void count_tunnel_dst_ip_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1182 {
1183 char aton_v6[] = "INET6_ATON", aton_null[] = " ", *aton = aton_null;
1184 char ptr[INET6_ADDRSTRLEN];
1185
1186 addr_to_str(ptr, &cache_elem->ptun->tunnel_dst_ip);
1187 aton = aton_v6;
1188
1189 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, ptr);
1190 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, ptr);
1191 *ptr_where += strlen(*ptr_where);
1192 *ptr_values += strlen(*ptr_values);
1193 }
1194
fake_host_aton_handler(const struct db_cache * cache_elem,struct insert_data * idata,int num,char ** ptr_values,char ** ptr_where)1195 void fake_host_aton_handler(const struct db_cache *cache_elem, struct insert_data *idata, int num, char **ptr_values, char **ptr_where)
1196 {
1197 char *aton = NULL, aton_v4[] = "INET_ATON";
1198
1199 aton = aton_v4;
1200 snprintf(*ptr_where, SPACELEFT(where_clause), where[num].string, aton, fake_host);
1201 snprintf(*ptr_values, SPACELEFT(values_clause), values[num].string, aton, fake_host);
1202 *ptr_where += strlen(*ptr_where);
1203 *ptr_values += strlen(*ptr_values);
1204 }
1205