24#include <netinet/in.h>
27#if __BYTE_ORDER == __LITTLE_ENDIAN
28#define __LITTLE_ENDIAN_BITFIELD
29#elif __BYTE_ORDER == __BIG_ENDIAN
30#define __BIG_ENDIAN_BITFIELD
32# error "Unknown byte order"
38#define RING_VERSION "9.2.0"
39#define RING_VERSION_NUM 0x090200
43#define RING_FLOWSLOT_VERSION 21
46#define RING_MAGIC_VALUE 0x88
48#define RING_USE_SOCKADDR_LL
50#define MIN_NUM_SLOTS 512
51#define DEFAULT_NUM_SLOTS 4096
52#define DEFAULT_BUCKET_LEN 128
53#define MAX_NUM_DEVICES 256
55#define MAX_NUM_RING_SOCKETS 512
57#define MAX_CLUSTER_QUEUES 64
60#define DEFAULT_MIN_PKT_QUEUED 128
61#define DEFAULT_POLL_WATERMARK_TIMEOUT 0
63#define FILTERING_SAMPLING_RATIO 10
66#define SO_ADD_TO_CLUSTER 99
67#define SO_REMOVE_FROM_CLUSTER 100
68#define SO_SET_STRING 101
69#define SO_ADD_FILTERING_RULE 102
70#define SO_REMOVE_FILTERING_RULE 103
71#define SO_TOGGLE_FILTER_POLICY 104
72#define SO_SET_SAMPLING_RATE 105
73#define SO_ACTIVATE_RING 106
74#define SO_RING_BUCKET_LEN 107
75#define SO_SET_CHANNEL_ID 108
76#define SO_PURGE_IDLE_HASH_RULES 109
77#define SO_SET_APPL_NAME 110
78#define SO_SET_PACKET_DIRECTION 111
79#define SO_SET_MASTER_RING 112
80#define SO_ADD_HW_FILTERING_RULE 113
81#define SO_DEL_HW_FILTERING_RULE 114
82#define SO_DISCARD_INJECTED_PKTS 115
83#define SO_DEACTIVATE_RING 116
84#define SO_SET_POLL_WATERMARK 117
85#define SO_SET_VIRTUAL_FILTERING_DEVICE 118
86#define SO_REHASH_RSS_PACKET 119
87#define SO_SET_FILTERING_SAMPLING_RATE 120
88#define SO_SET_POLL_WATERMARK_TIMEOUT 121
89#define SO_SET_DEV_TIME 122
90#define SO_ADJ_DEV_TIME 123
91#define SO_SHUTDOWN_RING 124
92#define SO_PURGE_IDLE_RULES 125
93#define SO_SET_SOCKET_MODE 126
94#define SO_USE_SHORT_PKT_HEADER 127
95#define SO_CONTROL_DEV_QUEUE 128
96#define SO_ENABLE_RX_PACKET_BOUNCE 131
97#define SO_SET_APPL_STATS 133
98#define SO_SET_STACK_INJECTION_MODE 134
99#define SO_CREATE_CLUSTER_REFEREE 135
100#define SO_PUBLISH_CLUSTER_OBJECT 136
101#define SO_LOCK_CLUSTER_OBJECT 137
102#define SO_UNLOCK_CLUSTER_OBJECT 138
103#define SO_SET_CUSTOM_BOUND_DEV_NAME 139
104#define SO_SET_IFF_PROMISC 140
105#define SO_SET_VLAN_ID 141
108#define SO_GET_RING_VERSION 170
109#define SO_GET_FILTERING_RULE_STATS 171
110#define SO_GET_HASH_FILTERING_RULE_STATS 172
111#define SO_GET_ZC_DEVICE_INFO 173
112#define SO_GET_NUM_RX_CHANNELS 174
113#define SO_GET_RING_ID 175
114#define SO_GET_BPF_EXTENSIONS 176
115#define SO_GET_BOUND_DEVICE_ADDRESS 177
116#define SO_GET_NUM_QUEUED_PKTS 178
117#define SO_GET_PKT_HEADER_LEN 179
118#define SO_GET_LOOPBACK_TEST 180
119#define SO_GET_BUCKET_LEN 181
120#define SO_GET_DEVICE_TYPE 182
121#define SO_GET_EXTRA_DMA_MEMORY 183
122#define SO_GET_BOUND_DEVICE_IFINDEX 184
123#define SO_GET_DEVICE_IFINDEX 185
124#define SO_GET_APPL_STATS_FILE_NAME 186
125#define SO_GET_LINK_STATUS 187
126#define SO_GET_DEV_TX_TIME 188
127#define SO_GET_DEV_STATS 189
128#define SO_SELECT_ZC_DEVICE 190
129#define SO_GET_CLUSTER_OBJECT_INFO 191
132#define PF_RING_ERROR_GENERIC -1
133#define PF_RING_ERROR_INVALID_ARGUMENT -2
134#define PF_RING_ERROR_NO_PKT_AVAILABLE -3
135#define PF_RING_ERROR_NO_TX_SLOT_AVAILABLE -4
136#define PF_RING_ERROR_WRONG_CONFIGURATION -5
137#define PF_RING_ERROR_END_OF_DEMO_MODE -6
138#define PF_RING_ERROR_NOT_SUPPORTED -7
139#define PF_RING_ERROR_INVALID_LIB_VERSION -8
140#define PF_RING_ERROR_UNKNOWN_ADAPTER -9
141#define PF_RING_ERROR_NOT_ENOUGH_MEMORY -10
142#define PF_RING_ERROR_INVALID_STATUS -11
143#define PF_RING_ERROR_RING_NOT_ENABLED -12
144#define PF_RING_ERROR_BAD_IFNAME -13
145#define PF_RING_ERROR_MOD_NOT_LOADED -14
146#define PF_RING_ERROR_UNABLE_TO_MAP -15
147#define PF_RING_ERROR_UNABLE_TO_GET_INFO -16
148#define PF_RING_ERROR_MMAP_FAILURE -17
149#define PF_RING_ERROR_INIT_FAILURE -18
151#define REFLECTOR_NAME_LEN 8
153#ifndef IN6ADDR_ANY_INIT
154#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
161#if(LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
164typedef long __kernel_time_t;
167 __kernel_time_t tv_sec;
168 __kernel_suseconds_t tv_usec;
172 __kernel_time_t tv_sec;
176struct timespec ns_to_timespec(const s64 nsec);
177struct timeval ns_to_timeval(const s64 nsec);
179#define ktime_to_timeval(kt) ns_to_timeval((kt))
197 int16_t payload_offset;
204#define REFLECT_PACKET_DEVICE_NONE 0
211#define ipv4_tos ip_tos
212#define ipv6_tos ip_tos
213#define ipv4_src ip_src.v4
214#define ipv4_dst ip_dst.v4
215#define ipv6_src ip_src.v6
216#define ipv6_dst ip_dst.v6
217#define host4_low host_low.v4
218#define host4_high host_high.v4
219#define host6_low host_low.v6
220#define host6_high host_high.v6
221#define host4_peer_a host_peer_a.v4
222#define host4_peer_b host_peer_b.v4
223#define host6_peer_a host_peer_a.v6
224#define host6_peer_b host_peer_b.v6
232#define NEXTHDR_IPV6 41
233#define NEXTHDR_ROUTING 43
234#define NEXTHDR_FRAGMENT 44
235#define NEXTHDR_ESP 50
236#define NEXTHDR_AUTH 51
237#define NEXTHDR_NONE 59
238#define NEXTHDR_DEST 60
239#define NEXTHDR_MOBILITY 135
242#if defined(__LITTLE_ENDIAN_BITFIELD)
245#elif defined(__BIG_ENDIAN_BITFIELD)
249 u_int8_t flow_lbl[3];
250 u_int16_t payload_len;
253 struct in6_addr saddr;
254 struct in6_addr daddr;
263#define GRE_HEADER_CHECKSUM 0x8000
264#define GRE_HEADER_ROUTING 0x4000
265#define GRE_HEADER_KEY 0x2000
266#define GRE_HEADER_SEQ_NUM 0x1000
267#define GRE_HEADER_VERSION 0x0007
270 u_int16_t flags_and_version;
275#define GTP_SIGNALING_PORT 2123
276#define GTP_U_DATA_PORT 2152
278#define GTP_VERSION_1 0x1
279#define GTP_VERSION_2 0x2
280#define GTP_PROTOCOL_TYPE 0x1
283#define GTP_FLAGS_VERSION 0xE0
284#define GTP_FLAGS_VERSION_SHIFT 5
285#define GTP_FLAGS_PROTOCOL_TYPE 0x10
286#define GTP_FLAGS_RESERVED 0x08
287#define GTP_FLAGS_EXTENSION 0x04
288#define GTP_FLAGS_SEQ_NUM 0x02
289#define GTP_FLAGS_NPDU_NUM 0x01
291 u_int8_t message_type;
292 u_int16_t payload_len;
300 u_int8_t next_ext_hdr;
305#define GTP_EXT_HDR_LEN_UNIT_BYTES 4
313#define NO_TUNNEL_ID 0xFFFFFFFF
318 u_int8_t tunneled_dmac[ETH_ALEN], tunneled_smac[ETH_ALEN];
319 u_int16_t tunneled_eth_type;
320 u_int8_t tunneled_ip_version;
321 u_int8_t tunneled_proto;
322 ip_addr tunneled_ip_src, tunneled_ip_dst;
323 u_int16_t tunneled_l4_src_port, tunneled_l4_dst_port;
327#define MOBILE_IP_PORT 434
330 u_int8_t message_type, next_header;
334#define VXLAN_IP_PORT 4789
350 u_int8_t dmac[ETH_ALEN], smac[ETH_ALEN];
353 u_int16_t qinq_vlan_id;
355 u_int8_t l3_proto, ip_tos;
357 u_int16_t l4_src_port, l4_dst_port;
358 u_int8_t icmp_type, icmp_code;
361 u_int32_t seq_num, ack_num;
364 int32_t last_matched_rule_id;
368#define UNKNOWN_INTERFACE -1
369#define FAKE_PACKET -2
375 u_int64_t timestamp_ns;
377#define PKT_FLAGS_CHECKSUM_OFFLOAD 1 << 0
378#define PKT_FLAGS_CHECKSUM_OK 1 << 1
379#define PKT_FLAGS_IP_MORE_FRAG 1 << 2
380#define PKT_FLAGS_IP_FRAG_OFFSET 1 << 3
381#define PKT_FLAGS_VLAN_HWACCEL 1 << 4
382#define PKT_FLAGS_FLOW_HIT 1 << 5
383#define PKT_FLAGS_FLOW_MISS 1 << 6
384#define PKT_FLAGS_FLOW_UNHANDLED 1 << 7
387 u_int8_t rx_direction;
399 int32_t bounce_interface;
401 struct sk_buff *reserved;
424#define MAX_NUM_LIST_ELEMENTS MAX_NUM_RING_SOCKETS
428 u_int32_t num_elements, top_element_id;
429 spinlock_t list_lock;
430 void *list_elements[MAX_NUM_LIST_ELEMENTS];
433void init_lockless_list(lockless_list *l);
434int lockless_list_add(lockless_list *l,
void *elem);
435int lockless_list_remove(lockless_list *l,
void *elem);
436void* lockless_list_get_next(lockless_list *l, u_int32_t *last_list_idx);
437void* lockless_list_get_first(lockless_list *l, u_int32_t *last_list_idx);
438void lockless_list_empty(lockless_list *l, u_int8_t free_memory);
439void term_lockless_list(lockless_list *l, u_int8_t free_memory);
446 u_int8_t smac[ETH_ALEN], dmac[ETH_ALEN];
452 ip_addr shost_mask, dhost_mask;
453 u_int16_t sport_low, sport_high;
454 u_int16_t dport_low, dport_high;
459filtering_rule_core_fields;
465#define FILTER_TUNNEL_ID_FLAG 1 << 0
466 u_int16_t optional_fields;
471 ip_addr shost_mask, dhost_mask;
474 char payload_pattern[32];
477filtering_rule_extended_fields;
481#define FILTERING_RULE_AUTO_RULE_ID 0xFFFF
484 forward_packet_and_stop_rule_evaluation = 0,
485 dont_forward_packet_and_stop_rule_evaluation,
486 execute_action_and_continue_rule_evaluation,
487 execute_action_and_stop_rule_evaluation,
488 forward_packet_add_rule_and_stop_rule_evaluation,
489 reflect_packet_and_stop_rule_evaluation,
490 reflect_packet_and_continue_rule_evaluation,
491 bounce_packet_and_stop_rule_evaluation,
492 bounce_packet_and_continue_rule_evaluation
493} rule_action_behaviour;
497 pkt_detail_aggregation
501 rx_and_tx_direction = 0,
507 send_and_recv_mode = 0,
514 unsigned long jiffies_last_match;
515 struct net_device *reflector_dev;
523 rule_action_behaviour rule_action;
524 u_int8_t balance_id, balance_pool;
527 u_int8_t bidirectional;
528 filtering_rule_core_fields core_fields;
529 filtering_rule_extended_fields extended_fields;
530 char reflector_device_name[REFLECTOR_NAME_LEN];
532 filtering_internals internals;
542 u_int32_t s_addr, d_addr;
543 u_int16_t s_port, d_port;
546intel_82599_five_tuple_filter_hw_rule;
551 u_int32_t s_addr, d_addr;
552 u_int16_t s_port, d_port;
555intel_82599_perfect_filter_hw_rule;
586} silicom_redirector_rule_type;
589 silicom_redirector_rule_type rule_type;
591 u_int8_t rule_target_port;
592 u_int16_t vlan_id_low, vlan_id_high;
595 u_int32_t src_mask, dst_mask;
596 u_int16_t src_port_low, src_port_high;
597 u_int16_t dst_port_low, dst_port_high;
599silicom_redirector_hw_rule;
604} generic_default_action_type;
612} generic_flow_rule_action_type;
616 generic_flow_rule_action_type action;
620generic_flow_id_hw_rule;
624 generic_flow_rule_action_type action;
638generic_flow_tuple_hw_rule;
641 intel_82599_five_tuple_rule,
642 intel_82599_perfect_filter_rule,
643 silicom_redirector_rule,
644 generic_flow_id_rule,
645 generic_flow_tuple_rule,
646} hw_filtering_rule_type;
649 hw_filtering_rule_type rule_family_type;
660 intel_82599_five_tuple_filter_hw_rule five_tuple_rule;
661 intel_82599_perfect_filter_hw_rule perfect_rule;
662 silicom_redirector_hw_rule redirector_rule;
663 generic_flow_id_hw_rule flow_id_rule;
664 generic_flow_tuple_hw_rule flow_tuple_rule;
669#define MAGIC_HW_FILTERING_RULE_REQUEST 0x29010020
673#define ETHTOOL_PFRING_SRXFTCHECK 0x10000000
674#define ETHTOOL_PFRING_SRXFTRLDEL 0x10000031
675#define ETHTOOL_PFRING_SRXFTRLINS 0x10000032
677#if defined(I82599_HW_FILTERING_SUPPORT) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40))
678#define FLOW_EXT 0x80000000
679union _kcompat_ethtool_flow_union {
680 struct ethtool_tcpip4_spec tcp_ip4_spec;
681 struct ethtool_usrip4_spec usr_ip4_spec;
684struct _kcompat_ethtool_flow_ext {
689struct _kcompat_ethtool_rx_flow_spec {
691 union _kcompat_ethtool_flow_union h_u;
692 struct _kcompat_ethtool_flow_ext h_ext;
693 union _kcompat_ethtool_flow_union m_u;
694 struct _kcompat_ethtool_flow_ext m_ext;
698#define ethtool_rx_flow_spec _kcompat_ethtool_rx_flow_spec
706} hw_filtering_rule_command;
725 u_int8_t l4_protocol;
737#define PF_RING_FLOW_UPDATE_CAUSE_SW 0
738#define PF_RING_FLOW_UPDATE_CAUSE_TIMEOUT 1
739#define PF_RING_FLOW_UPDATE_CAUSE_TCP_TERM 2
740#define PF_RING_FLOW_UPDATE_CAUSE_PERIODIC 3
741#define PF_RING_FLOW_UPDATE_CAUSE_PROBE 4
742#define PF_RING_FLOW_UPDATE_CAUSE_UNKNOWN 5
750 u_int32_t packets_out;
751 u_int32_t packets_in;
766 u_int8_t l4_protocol;
775 u_int8_t start_of_flow;
781 u_int32_t fwd_packets;
782 u_int32_t rev_packets;
795 generic_flow_rule_action_type action;
798generic_flow_feedback;
802extern struct pf_ring_socket *pfr;
806typedef int (*five_tuple_rule_handler)(
struct pf_ring_socket *pfr,
807 hw_filtering_rule *rule,
808 hw_filtering_rule_command request);
809typedef int (*perfect_filter_hw_rule_handler)(
struct pf_ring_socket *pfr,
810 hw_filtering_rule *rule,
811 hw_filtering_rule_command request);
814 five_tuple_rule_handler five_tuple_handler;
815 perfect_filter_hw_rule_handler perfect_filter_handler;
817hw_filtering_device_handler;
822#define DEFAULT_RING_HASH_SIZE 4096
833 ip_addr host_peer_a, host_peer_b;
834 u_int16_t port_peer_a, port_peer_b;
836 rule_action_behaviour rule_action;
837 char reflector_device_name[REFLECTOR_NAME_LEN];
839 filtering_internals internals;
846 u_int64_t match_forward;
847 u_int32_t inactivity;
849hash_filtering_rule_stats;
854 hash_filtering_rule rule;
857 u_int64_t match_forward;
860sw_filtering_hash_bucket;
864#define RING_MIN_SLOT_SIZE (60+sizeof(struct pfring_pkthdr))
865#define RING_MAX_SLOT_SIZE (1514+sizeof(struct pfring_pkthdr))
867#if !defined(__cplusplus)
869#define min_val(a,b) ((a < b) ? a : b)
870#define max_val(a,b) ((a > b) ? a : b)
880 u_int16_t version, sample_rate;
881 u_int32_t min_num_slots, slot_len, data_len;
883 volatile u_int64_t insert_off;
884 u_int64_t kernel_remove_off;
885 u_int64_t tot_pkts, tot_lost;
886 volatile u_int64_t tot_insert;
887 u_int64_t kernel_tot_read;
888 u_int64_t tot_fwd_ok, tot_fwd_notok;
889 u_int64_t good_pkt_sent, pkt_send_error;
891 char padding[128-104];
893 char k_padding[4096-128];
897 volatile u_int64_t tot_read;
898 volatile u_int64_t remove_off ;
899 char u_padding[4096-16];
907FlowSlotInfo *getRingPtr(
void);
908int allocateRing(
char *deviceName, u_int32_t numSlots, u_int32_t bucketLen, u_int32_t sampleRate);
909unsigned int pollRing(
struct file *fp,
struct poll_table_struct * wait);
910void deallocateRing(
void);
916#define SOCK_RING PF_RING
919#define SIORINGPOLL 0x8888
926 struct pf_ring_socket *pf_ring_sk;
934typedef int (*zc_dev_wait_packet)(
void *rx_adapter,
int mode);
935typedef int (*zc_dev_notify)(
void *rx_adapter,
void *tx_adapter, u_int8_t device_in_use);
936typedef int (*zc_dev_set_time)(
void *rx_adapter, u_int64_t time_ns);
937typedef int (*zc_dev_adjust_time)(
void *rx_adapter, int64_t offset_ns);
938typedef int (*zc_dev_get_tx_time)(
void *tx_adapter, u_int64_t *time_ns);
939typedef int (*zc_dev_control_queue)(
void *rx_adapter, u_int8_t enable);
940typedef int (*zc_dev_get_stats)(
void *rx_adapter, u_int64_t *rx_missed);
943 zc_dev_wait_packet wait_packet;
944 zc_dev_notify usage_notification;
945 zc_dev_set_time set_time;
946 zc_dev_adjust_time adjust_time;
947 zc_dev_get_tx_time get_tx_time;
948 zc_dev_control_queue control_queue;
949 zc_dev_get_stats get_stats;
954 add_device_mapping = 0,
955 remove_device_mapping
969 intel_ixgbe_82599_ts,
978 u_int32_t packet_memory_num_slots;
979 u_int32_t packet_memory_slot_len;
980 u_int32_t descr_packet_memory_tot_len;
981 u_int16_t registers_index;
982 u_int16_t stats_index;
984 u_int32_t num_queues;
993 u_int32_t phys_card_memory_len;
994 zc_dev_model device_model;
999 zc_memory_info mem_info;
1000 u_int16_t channel_id;
1001 void *rx_descr_packet_memory;
1002 void *tx_descr_packet_memory;
1003 char *phys_card_memory;
1004 struct net_device *dev;
1005 struct device *hwdev;
1006 u_char device_address[6];
1008 wait_queue_head_t *packet_waitqueue;
1010 void *packet_waitqueue;
1012 u_int8_t *interrupt_received;
1016 zc_dev_callbacks callbacks;
1025 zc_dev_operation operation;
1026 char device_name[IFNAMSIZ];
1028 zc_dev_model device_model;
1034#define RING_ANY_CHANNEL ((u_int64_t)-1)
1035#define MAX_NUM_RX_CHANNELS 64
1036#define UNKNOWN_NUM_RX_CHANNELS 1
1038#define RING_ANY_VLAN ((u_int16_t)0xFFFF)
1039#define RING_NO_VLAN ((u_int16_t)0)
1044 cluster_per_flow = 0,
1045 cluster_round_robin,
1046 cluster_per_flow_2_tuple,
1047 cluster_per_flow_4_tuple,
1048 cluster_per_flow_5_tuple,
1049 cluster_per_flow_tcp_5_tuple,
1051 cluster_per_inner_flow,
1052 cluster_per_inner_flow_2_tuple,
1053 cluster_per_inner_flow_4_tuple,
1054 cluster_per_inner_flow_5_tuple,
1055 cluster_per_inner_flow_tcp_5_tuple,
1057 cluster_per_flow_ip_5_tuple,
1058 cluster_per_inner_flow_ip_5_tuple,
1059 cluster_per_flow_ip_with_dup_tuple,
1060 cluster_per_flow_ip_with_dup_tuple_ext
1063#define MAX_CLUSTER_TYPE_ID cluster_per_flow_ip_with_dup_tuple_ext
1066 u_int16_t cluster_id;
1068#define CLUSTER_OPTION_RELAXED_DISTRIBUTION (1<<0)
1070 cluster_type the_type;
1074 standard_nic_family = 0,
1076} pfring_device_type;
1079 char device_name[IFNAMSIZ];
1080 pfring_device_type device_type;
1083 struct proc_dir_entry *proc_entry;
1085virtual_filtering_device_info;
1090 u_int32_t cluster_id;
1091 u_int32_t recovered;
1095 u_int32_t cluster_id;
1096 u_int32_t object_type;
1097 u_int32_t object_id;
1101 u_int32_t cluster_id;
1102 u_int32_t object_type;
1103 u_int32_t object_id;
1104 u_int32_t lock_mask;
1106 u_int32_t locked_mask;
1114} cluster_client_type;
1120#if(LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0))
1121#ifndef netdev_notifier_info_to_dev
1122#define netdev_notifier_info_to_dev(a) ((struct net_device*)a)
1133struct ring_cluster {
1134 u_int32_t cluster_id;
1135 u_int16_t num_cluster_queues;
1136 u_int16_t max_queue_index;
1137 u_int16_t hashing_id;
1138 u_int8_t relaxed_distribution;
1140 cluster_type hashing_mode;
1141 struct sock *sk[MAX_CLUSTER_QUEUES];
1148 struct ring_cluster cluster;
1149 struct list_head list;
1150} ring_cluster_element;
1152#define MAX_NUM_ZC_BOUND_SOCKETS MAX_NUM_RING_SOCKETS
1155 u8 num_bound_sockets;
1157 struct list_head list;
1164 struct pf_ring_socket *bound_sockets[MAX_NUM_ZC_BOUND_SOCKETS];
1168#define MAX_NUM_IFINDEX 0x7FFFFFFF
1169#define MAX_NUM_DEV_IDX 1024
1171#define ANY_IFINDEX (MAX_NUM_IFINDEX-1)
1172#define NONE_IFINDEX (MAX_NUM_IFINDEX-2)
1178 virtual_filtering_device_info info;
1179 struct list_head list;
1180} virtual_filtering_device_element;
1186 u_int8_t direct_mapping;
1193 struct net_device *dev;
1198 char device_name[IFNAMSIZ];
1200 pfring_device_type device_type;
1203 u_int8_t do_not_remove_promisc;
1204 atomic_t promisc_users;
1207 struct proc_dir_entry *proc_entry;
1208 struct proc_dir_entry *proc_info_entry;
1211 u_int8_t is_zc_device;
1212 zc_dev_model zc_dev_model;
1213 u_int32_t num_zc_dev_rx_queues;
1214 u_int32_t num_zc_rx_slots;
1215 u_int32_t num_zc_tx_slots;
1219 u_int16_t num_filters;
1220 hw_filtering_device_handler filter_handlers;
1223 struct list_head device_list;
1228struct dma_memory_info {
1229 u_int32_t num_chunks, chunk_len;
1230 u_int32_t num_slots, slot_len;
1231 unsigned long *virtual_addr;
1232 u_int64_t *dma_addr;
1233 struct device *hwdev;
1239 u_int32_t object_type;
1240 u_int32_t object_id;
1241 u_int32_t lock_bitmap;
1243 struct list_head list;
1246struct cluster_referee {
1249 u_int8_t master_running;
1250 struct list_head objects_list;
1252 struct list_head list;
1257typedef u_int32_t (*do_rehash_rss)(
struct sk_buff *skb,
struct pfring_pkthdr *hdr);
1261#define NUM_FRAGMENTS_HASH_SLOTS 4096
1262#define MAX_CLUSTER_FRAGMENTS_LEN 8*NUM_FRAGMENTS_HASH_SLOTS
1264struct hash_fragment_node {
1266 u_int32_t ipv4_src_host, ipv4_dst_host;
1267 u_int16_t ip_fragment_id;
1270 u_int8_t cluster_app_id;
1273 unsigned long expire_jiffies;
1276 struct list_head frag_list;
1284struct pf_ring_socket {
1285 struct mutex ring_config_lock;
1287 u_int8_t ring_active, ring_shutdown, num_rx_channels, num_bound_devices;
1288 pf_ring_device *ring_dev;
1292 pf_ring_device *last_bind_dev;
1294 DECLARE_BITMAP(pf_dev_mask, MAX_NUM_DEV_IDX );
1297 packet_direction direction;
1299 pkt_header_len header_len;
1300 u_int8_t stack_injection_mode;
1301 u_int8_t discard_injected_pkts;
1302 u_int8_t promisc_enabled;
1310 char sock_proc_name[64];
1311 char sock_proc_stats_name[64];
1312 char statsString[1024];
1313 char custom_bound_device_name[32];
1316 u_int32_t num_poll_calls;
1317 u_int16_t poll_num_pkts_watermark;
1318 u_int16_t poll_watermark_timeout;
1319 u_long queue_nonempty_timestamp;
1322 struct pf_ring_socket *master_ring;
1327 u_int8_t enable_tx_with_bounce;
1328 spinlock_t consume_tx_packets_lock;
1329 int32_t last_tx_dev_idx;
1330 struct net_device *last_tx_dev;
1334 zc_dev_mapping zc_mapping;
1335 zc_dev_info *zc_dev;
1336 zc_dev_list *zc_device_entry;
1339 struct dma_memory_info *extra_dma_memory;
1342 u_int32_t cluster_id ;
1345 int64_t channel_id_mask;
1346 u_int16_t num_channels_per_ring;
1349 do_rehash_rss rehash_rss;
1352 u_char *ring_memory;
1353 u_int16_t slot_header_len;
1354 u_int32_t bucket_len, slot_tot_mem;
1355 FlowSlotInfo *slots_info;
1359 u_int32_t sample_rate;
1360 u_int32_t pkts_to_sample;
1361 u_int32_t sample_rnd_shift;
1364 virtual_filtering_device_element *v_filtering_dev;
1372 u_int8_t sw_filtering_rules_default_accept_policy;
1375 sw_filtering_hash_bucket **sw_filtering_hash;
1376 u_int64_t sw_filtering_hash_match;
1377 u_int64_t sw_filtering_hash_miss;
1378 u_int64_t sw_filtering_hash_filtered;
1379 u_int32_t num_sw_filtering_hash;
1382 u_int32_t num_sw_filtering_rules;
1383 struct list_head sw_filtering_rules;
1386 u_int16_t num_hw_filtering_rules;
1387 struct list_head hw_filtering_rules;
1390 u_int32_t filtering_sample_rate;
1391 u_int32_t filtering_sampling_size;
1394 atomic_t num_ring_users;
1395 wait_queue_head_t ring_slots_waitqueue;
1396 spinlock_t ring_index_lock;
1397 rwlock_t ring_rules_lock;
1400 u_int32_t insert_page_id, insert_slot_id;
1403 char *kernel_consumer_options, *kernel_consumer_private;
1406 struct cluster_referee *cluster_referee;
1407 cluster_client_type cluster_role;
1412#if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0)
1413#define SINGLE_PROT_HOOK
1421#ifndef SINGLE_PROT_HOOK
1422 struct packet_type prot_hook;
1426 struct proc_dir_entry *proc;
1427 struct proc_dir_entry *proc_dir;
1428 struct proc_dir_entry *proc_dev_dir;
1429 struct proc_dir_entry *proc_stats_dir;
1432 ifindex_map_item ifindex_map[MAX_NUM_DEV_IDX];
1435 struct pf_ring_socket* quick_mode_rings[MAX_NUM_DEV_IDX][MAX_NUM_RX_CHANNELS];
1438 u_int8_t num_rings_per_device[MAX_NUM_DEV_IDX];
1439 u_int32_t num_any_rings;
1444#define MAX_NUM_PATTERN 32
1447 filtering_rule rule;
1449#ifdef CONFIG_TEXTSEARCH
1450 struct ts_config *pattern[MAX_NUM_PATTERN];
1452 struct list_head list;
1453} sw_filtering_rule_element;
1456 hw_filtering_rule rule;
1457 struct list_head list;
1458} hw_filtering_rule_element;
1464int pf_ring_skb_ring_handler(
struct sk_buff *skb,
1465 u_int8_t recv_packet,
1468 u_int32_t num_rx_channels);
1472void pf_ring_zc_dev_handler(zc_dev_operation operation,
1473 zc_dev_callbacks *callbacks,
1474 zc_dev_ring_info *rx_info,
1475 zc_dev_ring_info *tx_info,
1476 void *rx_descr_packet_memory,
1477 void *tx_descr_packet_memory,
1478 void *phys_card_memory,
1479 u_int32_t phys_card_memory_len,
1480 u_int32_t channel_id,
1481 struct net_device *dev,
1482 struct device *hwdev,
1483 zc_dev_model device_model,
1484 u_char *device_address,
1485 wait_queue_head_t *packet_waitqueue,
1486 u_int8_t *interrupt_received,
1487 void *rx_adapter_ptr,
1488 void *tx_adapter_ptr);
Definition pf_ring.h:1062
Definition pf_ring.h:1086
Definition pf_ring.h:1097
Definition pf_ring.h:1091