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 no, write to the Free Software
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 */
21 
22 #ifndef PKT_HANDLERS_H
23 #define PKT_HANDLERS_H
24 
25 extern struct channels_list_entry channels_list[MAX_N_PLUGINS]; /* communication channels: core <-> plugins */
26 extern pkt_handler phandler[N_PRIMITIVES];
27 
28 extern void evaluate_packet_handlers();
29 extern void src_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
30 extern void dst_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
31 extern void vlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
32 extern void cos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
33 extern void etype_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
34 extern void mpls_label_top_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
35 extern void mpls_label_bottom_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
36 extern void mpls_stack_depth_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
37 extern void src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
38 extern void dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
39 extern void src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
40 extern void dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
41 extern void ip_tos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
42 extern void ip_proto_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
43 extern void tcp_flags_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
44 extern void tunnel_src_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
45 extern void tunnel_dst_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
46 extern void tunnel_src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
47 extern void tunnel_dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
48 extern void tunnel_ip_proto_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
49 extern void tunnel_ip_tos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
50 extern void tunnel_src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
51 extern void tunnel_dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
52 extern void vxlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
53 extern void counters_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
54 extern void counters_renormalize_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
55 extern void time_new_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
56 extern void time_pcap_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
57 extern void post_tag_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
58 extern void post_tag2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
59 extern void flows_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
60 extern void class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
61 extern void in_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
62 extern void out_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
63 extern void sampling_rate_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
64 extern void sampling_direction_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
65 extern void timestamp_start_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
66 extern void timestamp_arrival_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
67 extern void custom_primitives_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
68 extern void sfprobe_payload_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
69 extern void nfprobe_extras_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
70 extern void mpls_vpn_rd_frommap_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
71 
72 extern void NF_src_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
73 extern void NF_dst_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
74 extern void NF_vlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
75 extern void NF_cos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
76 extern void NF_etype_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
77 extern void NF_src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
78 extern void NF_dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
79 extern void NF_src_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
80 extern void NF_dst_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
81 extern void NF_src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
82 extern void NF_dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
83 extern void NF_src_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
84 extern void NF_dst_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
85 extern void NF_peer_src_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
86 extern void NF_peer_dst_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
87 extern void NF_peer_src_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
88 extern void NF_peer_dst_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
89 extern void NF_ip_tos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
90 extern void NF_ip_proto_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
91 extern void NF_tcp_flags_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
92 extern void NF_counters_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
93 extern void NF_time_msecs_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
94 extern void NF_time_secs_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
95 extern void NF_time_new_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
96 extern void NF_flows_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
97 extern void NF_class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
98 extern void NF_in_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
99 extern void NF_out_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
100 extern void NF_sampling_rate_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
101 extern void NF_sampling_direction_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
102 extern void NF_post_nat_src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
103 extern void NF_post_nat_dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
104 extern void NF_post_nat_src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
105 extern void NF_post_nat_dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
106 extern void NF_nat_event_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
107 extern void NF_mpls_label_top_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
108 extern void NF_mpls_label_bottom_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
109 extern void NF_mpls_stack_depth_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
110 extern void NF_mpls_vpn_id_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
111 extern void NF_mpls_pw_id_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
112 extern void NF_vxlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
113 extern void NF_timestamp_start_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
114 extern void NF_timestamp_end_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
115 extern void NF_timestamp_arrival_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
116 extern void NF_sequence_number_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
117 extern void NF_version_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
118 extern void NF_sysid_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
119 extern void NF_custom_primitives_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
120 extern void NF_counters_renormalize_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
121 extern void NF_counters_map_renormalize_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
122 extern void NF_cust_tag_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
123 extern void NF_cust_tag2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
124 extern void NF_cust_label_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
125 extern void NF_tee_payload_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
126 
127 extern void bgp_ext_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
128 extern void nfprobe_bgp_ext_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
129 extern void sfprobe_bgp_ext_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
130 extern void bgp_peer_src_as_frommap_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
131 extern void bgp_src_local_pref_frommap_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
132 extern void bgp_src_med_frommap_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
133 extern void bgp_src_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
134 extern void bgp_dst_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
135 extern void bgp_peer_dst_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
136 
137 extern void igp_src_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
138 extern void igp_dst_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
139 extern void igp_peer_dst_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
140 
141 extern void SF_src_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
142 extern void SF_dst_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
143 extern void SF_vlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
144 extern void SF_cos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
145 extern void SF_etype_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
146 extern void SF_src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
147 extern void SF_dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
148 extern void SF_src_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
149 extern void SF_dst_nmask_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
150 extern void SF_src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
151 extern void SF_dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
152 extern void SF_src_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
153 extern void SF_dst_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
154 extern void SF_peer_src_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
155 extern void SF_peer_dst_ip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
156 extern void SF_ip_tos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
157 extern void SF_ip_proto_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
158 extern void SF_tcp_flags_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
159 extern void SF_flows_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
160 extern void SF_counters_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
161 extern void SF_counters_renormalize_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
162 extern void SF_counters_map_renormalize_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
163 extern void SF_tag_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
164 extern void SF_tag2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
165 extern void SF_class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
166 extern void SF_in_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
167 extern void SF_out_iface_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
168 extern void SF_sampling_rate_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
169 extern void SF_sampling_direction_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
170 extern void SF_sampling_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
171 extern void SF_timestamp_start_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
172 extern void SF_timestamp_arrival_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
173 extern void SF_sequence_number_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
174 extern void SF_version_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
175 extern void SF_sysid_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
176 extern void SF_bgp_peer_src_as_fromext_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
177 extern void SF_bgp_peer_src_as_fromstd_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
178 extern void SF_as_path_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
179 extern void SF_peer_src_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
180 extern void SF_peer_dst_as_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
181 extern void SF_local_pref_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
182 extern void SF_std_comms_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
183 extern void SF_tunnel_src_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
184 extern void SF_tunnel_dst_mac_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
185 extern void SF_tunnel_src_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
186 extern void SF_tunnel_dst_host_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
187 extern void SF_tunnel_ip_proto_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
188 extern void SF_tunnel_ip_tos_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
189 extern void SF_tunnel_src_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
190 extern void SF_tunnel_dst_port_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
191 extern void SF_vxlan_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
192 extern void SF_tee_payload_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
193 extern void SF_mpls_label_top_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
194 extern void SF_mpls_label_bottom_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
195 extern void SF_mpls_stack_depth_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
196 extern void SF_mpls_pw_id_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
197 extern void SF_custom_primitives_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
198 
199 extern void pre_tag_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
200 extern void pre_tag2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
201 extern void pre_tag_label_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
202 extern void sampling_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
203 extern void sfprobe_sampling_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
204 
205 #if defined (WITH_GEOIP)
206 extern void pm_geoip_init();
207 extern void src_host_country_geoip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
208 extern void dst_host_country_geoip_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
209 #endif
210 
211 #if defined (WITH_GEOIPV2)
212 extern void pm_geoipv2_init();
213 extern void pm_geoipv2_close();
214 extern void src_host_geoipv2_lookup_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
215 extern void dst_host_geoipv2_lookup_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
216 extern void src_host_country_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
217 extern void dst_host_country_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
218 extern void src_host_pocode_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
219 extern void dst_host_pocode_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
220 extern void src_host_coords_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
221 extern void dst_host_coords_geoipv2_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
222 #endif
223 
224 #if defined (WITH_NDPI)
225 extern void ndpi_class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
226 extern void NF_ndpi_class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
227 extern void SF_ndpi_class_handler(struct channels_list_entry *, struct packet_ptrs *, char **);
228 #endif
229 
230 extern int evaluate_lm_method(struct packet_ptrs *, u_int8_t, u_int32_t, u_int32_t);
231 extern char *lookup_tpl_ext_db(void *, u_int32_t, u_int16_t);
232 #endif //PKT_HANDLERS_H
233