PF_RING API
API documentation for PF_RING: high-speed packet capture, filtering and analysis framework.
Loading...
Searching...
No Matches
pfring.h
Go to the documentation of this file.
1/*
2 *
3 * (C) 2005-25 - ntop
4 *
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesses General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
10 *
11 */
12
13#ifndef _PFRING_H_
14#define _PFRING_H_
15
29#include <sys/types.h>
30#include <stdio.h>
31#include <stdarg.h>
32
33#ifndef HAVE_PCAP
34#include <stdio.h>
35#include <stdlib.h>
36#include <string.h>
37#include <unistd.h>
38#include <sys/mman.h>
39#include <errno.h>
40#include <poll.h>
41#include <sys/socket.h>
42#include <linux/sockios.h>
43#endif
44
45#ifdef ENABLE_BPF
46#include <pcap/pcap.h>
47#include <pcap/bpf.h>
48#endif
49
50#include <linux/if_packet.h>
51#include <arpa/inet.h>
52#include <sys/ioctl.h>
53#include <sys/socket.h>
54#include <sys/un.h>
55#include <sys/time.h>
56#include <time.h>
57#include <poll.h>
58#include <string.h>
59#include <pthread.h>
60#include <linux/pf_ring.h>
61#include <linux/if_ether.h>
62
63#ifdef HAVE_REDIRECTOR
64#include <librdi.h>
65#endif
66
67#define MAX_CAPLEN 65600 /* L2 + IP + Max IP payload (65535) + alignment */
68#define PAGE_SIZE 4096
69
70#define DEFAULT_POLL_DURATION 500
71
72#define POLL_SLEEP_STEP 10 /* ns = 0.1 ms */
73#define POLL_SLEEP_MIN POLL_SLEEP_STEP
74#define POLL_SLEEP_MAX 1000 /* ns */
75#define POLL_QUEUE_MIN_LEN 500 /* # packets */
76
77#define pfring_rwlock_t pthread_rwlock_t
78#define pfring_rwlock_init pthread_rwlock_init
79#define pfring_rwlock_rdlock pthread_rwlock_rdlock
80#define pfring_rwlock_wrlock pthread_rwlock_wrlock
81#define pfring_rwlock_unlock pthread_rwlock_unlock
82#define pfring_rwlock_destroy pthread_rwlock_destroy
83
84#define timespec_is_before(a, b) \
85 ((((a)->tv_sec<(b)->tv_sec)||(((a)->tv_sec==(b)->tv_sec)&&((a)->tv_nsec<(b)->tv_nsec)))?1:0)
86
87/* ********************************* */
88
89#ifdef __cplusplus
90extern "C" {
91#endif
92
93#ifdef SAFE_RING_MODE
94static char staticBucket[2048];
95#endif
96
97typedef void (*pfringProcesssPacket)(const struct pfring_pkthdr *h, const u_char *p, const u_char *user_bytes);
98
99/* ********************************* */
100
101typedef struct __pfring pfring; /* Forward declaration */
102
103/* ********************************* */
104
105typedef struct {
106 u_int32_t max_packet_size;
107 u_int32_t rx_ring_slots;
108 u_int32_t tx_ring_slots;
110
111/* ********************************* */
112
113typedef struct {
114 u_int64_t recv;
115 u_int64_t drop;
116 u_int64_t shunt;
118
119/* ********************************* */
120
121typedef enum {
122 hardware_and_software = 0,
123 hardware_only,
124 software_only
125} filtering_mode;
126
127/* ********************************* */
128
129typedef enum {
130 FULL_PACKET_SLICING = 0,
131 L2_SLICING = 2,
132 L3_SLICING = 3,
133 L4_SLICING = 4
134} packet_slicing_level;
135
136/* ********************************* */
137
138typedef enum {
139 PCAP_CHUNK,
140 PCAP_NSEC_CHUNK,
141 PCAPNG_NSEC_CHUNK,
142 UNKNOWN_CHUNK_TYPE
143} pfring_chunk_type;
144
145typedef struct {
146 u_int32_t length;
147 pfring_chunk_type type;
149
150/* ********************************* */
151
152typedef struct {
153 u_char *data;
154 struct timeval ts;
155 u_int16_t caplen;
156 u_int16_t len;
157 u_int32_t flags;
158 u_int32_t hash;
160
161/* ********************************* */
162
163#ifndef BPF_RELEASE
165 u_int bf_len;
166 void *bf_insns;
167};
168#endif
169
170/* ********************************* */
171
172typedef struct pfring_if {
173 char *name;
174 char *system_name;
175 char *module;
176 char *module_version;
177 char *sn;
178 char mac[6];
179 struct { /* Bus ID: "%04X:%02X:%02X.%X", slot, bus, device, function */
180 int slot;
181 int bus;
182 int device;
183 int function;
184 } bus_id;
185 int ifindex;
186 int status; /* 1: up, 0: down, -1: unknown */
187 int license; /* 1: valid, 0: invalid or not installed */
188 time_t license_expiration; /* expiration epoch */
189 struct pfring_if *next;
191
192/* ********************************* */
193
194struct __pfring {
195 u_int8_t initialized;
196 u_int8_t enabled;
197 u_int8_t long_header;
198 u_int8_t force_timestamp;
199
200 u_int8_t strip_hw_timestamp;
201 u_int8_t disable_parsing;
202 u_int8_t disable_timestamp;
203 u_int8_t ixia_timestamp_enabled;
204
205 u_int8_t __padding_0;
206 u_int8_t chunk_mode_enabled;
207 u_int8_t userspace_bpf;
208 u_int8_t force_userspace_bpf;
209
210 u_int8_t zc_device;
211 u_int8_t is_shutting_down;
212 u_int8_t socket_default_accept_policy;
213 u_int8_t break_recv_loop_ext;
214
215 u_int32_t rss_mode;
216 packet_direction direction; /* Specify the capture direction for packets */
217 socket_mode mode;
218
219#ifdef BPF_RELEASE
220 struct bpf_program
221#else
222 struct pfring_bpf_program
223#endif
224 userspace_bpf_filter;
225
226 /* Hardware Timestamp */
227 struct {
228 u_int8_t force_timestamp;
229 u_int8_t is_silicom_hw_timestamp_card;
230 u_int8_t enable_hw_timestamp;
231 u_int8_t last_hw_timestamp_head_offset;
232
233 struct timespec last_hw_timestamp;
234 } hw_ts;
235
236 struct {
237 u_int8_t enabled_rx_packet_send;
238 struct pfring_pkthdr *last_received_hdr; /* Header of the past packet that has been received on this socket */
239 } tx;
240
241 void *priv_data; /* module private data */
242
243 void (*close) (pfring *);
244 int (*stats) (pfring *, pfring_stat *);
245 int (*recv) (pfring *, u_char**, u_int, struct pfring_pkthdr *, u_int8_t);
246 int (*set_poll_watermark) (pfring *, u_int16_t);
247 int (*set_poll_watermark_timeout) (pfring *, u_int16_t);
248 int (*set_poll_duration) (pfring *, u_int);
249 int (*set_tx_watermark) (pfring *, u_int16_t);
250 int (*set_channel_id) (pfring *, u_int32_t);
251 int (*set_channel_mask) (pfring *, u_int64_t);
252 int (*set_application_name) (pfring *, char *);
253 int (*set_application_stats) (pfring *, char *);
254 char* (*get_appl_stats_file_name) (pfring *ring, char *path, u_int path_len);
255 int (*set_vlan_id) (pfring *, u_int16_t);
256 int (*bind) (pfring *, char *);
257 int (*send) (pfring *, char *, u_int, u_int8_t);
258 int (*send_get_time) (pfring *, char *, u_int, struct timespec *);
259 u_int8_t (*get_num_rx_channels) (pfring *);
260 int (*get_card_settings) (pfring *, pfring_card_settings *);
261 int (*set_sampling_rate) (pfring *, u_int32_t);
262 int (*set_filtering_sampling_rate) (pfring *, u_int32_t);
263 int (*set_packet_slicing) (pfring *, packet_slicing_level, u_int32_t);
264 int (*get_selectable_fd) (pfring *);
265 int (*set_direction) (pfring *, packet_direction);
266 int (*set_socket_mode) (pfring *, socket_mode);
267 int (*set_cluster_consumer) (pfring *, u_int16_t, u_int16_t, cluster_type, u_int32_t);
268 int (*remove_from_cluster) (pfring *);
269 int (*set_master_id) (pfring *, u_int32_t);
270 int (*set_master) (pfring *, pfring *);
271 u_int32_t (*get_ring_id) (pfring *);
272 u_int32_t (*get_num_queued_pkts) (pfring *);
273 int (*get_hash_filtering_rule_stats)(pfring *, hash_filtering_rule *, char *, u_int *);
274 int (*handle_hash_filtering_rule) (pfring *, hash_filtering_rule *, u_char);
275 int (*purge_idle_hash_rules) (pfring *, u_int16_t);
276 int (*add_filtering_rule) (pfring *, filtering_rule *);
277 int (*remove_filtering_rule) (pfring *, u_int16_t);
278 int (*purge_idle_rules) (pfring *, u_int16_t);
279 int (*get_filtering_rule_stats) (pfring *, u_int16_t, char *, u_int *);
280 int (*toggle_filtering_policy) (pfring *, u_int8_t);
281 int (*enable_rss_rehash) (pfring *);
282 int (*poll) (pfring *, u_int);
283 int (*is_pkt_available) (pfring *);
284 int (*next_pkt_time) (pfring *, struct timespec *);
285 int (*next_pkt_raw_timestamp) (pfring *, u_int64_t *ts);
286 int (*version) (pfring *, u_int32_t *);
287 int (*get_bound_device_address) (pfring *, u_char [6]);
288 int (*get_bound_device_ifindex) (pfring *, int *);
289 int (*get_device_ifindex) (pfring *, char *, int *);
290 u_int16_t (*get_slot_header_len) (pfring *);
291 int (*set_virtual_device) (pfring *, virtual_filtering_device_info *);
292 int (*set_default_hw_action) (pfring *, generic_default_action_type);
293 int (*add_hw_rule) (pfring *, hw_filtering_rule *);
294 int (*remove_hw_rule) (pfring *, u_int16_t);
295 int (*loopback_test) (pfring *, char *, u_int, u_int);
296 int (*enable_ring) (pfring *);
297 int (*disable_ring) (pfring *);
298 void (*shutdown) (pfring *);
299 int (*set_bpf_filter) (pfring *, const char *);
300 int (*remove_bpf_filter) (pfring *);
301 int (*get_device_clock) (pfring *, struct timespec *);
302 int (*set_device_clock) (pfring *, struct timespec *);
303 int (*adjust_device_clock) (pfring *, struct timespec *, int8_t);
304 void (*sync_indexes_with_kernel) (pfring *);
305 int (*send_last_rx_packet) (pfring *, int);
306 void (*flush_tx_packets) (pfring *);
307 int (*register_zerocopy_tx_ring) (pfring *, pfring *);
308 int (*recv_chunk) (pfring *, void **, pfring_chunk_info *, u_int8_t);
309 int (*recv_burst) (pfring *, pfring_packet_info *, u_int8_t, u_int8_t);
310 int (*recv_flow) (pfring *, pfring_flow_update *, u_int8_t);
311 int (*get_metadata) (pfring *, u_char **, u_int32_t *);
312 u_int32_t (*get_interface_speed) (pfring *);
313 int (*get_link_type) (pfring *);
314
315 /* Silicom Redirector Only */
316 struct {
317 int8_t device_id;
318 int8_t port_id;
319 } rdi;
320
321 filtering_mode filter_mode;
322 pfring_device_type ft_device_type;
323
324 /* All devices */
325 char *buffer;
326 char *slots;
327 char *device_name;
328
329 u_int32_t flags;
330 u_int32_t caplen;
331
332 u_int16_t slot_header_len;
333 u_int16_t mtu /* 0 = unknown */;
334 u_int32_t sampling_rate;
335
336 u_int32_t sampling_counter;
337 u_int32_t sampling_rnd_shift;
338
339 packet_slicing_level slicing_level;
340 u_int32_t slicing_additional_bytes;
341
342 int fd;
343 int device_id;
344
345 FlowSlotInfo *slots_info;
346
347 u_int32_t poll_sleep;
348 u_int16_t poll_duration;
349 u_int8_t promisc;
350 u_int8_t ft_enabled; /* PF_RING FT support enabled */
351
352 u_int8_t reentrant;
353 u_int8_t break_recv_loop;
354 u_int16_t __padding_1;
355 u_int32_t num_poll_calls;
356
357 pfring_rwlock_t rx_lock;
358 pfring_rwlock_t tx_lock;
359
360 void *ft; /* PF_RING FT handle */
361
362 struct sockaddr_ll sock_tx;
363
364 /* Reflector socket (copy RX packets onto it) */
365 pfring *reflector_socket;
366
367 /* Semi-ZC devices (1-copy) */
368 pfring *one_copy_rx_pfring;
369
370 pthread_t runtime_manager_thread;
371};
372
373/* ********************************* */
374
375#define PF_RING_ZC_SYMMETRIC_RSS (1 << 0)
376#define PF_RING_REENTRANT (1 << 1)
377#define PF_RING_LONG_HEADER (1 << 2)
378#define PF_RING_PROMISC (1 << 3)
379#define PF_RING_TIMESTAMP (1 << 4)
380#define PF_RING_HW_TIMESTAMP (1 << 5)
381#define PF_RING_RX_PACKET_BOUNCE (1 << 6)
382#define PF_RING_ZC_FIXED_RSS_Q_0 (1 << 7)
383#define PF_RING_STRIP_HW_TIMESTAMP (1 << 8)
384#define PF_RING_DO_NOT_PARSE (1 << 9)
385#define PF_RING_DO_NOT_TIMESTAMP (1 << 10)
386#define PF_RING_CHUNK_MODE (1 << 11)
387#define PF_RING_IXIA_TIMESTAMP (1 << 12)
388#define PF_RING_USERSPACE_BPF (1 << 13)
389#define PF_RING_ZC_NOT_REPROGRAM_RSS (1 << 14)
390#define PF_RING_VSS_APCON_TIMESTAMP (1 << 15)
391#define PF_RING_ZC_IPONLY_RSS (1 << 16)
392#define PF_RING_FLOW_OFFLOAD (1 << 17)
393#define PF_RING_FLOW_OFFLOAD_NOUPDATES (1 << 18)
394#define PF_RING_KEEP_CRC (1 << 19)
395#define PF_RING_L7_FILTERING (1 << 20)
396#define PF_RING_DO_NOT_STRIP_FCS (1 << 21)
397#define PF_RING_TX_BPF (1 << 22)
398#define PF_RING_FLOW_OFFLOAD_RESET (1 << 23)
399#define PF_RING_DISCARD_INJECTED_PKTS (1 << 24)
400#define PF_RING_ARISTA_TIMESTAMP (1 << 25)
401#define PF_RING_METAWATCH_TIMESTAMP (1 << 26)
402#define PF_RING_HW_TIMESTAMP_UNSYNC (1 << 27)
404/* ********************************* */
405
406/* backward compatibility */
407#define PF_RING_DNA_SYMMETRIC_RSS PF_RING_ZC_SYMMETRIC_RSS
408#define PF_RING_DNA_FIXED_RSS_Q_0 PF_RING_ZC_FIXED_RSS_Q_0
409
410/* ********************************* */
411
412/* Defines with new features implemented by the API */
413#define PF_RING_API_RECV_BURST
414
415/* ********************************* */
416
439pfring *pfring_open(const char *device_name, u_int32_t caplen, u_int32_t flags);
440
451u_int8_t pfring_open_multichannel(const char *device_name, u_int32_t caplen,
452 u_int32_t flags, pfring *ring[MAX_NUM_RX_CHANNELS]);
453
459
464void pfring_config(u_short cpu_percentage);
465
474int pfring_loop(pfring *ring, pfringProcesssPacket looper,
475 const u_char *user_bytes, u_int8_t wait_for_packet);
476
482
489
496int pfring_stats(pfring *ring, pfring_stat *stats);
497
511int pfring_recv(pfring *ring, u_char** buffer, u_int buffer_len,
512 struct pfring_pkthdr *hdr, u_int8_t wait_for_incoming_packet);
513
526int pfring_recv_burst(pfring *ring, pfring_packet_info *packets, u_int8_t num_packets, u_int8_t wait_for_packets);
527
540int pfring_recv_parsed(pfring *ring, u_char** buffer, u_int buffer_len,
541 struct pfring_pkthdr *hdr, u_int8_t wait_for_incoming_packet,
542 u_int8_t level /* 1..4 */, u_int8_t add_timestamp, u_int8_t add_hash);
543
552int pfring_recv_flow(pfring *ring, pfring_flow_update *flow, u_int8_t wait_for_flows);
553
561int pfring_get_metadata(pfring *ring, u_char **metadata, u_int32_t *metadata_len);
562
573int pfring_set_poll_watermark(pfring *ring, u_int16_t watermark);
574
583int pfring_set_poll_watermark_timeout(pfring *ring, u_int16_t poll_watermark_timeout);
584
591int pfring_set_poll_duration(pfring *ring, u_int duration);
592
599int pfring_set_tx_watermark(pfring *ring, u_int16_t watermark);
600
607int pfring_set_default_hw_action(pfring *ring, generic_default_action_type action);
608
622int pfring_add_hw_rule(pfring *ring, hw_filtering_rule *rule);
623
630int pfring_remove_hw_rule(pfring *ring, u_int16_t rule_id);
631
638int pfring_set_channel_id(pfring *ring, u_int32_t channel_id);
639
646int pfring_set_channel_mask(pfring *ring, u_int64_t channel_mask);
647
659int pfring_set_application_name(pfring *ring, char *name);
660
667int pfring_set_application_stats(pfring *ring, char *stats);
668
676char* pfring_get_appl_stats_file_name(pfring *ring, char *path, u_int path_len);
677
684int pfring_set_vlan_id(pfring *ring, u_int16_t vlan_id);
685
692int pfring_bind(pfring *ring, char *device_name);
693
709int pfring_send(pfring *ring, char *pkt, u_int pkt_len, u_int8_t flush_packet);
710
720int pfring_send_get_time(pfring *ring, char *pkt, u_int pkt_len, struct timespec *ts);
721
728
736int pfring_set_sampling_rate(pfring *ring, u_int32_t rate /* 1 = no sampling */);
737
745int pfring_set_filtering_sampling_rate(pfring *ring, u_int32_t rate /* 0 = no sampling */);
746
754int pfring_set_packet_slicing(pfring *ring, packet_slicing_level level, u_int32_t additional_bytes);
755
763
771int pfring_set_direction(pfring *ring, packet_direction direction);
772
779int pfring_set_socket_mode(pfring *ring, socket_mode mode);
780
794int pfring_set_cluster_consumer(pfring *ring, u_int16_t cluster_id, u_int16_t queue_id, cluster_type the_type, u_int32_t options);
795
799int pfring_set_cluster(pfring *ring, u_int clusterId, cluster_type the_type);
800
807
814int pfring_set_master_id(pfring *ring, u_int32_t master_id);
815
822int pfring_set_master(pfring *ring, pfring *master);
823
829u_int32_t pfring_get_ring_id(pfring *ring);
830
837
848 hash_filtering_rule* rule_to_add,
849 u_char add_rule);
850
875int pfring_add_filtering_rule(pfring *ring, filtering_rule* rule_to_add);
876
883int pfring_remove_filtering_rule(pfring *ring, u_int16_t rule_id);
884
891int pfring_purge_idle_hash_rules(pfring *ring, u_int16_t inactivity_sec);
892
899int pfring_purge_idle_rules(pfring *ring, u_int16_t inactivity_sec);
900
911 hash_filtering_rule* rule,
912 char *stats, u_int *stats_len);
913
924int pfring_get_filtering_rule_stats(pfring *ring, u_int16_t rule_id,
925 char* stats, u_int *stats_len);
926
935int pfring_toggle_filtering_policy(pfring *ring, u_int8_t rules_default_accept_policy);
936
944
951int pfring_poll(pfring *ring, u_int wait_duration);
952
959
966int pfring_next_pkt_time(pfring *ring, struct timespec *ts);
967
974int pfring_next_pkt_raw_timestamp(pfring *ring, u_int64_t *timestamp_ns);
975
980void pfring_version_noring(u_int32_t *version);
981
988int pfring_version(pfring *ring, u_int32_t *version);
989
996int pfring_set_reflector_device(pfring *ring, char *device_name);
997
1004int pfring_get_bound_device_address(pfring *ring, u_char mac_address[6]);
1005
1012
1019int pfring_get_bound_device_ifindex(pfring *ring, int *if_index);
1020
1028int pfring_get_device_ifindex(pfring *ring, char *device_name, int *if_index);
1029
1036int pfring_set_virtual_device(pfring *ring, virtual_filtering_device_info *info);
1037
1046int pfring_loopback_test(pfring *ring, char *buffer, u_int buffer_len, u_int test_len);
1047
1054
1061
1070int pfring_set_bpf_filter(pfring *ring, const char *filter_buffer);
1071
1078
1086int pfring_set_filtering_mode(pfring *ring, filtering_mode mode);
1087
1094int pfring_get_device_clock(pfring *ring, struct timespec *ts);
1095
1102int pfring_set_device_clock(pfring *ring, struct timespec *ts);
1103
1111int pfring_adjust_device_clock(pfring *ring, struct timespec *offset, int8_t sign);
1112
1118
1125int pfring_send_last_rx_packet(pfring *ring, int tx_interface_id);
1126
1133
1140
1147
1154
1161int pfring_search_payload(pfring *ring, char *string_to_search);
1162
1163/* Utils (defined in pfring_utils.c) */
1164
1176int pfring_parse_pkt(u_char *pkt, struct pfring_pkthdr *hdr, u_int8_t level /* 2..4 */,
1177 u_int8_t add_timestamp /* 0,1 */, u_int8_t add_hash /* 0,1 */);
1184int pfring_set_if_promisc(const char *device, int set_promisc);
1185
1192int pfring_set_promisc(pfring *ring, int set_promisc);
1193
1202char* pfring_format_numbers(double val, char *buf, u_int buf_len, u_int8_t add_decimals);
1203
1212int pfring_enable_hw_timestamp(pfring *ring, char *device_name, u_int8_t enable_rx, u_int8_t enable_tx);
1213
1220
1228
1237int pfring_print_parsed_pkt(char *buff, u_int buff_len, const u_char *p, const struct pfring_pkthdr *h);
1238
1248int pfring_print_pkt(char *buff, u_int buff_len, const u_char *p, u_int len, u_int caplen);
1249
1258int pfring_recv_chunk(pfring *ring, void **chunk, pfring_chunk_info *chunk_info, u_int8_t wait_for_incoming_chunk);
1259
1266int pfring_set_bound_dev_name(pfring *ring, char *custom_dev_name);
1267
1272
1280int pfring_read_ixia_hw_timestamp(u_char *buffer, u_int32_t buffer_len, struct timespec *ts);
1281
1289int pfring_handle_ixia_hw_timestamp(u_char* buffer, struct pfring_pkthdr *hdr);
1290
1298int pfring_read_metawatch_hw_timestamp(u_char *buffer, u_int32_t buffer_len, struct timespec *ts);
1299
1308int pfring_read_metawatch_device_info(u_char *buffer, u_int32_t buffer_len, u_int16_t *device_id, u_int8_t *port_id);
1309
1317
1326int pfring_read_arista_7150_keyframe(u_char *buffer, u_int32_t buffer_len, u_int64_t *ns_ts, u_int32_t *ticks_ts);
1327
1335int pfring_read_arista_7150_hw_timestamp(u_char *buffer, u_int32_t buffer_len, u_int64_t *ns_ts);
1336
1344int pfring_handle_arista_hw_timestamp(u_char* buffer, struct pfring_pkthdr *hdr);
1345
1352
1358u_int32_t pfring_get_ethtool_link_speed(const char *ifname);
1359
1365
1371
1372/* ********************************* */
1373
1374int pfring_parse_bpf_filter(const char *filter_buffer, u_int caplen,
1375 #ifdef BPF_RELEASE
1376 struct bpf_program
1377#else
1378 struct pfring_bpf_program
1379#endif
1380 *filter);
1381
1382void pfring_free_bpf_filter(
1383#ifdef BPF_RELEASE
1384 struct bpf_program
1385#else
1386 struct pfring_bpf_program
1387#endif
1388 *filter);
1389
1390u_int32_t pfring_bpf_filter(void *bpf_insn, u_char *buffer, u_int32_t caplen, u_int32_t len);
1391
1392/* ********************************* */
1393
1394/* pfring_utils.h */
1395int32_t gmt_to_local(time_t t);
1396
1397/* ********************************* */
1398
1399typedef struct {
1400 char *name;
1401 int (*open) (pfring *);
1402 pfring_if_t *(*findalldevs) (void);
1404
1406 const char *name; /* Function name */
1407 void (*ptr)(void); /* Function pointer */
1408};
1409
1410/* ********************************* */
1411
1412void pfring_thirdparty_lib_init(const char* thirdparty_lib_name,
1413 struct thirdparty_func thirdparty_function_ptr[]);
1414
1415#ifdef __cplusplus
1416}
1417#endif
1418
1419#endif /* _PFRING_H_ */
1420
PF_RING kernel module header file.
int pfring_add_hw_rule(pfring *ring, hw_filtering_rule *rule)
int pfring_get_mtu_size(pfring *ring)
int pfring_set_default_hw_action(pfring *ring, generic_default_action_type action)
int pfring_enable_rss_rehash(pfring *ring)
int pfring_handle_ixia_hw_timestamp(u_char *buffer, struct pfring_pkthdr *hdr)
int pfring_remove_hw_rule(pfring *ring, u_int16_t rule_id)
void pfring_freealldevs(pfring_if_t *list)
int pfring_remove_from_cluster(pfring *ring)
int pfring_loop(pfring *ring, pfringProcesssPacket looper, const u_char *user_bytes, u_int8_t wait_for_packet)
int pfring_recv_parsed(pfring *ring, u_char **buffer, u_int buffer_len, struct pfring_pkthdr *hdr, u_int8_t wait_for_incoming_packet, u_int8_t level, u_int8_t add_timestamp, u_int8_t add_hash)
int pfring_enable_ring(pfring *ring)
int pfring_set_master(pfring *ring, pfring *master)
int pfring_send(pfring *ring, char *pkt, u_int pkt_len, u_int8_t flush_packet)
int pfring_get_link_status(pfring *ring)
int pfring_get_hash_filtering_rule_stats(pfring *ring, hash_filtering_rule *rule, char *stats, u_int *stats_len)
void pfring_breakloop(pfring *ring)
int pfring_handle_hash_filtering_rule(pfring *ring, hash_filtering_rule *rule_to_add, u_char add_rule)
int pfring_set_poll_watermark_timeout(pfring *ring, u_int16_t poll_watermark_timeout)
int pfring_adjust_device_clock(pfring *ring, struct timespec *offset, int8_t sign)
int pfring_print_pkt(char *buff, u_int buff_len, const u_char *p, u_int len, u_int caplen)
int pfring_set_application_name(pfring *ring, char *name)
int pfring_set_bound_dev_name(pfring *ring, char *custom_dev_name)
int pfring_version(pfring *ring, u_int32_t *version)
int pfring_set_reflector_device(pfring *ring, char *device_name)
int pfring_get_link_type(pfring *ring)
int pfring_get_metadata(pfring *ring, u_char **metadata, u_int32_t *metadata_len)
int pfring_set_packet_slicing(pfring *ring, packet_slicing_level level, u_int32_t additional_bytes)
int pfring_set_poll_watermark(pfring *ring, u_int16_t watermark)
int pfring_next_pkt_raw_timestamp(pfring *ring, u_int64_t *timestamp_ns)
int pfring_set_device_clock(pfring *ring, struct timespec *ts)
int pfring_is_pkt_available(pfring *ring)
int pfring_search_payload(pfring *ring, char *string_to_search)
int pfring_set_filtering_mode(pfring *ring, filtering_mode mode)
int pfring_set_master_id(pfring *ring, u_int32_t master_id)
int pfring_toggle_filtering_policy(pfring *ring, u_int8_t rules_default_accept_policy)
int pfring_get_caplen(pfring *ring)
int pfring_get_bound_device_ifindex(pfring *ring, int *if_index)
int pfring_recv_chunk(pfring *ring, void **chunk, pfring_chunk_info *chunk_info, u_int8_t wait_for_incoming_chunk)
int pfring_poll(pfring *ring, u_int wait_duration)
int pfring_stats(pfring *ring, pfring_stat *stats)
int pfring_next_pkt_time(pfring *ring, struct timespec *ts)
int pfring_set_tx_watermark(pfring *ring, u_int16_t watermark)
void pfring_version_noring(u_int32_t *version)
int pfring_set_sampling_rate(pfring *ring, u_int32_t rate)
int pfring_set_if_promisc(const char *device, int set_promisc)
int pfring_get_card_settings(pfring *ring, pfring_card_settings *settings)
u_int8_t pfring_open_multichannel(const char *device_name, u_int32_t caplen, u_int32_t flags, pfring *ring[MAX_NUM_RX_CHANNELS])
int pfring_handle_metawatch_hw_timestamp(u_char *buffer, struct pfring_pkthdr *hdr)
int pfring_set_virtual_device(pfring *ring, virtual_filtering_device_info *info)
pfring * pfring_open(const char *device_name, u_int32_t caplen, u_int32_t flags)
char * pfring_get_appl_stats_file_name(pfring *ring, char *path, u_int path_len)
int pfring_remove_filtering_rule(pfring *ring, u_int16_t rule_id)
int pfring_recv(pfring *ring, u_char **buffer, u_int buffer_len, struct pfring_pkthdr *hdr, u_int8_t wait_for_incoming_packet)
int pfring_parse_pkt(u_char *pkt, struct pfring_pkthdr *hdr, u_int8_t level, u_int8_t add_timestamp, u_int8_t add_hash)
int pfring_read_metawatch_hw_timestamp(u_char *buffer, u_int32_t buffer_len, struct timespec *ts)
u_int32_t pfring_get_ring_id(pfring *ring)
int pfring_set_channel_id(pfring *ring, u_int32_t channel_id)
void pfring_shutdown(pfring *ring)
int pfring_loopback_test(pfring *ring, char *buffer, u_int buffer_len, u_int test_len)
int pfring_set_cluster(pfring *ring, u_int clusterId, cluster_type the_type)
int pfring_recv_burst(pfring *ring, pfring_packet_info *packets, u_int8_t num_packets, u_int8_t wait_for_packets)
int pfring_add_filtering_rule(pfring *ring, filtering_rule *rule_to_add)
void pfring_close(pfring *ring)
int pfring_purge_idle_hash_rules(pfring *ring, u_int16_t inactivity_sec)
int pfring_set_application_stats(pfring *ring, char *stats)
char * pfring_format_numbers(double val, char *buf, u_int buf_len, u_int8_t add_decimals)
int pfring_set_direction(pfring *ring, packet_direction direction)
pfring_if_t * pfring_findalldevs(void)
int pfring_recv_flow(pfring *ring, pfring_flow_update *flow, u_int8_t wait_for_flows)
int pfring_set_filtering_sampling_rate(pfring *ring, u_int32_t rate)
int pfring_get_selectable_fd(pfring *ring)
int pfring_get_device_clock(pfring *ring, struct timespec *ts)
int pfring_print_parsed_pkt(char *buff, u_int buff_len, const u_char *p, const struct pfring_pkthdr *h)
int pfring_remove_bpf_filter(pfring *ring)
u_int32_t pfring_get_ethtool_link_speed(const char *ifname)
int pfring_enable_hw_timestamp(pfring *ring, char *device_name, u_int8_t enable_rx, u_int8_t enable_tx)
int pfring_get_device_ifindex(pfring *ring, char *device_name, int *if_index)
int pfring_purge_idle_rules(pfring *ring, u_int16_t inactivity_sec)
int pfring_set_channel_mask(pfring *ring, u_int64_t channel_mask)
u_int32_t pfring_get_num_queued_pkts(pfring *ring)
void pfring_sync_indexes_with_kernel(pfring *ring)
int pfring_flush_tx_packets(pfring *ring)
int pfring_set_poll_duration(pfring *ring, u_int duration)
u_int16_t pfring_get_slot_header_len(pfring *ring)
int pfring_get_bound_device_address(pfring *ring, u_char mac_address[6])
u_int8_t pfring_get_num_rx_channels(pfring *ring)
int pfring_set_bpf_filter(pfring *ring, const char *filter_buffer)
int pfring_set_cluster_consumer(pfring *ring, u_int16_t cluster_id, u_int16_t queue_id, cluster_type the_type, u_int32_t options)
int pfring_get_filtering_rule_stats(pfring *ring, u_int16_t rule_id, char *stats, u_int *stats_len)
int pfring_bind(pfring *ring, char *device_name)
int pfring_send_get_time(pfring *ring, char *pkt, u_int pkt_len, struct timespec *ts)
int pfring_set_socket_mode(pfring *ring, socket_mode mode)
int pfring_read_ixia_hw_timestamp(u_char *buffer, u_int32_t buffer_len, struct timespec *ts)
void pfring_enable_hw_timestamp_debug()
u_int32_t pfring_get_interface_speed(pfring *ring)
int pfring_set_promisc(pfring *ring, int set_promisc)
void pfring_config(u_short cpu_percentage)
int pfring_read_arista_7150_hw_timestamp(u_char *buffer, u_int32_t buffer_len, u_int64_t *ns_ts)
int pfring_set_vlan_id(pfring *ring, u_int16_t vlan_id)
int pfring_disable_ring(pfring *ring)
int pfring_handle_arista_hw_timestamp(u_char *buffer, struct pfring_pkthdr *hdr)
int pfring_read_arista_7150_keyframe(u_char *buffer, u_int32_t buffer_len, u_int64_t *ns_ts, u_int32_t *ticks_ts)
int pfring_send_last_rx_packet(pfring *ring, int tx_interface_id)
int pfring_read_metawatch_device_info(u_char *buffer, u_int32_t buffer_len, u_int16_t *device_id, u_int8_t *port_id)
Definition pfring.h:194
Definition pfring.h:164
Definition pfring.h:105
Definition pfring.h:145
Definition pfring.h:172
Definition pfring.h:1399
Definition pfring.h:152
u_int32_t flags
Definition pfring.h:157
u_int16_t caplen
Definition pfring.h:155
u_int16_t len
Definition pfring.h:156
u_int32_t hash
Definition pfring.h:158
Definition pf_ring.h:411
Definition pfring.h:113
Definition pfring.h:1405