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