22#define PF_RING_ZC_ENABLE_VM_SUPPORT (1 << 0)
25#define PF_RING_ZC_DEVICE_ASYMMETRIC_RSS (1 << 0)
26#define PF_RING_ZC_DEVICE_FIXED_RSS_Q_0 (1 << 1)
27#define PF_RING_ZC_DEVICE_SW_TIMESTAMP (1 << 2)
28#define PF_RING_ZC_DEVICE_HW_TIMESTAMP (1 << 3)
29#define PF_RING_ZC_DEVICE_STRIP_HW_TIMESTAMP (1 << 4)
30#define PF_RING_ZC_DEVICE_IXIA_TIMESTAMP (1 << 5)
31#define PF_RING_ZC_DEVICE_NOT_REPROGRAM_RSS (1 << 6)
32#define PF_RING_ZC_DEVICE_CAPTURE_TX (1 << 7)
33#define PF_RING_ZC_DEVICE_IPONLY_RSS (1 << 8)
34#define PF_RING_ZC_DEVICE_NOT_PROMISC (1 << 9)
35#define PF_RING_ZC_DO_NOT_STRIP_FCS (1 << 10)
36#define PF_RING_ZC_DEVICE_ARISTA_TIMESTAMP (1 << 11)
37#define PF_RING_ZC_DEVICE_METAWATCH_TIMESTAMP (1 << 11)
38#define PF_RING_ZC_DEVICE_CAPTURE_INJECTED (1 << 12)
39#define PF_RING_ZC_DEVICE_HW_TIMESTAMP_UNSYNC (1 << 13)
41#define UNDEFINED_QUEUEID 0xFFFFFFFF
42#define QUEUE_IS_DEVICE(i) (i > 0xFFFF)
43#define QUEUEID_TO_IFINDEX(i) (i >> 16)
44#define IFINDEX_TO_QUEUEID(i) (i << 16)
46#define PF_RING_ZC_PKT_FLAGS_GOOD_IP_CS (1 << 0)
47#define PF_RING_ZC_PKT_FLAGS_BAD_IP_CS (1 << 1)
48#define PF_RING_ZC_PKT_FLAGS_GOOD_L4_CS (1 << 2)
49#define PF_RING_ZC_PKT_FLAGS_BAD_L4_CS (1 << 3)
52#define PF_RING_ZC_PKT_FLAGS_FLOW_OFFLOAD_UPDATE (1 << 6)
53#define PF_RING_ZC_PKT_FLAGS_FLOW_OFFLOAD_PACKET (1 << 7)
54#define PF_RING_ZC_PKT_FLAGS_FLOW_OFFLOAD_MARKER (1 << 8)
55#define PF_RING_ZC_PKT_FLAGS_FLOW_OFFLOAD_1ST (1 << 9)
57#define PF_RING_ZC_BUILTIN_GTP_HASH_FLAGS_V1 (1 << 0)
58#define PF_RING_ZC_BUILTIN_GTP_HASH_FLAGS_V2 (1 << 1)
59#define PF_RING_ZC_BUILTIN_GTP_HASH_FLAGS_GTPC (1 << 2)
60#define PF_RING_ZC_BUILTIN_GTP_HASH_FLAGS_GTPU (1 << 3)
63#define PF_RING_ZC_API_CLUSTER_INFO
66#define PF_RING_ZC_SEND_PKT_MULTI_MAX_QUEUES 64
67#define PF_RING_ZC_SEND_PKT_MULTI_V3_MAX_QUEUES 128
68#define PF_RING_ZC_BUFFER_HEAD_ROOM 64
74typedef void pfring_zc_cluster;
75typedef void pfring_zc_queue;
76typedef void pfring_zc_buffer_pool;
77typedef void pfring_zc_worker;
78typedef void pfring_zc_multi_queue;
151 pfring_zc_queue *queue
163 pfring_zc_cluster *cluster
176 pfring_zc_cluster *cluster
189 pfring_zc_queue *queue,
203 pfring_zc_queue *queue,
236 u_int32_t cluster_id,
237 u_int32_t buffer_len,
238 u_int32_t metadata_len,
239 u_int32_t tot_num_buffers,
240 int32_t numa_node_id,
241 const char *hugepages_mountpoint,
261 u_int32_t buffer_len,
262 u_int32_t metadata_len,
263 u_int32_t tot_num_buffers,
274 pfring_zc_cluster *cluster,
285 pfring_zc_cluster *cluster
294 pfring_zc_cluster *cluster
324 pfring_zc_cluster *cluster,
325 const char *device_name,
340 pfring_zc_cluster *cluster,
356 pfring_zc_cluster *cluster,
359 pfring_zc_queue **queue,
360 pfring_zc_buffer_pool **pool
374 pfring_zc_queue *queue
388 pfring_zc_queue *queue,
390 u_int8_t wait_for_incoming_packet
403 pfring_zc_queue *queue,
405 u_int32_t max_num_packets,
406 u_int8_t wait_for_incoming_packet
416 pfring_zc_queue *queue
425 pfring_zc_queue *queue
439 pfring_zc_queue *queue,
441 u_int8_t flush_packet
454 pfring_zc_queue *queue,
456 u_int8_t flush_packet,
470 pfring_zc_queue *queue,
472 u_int32_t num_packets,
473 u_int8_t flush_packets
483 pfring_zc_queue *queue
495 pfring_zc_queue *queue,
508 pfring_zc_queue *queue,
519 pfring_zc_queue *queue,
531 pfring_zc_queue *queue,
532 struct timespec *offset,
546 pfring_zc_queue *queue,
557 pfring_zc_queue *queue
570 pfring_zc_queue *queue,
571 hw_filtering_rule *rule
582 pfring_zc_queue *queue,
595 pfring_zc_queue *queue,
596 u_int8_t *indir_table
614 pfring_zc_queue *queue
624 pfring_zc_queue *queue,
635 pfring_zc_queue *queue
645 pfring_zc_queue *queue
656 pfring_zc_queue *queue,
669 pfring_zc_cluster *cluster
679 pfring_zc_cluster *cluster,
694pfring_zc_multi_queue *
696 pfring_zc_queue *queues[],
710 pfring_zc_multi_queue *multi_queue,
712 u_int64_t queues_mask,
713 u_int8_t flush_packet
726 pfring_zc_multi_queue *multi_queue,
728 __int128_t queues_mask,
729 u_int8_t flush_packet
752 pfring_zc_queue *in_queue,
766 pfring_zc_queue *in_queue,
780 pfring_zc_queue *in_queue,
810 pfring_zc_queue *in_queues[],
811 pfring_zc_queue *out_queues[],
812 u_int32_t num_in_queues,
813 u_int32_t num_out_queues,
814 pfring_zc_buffer_pool *working_set_pool,
818 void *filter_user_data,
820 void *distr_user_data,
821 u_int32_t active_wait,
822 int32_t core_id_affinity
830 pfring_zc_queue *in_queues[],
831 pfring_zc_queue *out_queues[],
832 u_int32_t num_in_queues,
833 u_int32_t num_out_queues,
834 pfring_zc_buffer_pool *working_set_pool,
838 void *distr_user_data,
839 u_int32_t active_wait,
840 int32_t core_id_affinity
861 pfring_zc_queue *in_queues[],
862 pfring_zc_multi_queue *out_multi_queue,
863 u_int32_t num_in_queues,
864 pfring_zc_buffer_pool *working_set_pool,
868 void *filter_user_data,
870 void *distr_user_data,
871 u_int32_t active_wait,
872 int32_t core_id_affinity
893 pfring_zc_queue *in_queues[],
894 pfring_zc_multi_queue *out_multi_queue,
895 u_int32_t num_in_queues,
896 pfring_zc_buffer_pool *working_set_pool,
900 void *filter_user_data,
902 void *distr_user_data,
903 u_int32_t active_wait,
904 int32_t core_id_affinity
912 pfring_zc_queue *in_queues[],
913 pfring_zc_multi_queue *out_multi_queue,
914 u_int32_t num_in_queues,
915 pfring_zc_buffer_pool *working_set_pool,
919 void *distr_user_data,
920 u_int32_t active_wait,
921 int32_t core_id_affinity
940 pfring_zc_queue *in_queues[],
941 pfring_zc_queue *out_queue,
942 u_int32_t num_in_queues,
943 pfring_zc_buffer_pool *working_set_pool,
947 u_int32_t active_wait,
948 int32_t core_id_affinity_sorter,
949 int32_t core_id_affinity_timer
958 pfring_zc_worker *worker
969pfring_zc_buffer_pool *
971 pfring_zc_cluster *cluster,
981 pfring_zc_buffer_pool *pool
991 pfring_zc_buffer_pool *pool
1001 pfring_zc_buffer_pool *pool,
1013 const char *hugepages_mountpoint
1022pfring_zc_buffer_pool *
1024 u_int32_t cluster_id,
1034 pfring_zc_buffer_pool *pool
1046 u_int32_t cluster_id,
1057 pfring_zc_queue *queue
1070 u_int32_t cluster_id,
1085 pfring_zc_cluster *cluster,
1098 pfring_zc_queue *queue,
1112 pfring_zc_cluster *cluster,
1113 const char *vm_monitor_socket_path
1123 pfring_zc_cluster *cluster
1134 const char *uio_device
1149 pfring_zc_queue *queue
1162 pfring_zc_queue *queue
1179 pfring_zc_queue *queue,
1195 pfring_zc_queue *queue
1208 pfring_zc_cluster *cluster,
1220 pfring_zc_cluster *cluster,
1234 pfring_zc_queue *queue,
1246 pfring_zc_queue *queue,
1278 pfring_zc_queue *queue,
1279 u_int32_t *expiration_epoch
1291 u_int32_t *expiration_epoch
PF_RING kernel module header file.
int pfring_zc_get_memory_info(pfring_zc_cluster *cluster, pfring_zc_cluster_mem_info *mem_info)
pfring_zc_worker * pfring_zc_run_balancer(pfring_zc_queue *in_queues[], pfring_zc_queue *out_queues[], u_int32_t num_in_queues, u_int32_t num_out_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_recv_policy recv_policy, pfring_zc_idle_callback idle_func, pfring_zc_distribution_func distr_func, void *distr_user_data, u_int32_t active_wait, int32_t core_id_affinity)
int64_t(* pfring_zc_filtering_func)(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *in_queue, void *user)
Definition pfring_zc.h:750
void pfring_zc_release_packet_handle(pfring_zc_cluster *cluster, pfring_zc_pkt_buff *pkt_handle)
void pfring_zc_pkt_buff_pull_only(pfring_zc_pkt_buff *pkt_handle, u_int16_t len)
int pfring_zc_get_device_clock(pfring_zc_queue *queue, struct timespec *ts)
u_int32_t pfring_zc_builtin_gre_hash(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue)
int pfring_zc_stats(pfring_zc_queue *queue, pfring_zc_stat *stats)
int pfring_zc_numa_set_numa_affinity(int node_id)
u_int32_t pfring_zc_get_cluster_id(pfring_zc_cluster *cluster)
pfring_zc_recv_policy
Definition pfring_zc.h:737
@ round_robin_bursts_policy
Definition pfring_zc.h:739
@ round_robin_policy
Definition pfring_zc.h:738
__int128_t(* pfring_zc_distribution_func_v3)(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *in_queue, void *user)
Definition pfring_zc.h:778
pfring_zc_worker * pfring_zc_run_fifo(pfring_zc_queue *in_queues[], pfring_zc_queue *out_queue, u_int32_t num_in_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_idle_callback callback, pfring_zc_distribution_func func, void *user_data, u_int32_t active_wait, int32_t core_id_affinity_sorter, int32_t core_id_affinity_timer)
int pfring_zc_vm_backend_enable(pfring_zc_cluster *cluster)
void pfring_zc_sync_queue(pfring_zc_queue *queue, pfring_zc_queue_mode direction)
u_char * pfring_zc_pkt_buff_data_from_cluster(pfring_zc_pkt_buff *pkt_handle, pfring_zc_cluster *cluster)
int pfring_zc_vm_register(pfring_zc_cluster *cluster, const char *vm_monitor_socket_path)
int pfring_zc_set_device_clock(pfring_zc_queue *queue, struct timespec *ts)
char * pfring_zc_version()
void pfring_zc_vm_guest_init(const char *uio_device)
u_int32_t pfring_zc_get_num_rx_channels(pfring_zc_queue *queue)
void pfring_zc_ipc_init(const char *hugepages_mountpoint)
pfring_zc_worker * pfring_zc_run_fanout_v2(pfring_zc_queue *in_queues[], pfring_zc_multi_queue *out_multi_queue, u_int32_t num_in_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_recv_policy recv_policy, pfring_zc_idle_callback idle_func, pfring_zc_filtering_func filter_func, void *filter_user_data, pfring_zc_distribution_func distr_func, void *distr_user_data, u_int32_t active_wait, int32_t core_id_affinity)
int pfring_zc_numa_get_cpu_node(int core_id)
int pfring_zc_set_device_app_name(pfring_zc_queue *queue, const char *name)
u_char * pfring_zc_pkt_buff_data(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue)
pfring_zc_buffer_pool * pfring_zc_create_buffer_pool(pfring_zc_cluster *cluster, u_int32_t pool_len)
int pfring_zc_send_pkt(pfring_zc_queue *queue, pfring_zc_pkt_buff **pkt_handle, u_int8_t flush_packet)
void pfring_zc_set_rxfh_indir(pfring_zc_queue *queue, u_int8_t *indir_table)
int pfring_zc_ipc_queue_in_use_from_queue(pfring_zc_queue *queue, pfring_zc_queue_mode queue_mode)
int pfring_zc_remove_bpf_filter(pfring_zc_queue *queue)
int pfring_zc_adjust_device_clock(pfring_zc_queue *queue, struct timespec *offset, int8_t sign)
int pfring_zc_check_license()
u_int32_t pfring_zc_builtin_gtp_hash(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue, u_int32_t *flags)
int pfring_zc_send_pkt_multi(pfring_zc_multi_queue *multi_queue, pfring_zc_pkt_buff **pkt_handle, u_int64_t queues_mask, u_int8_t flush_packet)
pfring_zc_queue_mode
Definition pfring_zc.h:83
@ tx_only
Definition pfring_zc.h:85
@ rx_only
Definition pfring_zc.h:84
@ management_only
Definition pfring_zc.h:86
pfring_zc_queue * pfring_zc_create_queue(pfring_zc_cluster *cluster, u_int32_t queue_len)
void pfring_zc_destroy_cluster(pfring_zc_cluster *cluster)
pfring_zc_worker * pfring_zc_run_balancer_v2(pfring_zc_queue *in_queues[], pfring_zc_queue *out_queues[], u_int32_t num_in_queues, u_int32_t num_out_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_recv_policy recv_policy, pfring_zc_idle_callback idle_func, pfring_zc_filtering_func filter_func, void *filter_user_data, pfring_zc_distribution_func distr_func, void *distr_user_data, u_int32_t active_wait, int32_t core_id_affinity)
int pfring_zc_queue_is_empty(pfring_zc_queue *queue)
int pfring_zc_send_pkt_get_time(pfring_zc_queue *queue, pfring_zc_pkt_buff **pkt_handle, u_int8_t flush_packet, struct timespec *ts)
int pfring_zc_check_device_license_by_name(char *device_name, u_int32_t *expiration_epoch)
pfring_zc_pkt_buff * pfring_zc_pkt_data_buff(u_char *data, pfring_zc_cluster *cluster)
void pfring_zc_close_device(pfring_zc_queue *queue)
int pfring_zc_set_bpf_filter(pfring_zc_queue *queue, const char *filter)
void(* pfring_zc_idle_callback)()
Definition pfring_zc.h:788
int pfring_zc_set_proc_stats(pfring_zc_cluster *cluster, char *stats)
u_int32_t pfring_zc_builtin_ip_hash(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue)
u_int32_t pfring_zc_get_queue_speed(pfring_zc_queue *queue)
pfring_zc_worker * pfring_zc_run_fanout_v3(pfring_zc_queue *in_queues[], pfring_zc_multi_queue *out_multi_queue, u_int32_t num_in_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_recv_policy recv_policy, pfring_zc_idle_callback idle_func, pfring_zc_filtering_func filter_func, void *filter_user_data, pfring_zc_distribution_func_v3 distr_func, void *distr_user_data, u_int32_t active_wait, int32_t core_id_affinity)
void pfring_zc_get_queue_settings(pfring_zc_queue *queue, pfring_zc_queue_info *info)
int pfring_zc_ipc_queue_in_use(u_int32_t cluster_id, u_int32_t queue_id, pfring_zc_queue_mode queue_mode)
void pfring_zc_kill_worker(pfring_zc_worker *worker)
u_int32_t pfring_zc_get_queue_id(pfring_zc_queue *queue)
int pfring_zc_set_device_proc_stats(pfring_zc_queue *queue, const char *stats)
int64_t(* pfring_zc_distribution_func)(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *in_queue, void *user)
Definition pfring_zc.h:764
int pfring_zc_send_pkt_burst(pfring_zc_queue *queue, pfring_zc_pkt_buff **pkt_handles, u_int32_t num_packets, u_int8_t flush_packets)
pfring_zc_cluster * pfring_zc_create_cluster(u_int32_t cluster_id, u_int32_t buffer_len, u_int32_t metadata_len, u_int32_t tot_num_buffers, int32_t numa_node_id, const char *hugepages_mountpoint, u_int32_t flags)
int pfring_zc_send_pkt_multi_v3(pfring_zc_multi_queue *multi_queue, pfring_zc_pkt_buff **pkt_handle, __int128_t queues_mask, u_int8_t flush_packet)
pfring_zc_worker * pfring_zc_run_fanout(pfring_zc_queue *in_queues[], pfring_zc_multi_queue *out_multi_queue, u_int32_t num_in_queues, pfring_zc_buffer_pool *working_set_pool, pfring_zc_recv_policy recv_policy, pfring_zc_idle_callback idle_func, pfring_zc_distribution_func distr_func, void *distr_user_data, u_int32_t active_wait, int32_t core_id_affinity)
int pfring_zc_create_queue_pool_pair(pfring_zc_cluster *cluster, u_int32_t queue_len, u_int32_t pool_len, pfring_zc_queue **queue, pfring_zc_buffer_pool **pool)
pfring_zc_multi_queue * pfring_zc_create_multi_queue(pfring_zc_queue *queues[], u_int32_t num_queues)
int pfring_zc_ipc_queue_in_use_from_cluster(pfring_zc_cluster *cluster, u_int32_t queue_id, pfring_zc_queue_mode queue_mode)
int pfring_zc_check_device_license(pfring_zc_queue *queue, u_int32_t *expiration_epoch)
pfring_zc_buffer_pool * pfring_zc_ipc_attach_buffer_pool(u_int32_t cluster_id, u_int32_t pool_id)
int pfring_zc_queue_is_full(pfring_zc_queue *queue)
int pfring_zc_recv_pkt_burst(pfring_zc_queue *queue, pfring_zc_pkt_buff **pkt_handles, u_int32_t max_num_packets, u_int8_t wait_for_incoming_packet)
int pfring_zc_remove_hw_rule(pfring_zc_queue *queue, u_int16_t rule_id)
u_int32_t pfring_zc_builtin_5tuple_hash(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue)
pfring_zc_pkt_buff * pfring_zc_get_packet_handle_from_pool(pfring_zc_buffer_pool *pool)
u_char * pfring_zc_pkt_buff_push(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue, u_int16_t len)
void pfring_zc_ipc_detach_queue(pfring_zc_queue *queue)
int pfring_zc_recv_pkt(pfring_zc_queue *queue, pfring_zc_pkt_buff **pkt_handle, u_int8_t wait_for_incoming_packet)
int pfring_zc_add_hw_rule(pfring_zc_queue *queue, hw_filtering_rule *rule)
u_char * pfring_zc_pkt_buff_pull(pfring_zc_pkt_buff *pkt_handle, pfring_zc_queue *queue, u_int16_t len)
pfring_zc_pkt_buff * pfring_zc_get_packet_handle(pfring_zc_cluster *cluster)
int pfring_zc_precompute_cluster_settings(pfring_zc_cluster_info *info, u_int32_t buffer_len, u_int32_t metadata_len, u_int32_t tot_num_buffers, u_int32_t flags)
pfring_zc_queue * pfring_zc_ipc_attach_queue(u_int32_t cluster_id, u_int32_t queue_id, pfring_zc_queue_mode queue_mode)
void pfring_zc_release_packet_handle_to_pool(pfring_zc_buffer_pool *pool, pfring_zc_pkt_buff *pkt_handle)
void pfring_zc_queue_breakloop(pfring_zc_queue *queue)
void pfring_zc_ipc_detach_buffer_pool(pfring_zc_buffer_pool *pool)
u_int32_t pfring_zc_get_pool_id(pfring_zc_buffer_pool *pool)
int pfring_zc_set_app_name(pfring_zc_cluster *cluster, const char *name)
pfring_zc_queue * pfring_zc_open_device(pfring_zc_cluster *cluster, const char *device_name, pfring_zc_queue_mode queue_mode, u_int32_t flags)
Definition pfring_zc.h:128
u_int32_t real_buffer_len
Definition pfring_zc.h:131
u_int32_t buffer_len
Definition pfring_zc.h:130
u_int64_t total_memory
Definition pfring_zc.h:129
Definition pfring_zc.h:137
void * base_addr
Definition pfring_zc.h:138
u_int64_t size
Definition pfring_zc.h:139
Definition pfring_zc.h:109
u_int16_t len
Definition pfring_zc.h:110
pfring_zc_timespec ts
Definition pfring_zc.h:113
u_int32_t hash
Definition pfring_zc.h:112
u_int16_t flags
Definition pfring_zc.h:111
Definition pfring_zc.h:120
u_int32_t metadata_len
Definition pfring_zc.h:122
u_int32_t buffer_len
Definition pfring_zc.h:121
Definition pfring_zc.h:92
Definition pfring_zc.h:101