20 #include <linux/in6.h> 22 #include <netinet/in.h> 26 #define RING_MAGIC_VALUE 0x88 29 #define RING_FLOWSLOT_VERSION 17 31 #define DEFAULT_BUCKET_LEN 128 32 #define MAX_NUM_DEVICES 256 34 #define MAX_NUM_RING_SOCKETS 256 37 #define DEFAULT_MIN_PKT_QUEUED 128 38 #define DEFAULT_POLL_WATERMARK_TIMEOUT 0 41 #define pfring_ptr ax25_ptr 44 #define RING_VERSION "7.1.0" 45 #define RING_VERSION_NUM 0x070100 48 #define SO_ADD_TO_CLUSTER 99 49 #define SO_REMOVE_FROM_CLUSTER 100 50 #define SO_SET_STRING 101 51 #define SO_ADD_FILTERING_RULE 102 52 #define SO_REMOVE_FILTERING_RULE 103 53 #define SO_TOGGLE_FILTER_POLICY 104 54 #define SO_SET_SAMPLING_RATE 105 55 #define SO_ACTIVATE_RING 106 56 #define SO_RING_BUCKET_LEN 107 57 #define SO_SET_CHANNEL_ID 108 58 #define SO_PURGE_IDLE_HASH_RULES 109 59 #define SO_SET_APPL_NAME 110 60 #define SO_SET_PACKET_DIRECTION 111 61 #define SO_SET_MASTER_RING 112 62 #define SO_ADD_HW_FILTERING_RULE 113 63 #define SO_DEL_HW_FILTERING_RULE 114 64 #define SO_DEACTIVATE_RING 116 65 #define SO_SET_POLL_WATERMARK 117 66 #define SO_SET_VIRTUAL_FILTERING_DEVICE 118 67 #define SO_REHASH_RSS_PACKET 119 68 #define SO_SET_POLL_WATERMARK_TIMEOUT 121 69 #define SO_SHUTDOWN_RING 124 70 #define SO_PURGE_IDLE_RULES 125 71 #define SO_SET_SOCKET_MODE 126 72 #define SO_USE_SHORT_PKT_HEADER 127 73 #define SO_ENABLE_RX_PACKET_BOUNCE 131 74 #define SO_SET_APPL_STATS 133 75 #define SO_SET_STACK_INJECTION_MODE 134 76 #define SO_CREATE_CLUSTER_REFEREE 135 77 #define SO_PUBLISH_CLUSTER_OBJECT 136 78 #define SO_LOCK_CLUSTER_OBJECT 137 79 #define SO_UNLOCK_CLUSTER_OBJECT 138 80 #define SO_SET_CUSTOM_BOUND_DEV_NAME 139 81 #define SO_SET_IFF_PROMISC 140 82 #define SO_SET_VLAN_ID 141 85 #define SO_GET_RING_VERSION 170 86 #define SO_GET_FILTERING_RULE_STATS 171 87 #define SO_GET_HASH_FILTERING_RULE_STATS 172 88 #define SO_GET_ZC_DEVICE_INFO 173 89 #define SO_GET_NUM_RX_CHANNELS 174 90 #define SO_GET_RING_ID 175 91 #define SO_GET_BPF_EXTENSIONS 176 92 #define SO_GET_BOUND_DEVICE_ADDRESS 177 93 #define SO_GET_NUM_QUEUED_PKTS 178 94 #define SO_GET_PKT_HEADER_LEN 179 95 #define SO_GET_LOOPBACK_TEST 180 96 #define SO_GET_BUCKET_LEN 181 97 #define SO_GET_DEVICE_TYPE 182 98 #define SO_GET_EXTRA_DMA_MEMORY 183 99 #define SO_GET_BOUND_DEVICE_IFINDEX 184 100 #define SO_GET_DEVICE_IFINDEX 185 101 #define SO_GET_APPL_STATS_FILE_NAME 186 102 #define SO_GET_LINK_STATUS 187 105 #define SO_SELECT_ZC_DEVICE 190 108 #define PF_RING_ERROR_GENERIC -1 109 #define PF_RING_ERROR_INVALID_ARGUMENT -2 110 #define PF_RING_ERROR_NO_PKT_AVAILABLE -3 111 #define PF_RING_ERROR_NO_TX_SLOT_AVAILABLE -4 112 #define PF_RING_ERROR_WRONG_CONFIGURATION -5 113 #define PF_RING_ERROR_END_OF_DEMO_MODE -6 114 #define PF_RING_ERROR_NOT_SUPPORTED -7 115 #define PF_RING_ERROR_INVALID_LIB_VERSION -8 116 #define PF_RING_ERROR_UNKNOWN_ADAPTER -9 117 #define PF_RING_ERROR_NOT_ENOUGH_MEMORY -10 118 #define PF_RING_ERROR_INVALID_STATUS -11 119 #define PF_RING_ERROR_RING_NOT_ENABLED -12 121 #define REFLECTOR_NAME_LEN 8 123 #ifndef IN6ADDR_ANY_INIT 124 #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } 127 #ifndef NETDEV_PRE_UP 128 #define NETDEV_PRE_UP 0x000D 145 int16_t payload_offset;
152 #define REFLECT_PACKET_DEVICE_NONE 0 159 #define ipv4_tos ip_tos 160 #define ipv6_tos ip_tos 161 #define ipv4_src ip_src.v4 162 #define ipv4_dst ip_dst.v4 163 #define ipv6_src ip_src.v6 164 #define ipv6_dst ip_dst.v6 165 #define host4_low host_low.v4 166 #define host4_high host_high.v4 167 #define host6_low host_low.v6 168 #define host6_high host_high.v6 169 #define host4_peer_a host_peer_a.v4 170 #define host4_peer_b host_peer_b.v4 171 #define host6_peer_a host_peer_a.v6 172 #define host6_peer_b host_peer_b.v6 179 #define NEXTHDR_HOP 0 180 #define NEXTHDR_IPV6 41 181 #define NEXTHDR_ROUTING 43 182 #define NEXTHDR_FRAGMENT 44 183 #define NEXTHDR_ESP 50 184 #define NEXTHDR_AUTH 51 185 #define NEXTHDR_NONE 59 186 #define NEXTHDR_DEST 60 187 #define NEXTHDR_MOBILITY 135 190 u_int32_t flow_lbl:24,
193 u_int16_t payload_len;
196 struct in6_addr saddr;
197 struct in6_addr daddr;
206 #define GRE_HEADER_CHECKSUM 0x8000 207 #define GRE_HEADER_ROUTING 0x4000 208 #define GRE_HEADER_KEY 0x2000 209 #define GRE_HEADER_SEQ_NUM 0x1000 210 #define GRE_HEADER_VERSION 0x0007 213 u_int16_t flags_and_version;
218 #define GTP_SIGNALING_PORT 2123 219 #define GTP_U_DATA_PORT 2152 221 #define GTP_VERSION_1 0x1 222 #define GTP_VERSION_2 0x2 223 #define GTP_PROTOCOL_TYPE 0x1 226 #define GTP_FLAGS_VERSION 0xE0 227 #define GTP_FLAGS_VERSION_SHIFT 5 228 #define GTP_FLAGS_PROTOCOL_TYPE 0x10 229 #define GTP_FLAGS_RESERVED 0x08 230 #define GTP_FLAGS_EXTENSION 0x04 231 #define GTP_FLAGS_SEQ_NUM 0x02 232 #define GTP_FLAGS_NPDU_NUM 0x01 234 u_int8_t message_type;
235 u_int16_t payload_len;
243 u_int8_t next_ext_hdr;
248 #define GTP_EXT_HDR_LEN_UNIT_BYTES 4 256 #define NO_TUNNEL_ID 0xFFFFFFFF 261 u_int8_t tunneled_ip_version;
262 u_int8_t tunneled_proto;
263 ip_addr tunneled_ip_src, tunneled_ip_dst;
264 u_int16_t tunneled_l4_src_port, tunneled_l4_dst_port;
268 #define MOBILE_IP_PORT 434 271 u_int8_t message_type, next_header;
282 u_int8_t dmac[ETH_ALEN], smac[ETH_ALEN];
285 u_int16_t qinq_vlan_id;
287 u_int8_t l3_proto, ip_tos;
289 u_int16_t l4_src_port, l4_dst_port;
290 u_int8_t icmp_type, icmp_code;
293 u_int32_t seq_num, ack_num;
296 int32_t last_matched_rule_id;
300 #define UNKNOWN_INTERFACE -1 301 #define FAKE_PACKET -2 307 u_int64_t timestamp_ns;
309 #define PKT_FLAGS_CHECKSUM_OFFLOAD 1 << 0 310 #define PKT_FLAGS_CHECKSUM_OK 1 << 1 311 #define PKT_FLAGS_IP_MORE_FRAG 1 << 2 312 #define PKT_FLAGS_IP_FRAG_OFFSET 1 << 3 313 #define PKT_FLAGS_VLAN_HWACCEL 1 << 4 314 #define PKT_FLAGS_FLOW_OFFLOAD_UPDATE 1 << 6 315 #define PKT_FLAGS_FLOW_OFFLOAD_PACKET 1 << 7 316 #define PKT_FLAGS_FLOW_OFFLOAD_MARKER 1 << 8 319 u_int8_t rx_direction;
327 int32_t bounce_interface;
329 struct sk_buff *reserved;
348 #define MAX_NUM_LIST_ELEMENTS MAX_NUM_RING_SOCKETS 352 u_int32_t num_elements, top_element_id;
354 void *list_elements[MAX_NUM_LIST_ELEMENTS];
357 void init_lockless_list(lockless_list *l);
358 int lockless_list_add(lockless_list *l,
void *elem);
359 int lockless_list_remove(lockless_list *l,
void *elem);
360 void* lockless_list_get_next(lockless_list *l, u_int32_t *last_list_idx);
361 void* lockless_list_get_first(lockless_list *l, u_int32_t *last_list_idx);
362 void lockless_list_empty(lockless_list *l, u_int8_t free_memory);
363 void term_lockless_list(lockless_list *l, u_int8_t free_memory);
370 u_int8_t smac[ETH_ALEN], dmac[ETH_ALEN];
376 ip_addr shost_mask, dhost_mask;
377 u_int16_t sport_low, sport_high;
378 u_int16_t dport_low, dport_high;
383 filtering_rule_core_fields;
389 #define FILTER_TUNNEL_ID_FLAG 1 << 0 390 u_int16_t optional_fields;
395 ip_addr shost_mask, dhost_mask;
398 char payload_pattern[32];
401 filtering_rule_extended_fields;
406 forward_packet_and_stop_rule_evaluation = 0,
407 dont_forward_packet_and_stop_rule_evaluation,
408 execute_action_and_continue_rule_evaluation,
409 execute_action_and_stop_rule_evaluation,
410 forward_packet_add_rule_and_stop_rule_evaluation,
411 reflect_packet_and_stop_rule_evaluation,
412 reflect_packet_and_continue_rule_evaluation,
413 bounce_packet_and_stop_rule_evaluation,
414 bounce_packet_and_continue_rule_evaluation
415 } rule_action_behaviour;
419 pkt_detail_aggregation
423 rx_and_tx_direction = 0,
429 send_and_recv_mode = 0,
435 unsigned long jiffies_last_match;
436 struct net_device *reflector_dev;
441 #define FILTERING_RULE_AUTO_RULE_ID 0xFFFF 444 rule_action_behaviour rule_action;
445 u_int8_t balance_id, balance_pool;
448 u_int8_t bidirectional;
449 filtering_rule_core_fields core_fields;
450 filtering_rule_extended_fields extended_fields;
451 char reflector_device_name[REFLECTOR_NAME_LEN];
453 filtering_internals internals;
463 u_int32_t s_addr, d_addr;
464 u_int16_t s_port, d_port;
467 intel_82599_five_tuple_filter_hw_rule;
472 u_int32_t s_addr, d_addr;
473 u_int16_t s_port, d_port;
476 intel_82599_perfect_filter_hw_rule;
507 } silicom_redirector_rule_type;
510 silicom_redirector_rule_type rule_type;
512 u_int8_t rule_target_port;
513 u_int16_t vlan_id_low, vlan_id_high;
516 u_int32_t src_mask, dst_mask;
517 u_int16_t src_port_low, src_port_high;
518 u_int16_t dst_port_low, dst_port_high;
520 silicom_redirector_hw_rule;
525 } accolade_rule_action_type;
532 accolade_rule_action_type action;
537 u_int32_t mpls_label;
539 u_int32_t src_addr_bits, dst_addr_bits;
540 u_int16_t src_port_low;
541 u_int16_t src_port_high;
542 u_int16_t dst_port_low;
543 u_int16_t dst_port_high;
544 u_int8_t l4_port_not;
551 } generic_flow_rule_action_type;
554 generic_flow_rule_action_type action;
558 generic_flow_id_hw_rule;
561 generic_flow_rule_action_type action;
570 generic_flow_tuple_hw_rule;
573 intel_82599_five_tuple_rule,
574 intel_82599_perfect_filter_rule,
575 silicom_redirector_rule,
576 generic_flow_id_rule,
577 generic_flow_tuple_rule,
580 } hw_filtering_rule_type;
583 hw_filtering_rule_type rule_family_type;
587 intel_82599_five_tuple_filter_hw_rule five_tuple_rule;
588 intel_82599_perfect_filter_hw_rule perfect_rule;
589 silicom_redirector_hw_rule redirector_rule;
590 generic_flow_id_hw_rule flow_id_rule;
591 generic_flow_tuple_hw_rule flow_tuple_rule;
592 accolade_hw_rule accolade_rule;
597 #define MAGIC_HW_FILTERING_RULE_REQUEST 0x29010020 601 #define ETHTOOL_PFRING_SRXFTCHECK 0x10000000 602 #define ETHTOOL_PFRING_SRXFTRLDEL 0x10000031 603 #define ETHTOOL_PFRING_SRXFTRLINS 0x10000032 605 #if defined(I82599_HW_FILTERING_SUPPORT) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) 606 #define FLOW_EXT 0x80000000 607 union _kcompat_ethtool_flow_union {
608 struct ethtool_tcpip4_spec tcp_ip4_spec;
609 struct ethtool_usrip4_spec usr_ip4_spec;
612 struct _kcompat_ethtool_flow_ext {
617 struct _kcompat_ethtool_rx_flow_spec {
619 union _kcompat_ethtool_flow_union h_u;
620 struct _kcompat_ethtool_flow_ext h_ext;
621 union _kcompat_ethtool_flow_union m_u;
622 struct _kcompat_ethtool_flow_ext m_ext;
626 #define ethtool_rx_flow_spec _kcompat_ethtool_rx_flow_spec 634 } hw_filtering_rule_command;
647 u_int8_t l4_protocol;
658 u_int32_t fwd_packets;
660 u_int32_t rev_packets;
671 generic_flow_rule_action_type action;
674 generic_flow_feedback;
678 extern struct pf_ring_socket *pfr;
682 typedef int (*five_tuple_rule_handler)(
struct pf_ring_socket *pfr,
683 hw_filtering_rule *rule,
684 hw_filtering_rule_command request);
685 typedef int (*perfect_filter_hw_rule_handler)(
struct pf_ring_socket *pfr,
686 hw_filtering_rule *rule,
687 hw_filtering_rule_command request);
690 five_tuple_rule_handler five_tuple_handler;
691 perfect_filter_hw_rule_handler perfect_filter_handler;
693 hw_filtering_device_handler;
698 #define DEFAULT_RING_HASH_SIZE 4096 709 ip_addr host_peer_a, host_peer_b;
710 u_int16_t port_peer_a, port_peer_b;
712 rule_action_behaviour rule_action;
713 char reflector_device_name[REFLECTOR_NAME_LEN];
715 filtering_internals internals;
722 u_int32_t inactivity;
724 hash_filtering_rule_stats;
729 hash_filtering_rule rule;
733 sw_filtering_hash_bucket;
737 #define RING_MIN_SLOT_SIZE (60+sizeof(struct pfring_pkthdr)) 738 #define RING_MAX_SLOT_SIZE (1514+sizeof(struct pfring_pkthdr)) 740 #if !defined(__cplusplus) 742 #define min_val(a,b) ((a < b) ? a : b) 743 #define max_val(a,b) ((a > b) ? a : b) 753 u_int16_t version, sample_rate;
754 u_int32_t min_num_slots, slot_len, data_len;
756 volatile u_int64_t insert_off;
757 u_int64_t kernel_remove_off;
758 u_int64_t tot_pkts, tot_lost;
759 volatile u_int64_t tot_insert;
760 u_int64_t kernel_tot_read;
761 u_int64_t tot_fwd_ok, tot_fwd_notok;
762 u_int64_t good_pkt_sent, pkt_send_error;
764 char padding[128-104];
766 char k_padding[4096-128];
770 volatile u_int64_t tot_read;
771 volatile u_int64_t remove_off ;
772 char u_padding[4096-16];
780 FlowSlotInfo *getRingPtr(
void);
781 int allocateRing(
char *deviceName, u_int numSlots, u_int bucketLen, u_int sampleRate);
782 unsigned int pollRing(
struct file *fp,
struct poll_table_struct * wait);
783 void deallocateRing(
void);
789 #define SOCK_RING PF_RING 792 #define SIORINGPOLL 0x8888 799 struct pf_ring_socket *pf_ring_sk;
808 typedef int (*zc_dev_wait_packet)(
void *adapter,
int mode);
809 typedef void (*zc_dev_notify)(
void *rx_adapter_ptr,
void *tx_adapter_ptr, u_int8_t device_in_use);
812 add_device_mapping = 0, remove_device_mapping
826 intel_ixgbe_82599_ts,
832 u_int32_t packet_memory_num_slots;
833 u_int32_t packet_memory_slot_len;
834 u_int32_t descr_packet_memory_tot_len;
835 u_int16_t registers_index;
836 u_int16_t stats_index;
838 u_int32_t num_queues;
845 u_int32_t phys_card_memory_len;
846 zc_dev_model device_model;
851 zc_memory_info mem_info;
852 u_int16_t channel_id;
853 void *rx_descr_packet_memory;
854 void *tx_descr_packet_memory;
855 char *phys_card_memory;
856 struct net_device *dev;
857 struct device *hwdev;
858 u_char device_address[6];
860 wait_queue_head_t *packet_waitqueue;
862 void *packet_waitqueue;
864 u_int8_t *interrupt_received, in_use;
865 void *rx_adapter_ptr, *tx_adapter_ptr;
866 zc_dev_wait_packet wait_packet_function_ptr;
867 zc_dev_notify usage_notification;
876 zc_dev_operation operation;
877 char device_name[IFNAMSIZ];
884 #define RING_ANY_CHANNEL ((u_int64_t)-1) 885 #define MAX_NUM_RX_CHANNELS 64 886 #define UNKNOWN_NUM_RX_CHANNELS 1 888 #define RING_ANY_VLAN ((u_int16_t)0xFFFF) 889 #define RING_NO_VLAN ((u_int16_t)0) 894 cluster_per_flow = 0,
896 cluster_per_flow_2_tuple,
897 cluster_per_flow_4_tuple,
898 cluster_per_flow_5_tuple,
899 cluster_per_flow_tcp_5_tuple,
901 cluster_per_inner_flow,
902 cluster_per_inner_flow_2_tuple,
903 cluster_per_inner_flow_4_tuple,
904 cluster_per_inner_flow_5_tuple,
905 cluster_per_inner_flow_tcp_5_tuple,
907 cluster_per_flow_ip_5_tuple,
908 cluster_per_inner_flow_ip_5_tuple,
913 cluster_type the_type;
917 standard_nic_family = 0,
919 } pfring_device_type;
922 char device_name[IFNAMSIZ];
923 pfring_device_type device_type;
926 struct proc_dir_entry *proc_entry;
928 virtual_filtering_device_info;
933 u_int32_t cluster_id;
938 u_int32_t cluster_id;
939 u_int32_t object_type;
944 u_int32_t cluster_id;
945 u_int32_t object_type;
956 } cluster_client_type;
962 #if(LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)) 963 #ifndef netdev_notifier_info_to_dev 964 #define netdev_notifier_info_to_dev(a) ((struct net_device*)a) 968 #define CLUSTER_LEN 64 977 struct ring_cluster {
979 u_short num_cluster_elements;
980 cluster_type hashing_mode;
982 struct sock *sk[CLUSTER_LEN];
989 struct ring_cluster cluster;
990 struct list_head list;
991 } ring_cluster_element;
993 #define MAX_NUM_ZC_BOUND_SOCKETS MAX_NUM_RING_SOCKETS 996 u8 num_bound_sockets;
998 struct list_head list;
1005 struct pf_ring_socket *bound_sockets[MAX_NUM_ZC_BOUND_SOCKETS];
1009 #define MAX_NUM_IFIDX 2048 1015 virtual_filtering_device_info info;
1016 struct list_head list;
1017 } virtual_filtering_device_element;
1020 struct net_device *dev;
1025 char device_name[IFNAMSIZ];
1027 pfring_device_type device_type;
1029 u_int8_t do_not_remove_promisc;
1030 atomic_t promisc_users;
1033 struct proc_dir_entry *proc_entry;
1036 u_int8_t is_zc_device;
1037 zc_dev_model zc_dev_model;
1038 u_int num_zc_dev_rx_queues;
1039 u_int32_t num_zc_rx_slots;
1040 u_int32_t num_zc_tx_slots;
1044 u_int16_t num_filters;
1045 hw_filtering_device_handler filter_handlers;
1048 struct list_head device_list;
1053 struct dma_memory_info {
1054 u_int32_t num_chunks, chunk_len;
1055 u_int32_t num_slots, slot_len;
1056 unsigned long *virtual_addr;
1057 u_int64_t *dma_addr;
1058 struct device *hwdev;
1064 u_int32_t object_type;
1065 u_int32_t object_id;
1066 u_int32_t lock_bitmap;
1068 struct list_head list;
1071 struct cluster_referee {
1074 u_int8_t master_running;
1075 struct list_head objects_list;
1077 struct list_head list;
1082 typedef int (*do_handle_sw_filtering_hash_bucket)(
struct pf_ring_socket *pfr,
1083 sw_filtering_hash_bucket* rule,
1086 typedef int (*do_add_packet_to_ring)(
struct pf_ring_socket *pfr,
1089 int displ, u_int8_t parse_pkt_first);
1091 typedef int (*do_add_raw_packet_to_ring)(
struct pf_ring_socket *pfr,
1093 u_char *data, u_int data_len,
1094 u_int8_t parse_pkt_first);
1096 typedef u_int32_t (*do_rehash_rss)(
struct sk_buff *skb,
struct pfring_pkthdr *hdr);
1100 #define NUM_FRAGMENTS_HASH_SLOTS 4096 1101 #define MAX_CLUSTER_FRAGMENTS_LEN 8*NUM_FRAGMENTS_HASH_SLOTS 1103 struct hash_fragment_node {
1105 u_int32_t ipv4_src_host, ipv4_dst_host;
1106 u_int16_t ip_fragment_id;
1109 u_int8_t cluster_app_id;
1112 unsigned long expire_jiffies;
1115 struct list_head frag_list;
1120 #define MAX_NUM_DEVICES_ID MAX_NUM_IFIDX 1124 struct pf_ring_socket {
1125 u_int8_t ring_active, ring_shutdown, num_rx_channels, num_bound_devices;
1126 pf_ring_device *ring_dev;
1128 DECLARE_BITMAP(netdev_mask, MAX_NUM_DEVICES_ID );
1132 packet_direction direction;
1134 pkt_header_len header_len;
1135 u_int8_t stack_injection_mode;
1136 u_int8_t promisc_enabled;
1141 char sock_proc_name[64];
1142 char sock_proc_stats_name[64];
1143 char statsString[512 + 1];
1144 char custom_bound_device_name[32];
1147 u_int32_t num_poll_calls;
1148 u_int16_t poll_num_pkts_watermark;
1149 u_int16_t poll_watermark_timeout;
1150 u_long queue_nonempty_timestamp;
1153 struct pf_ring_socket *master_ring;
1158 u_int8_t enable_tx_with_bounce;
1159 rwlock_t consume_tx_packets_lock;
1160 int32_t last_tx_dev_idx;
1161 struct net_device *last_tx_dev;
1165 zc_dev_mapping zc_mapping;
1166 zc_dev_info *zc_dev;
1167 zc_dev_list *zc_device_entry;
1170 struct dma_memory_info *extra_dma_memory;
1173 u_int16_t cluster_id ;
1176 int64_t channel_id_mask;
1177 u_int16_t num_channels_per_ring;
1180 do_rehash_rss rehash_rss;
1183 u_char *ring_memory;
1184 u_int16_t slot_header_len;
1185 u_int32_t bucket_len, slot_tot_mem;
1186 FlowSlotInfo *slots_info;
1190 u_int32_t pktToSample, sample_rate;
1193 virtual_filtering_device_element *v_filtering_dev;
1201 u_int8_t sw_filtering_rules_default_accept_policy;
1204 sw_filtering_hash_bucket **sw_filtering_hash;
1205 u_int64_t sw_filtering_hash_match;
1206 u_int64_t sw_filtering_hash_miss;
1207 u_int32_t num_sw_filtering_hash;
1210 u_int32_t num_sw_filtering_rules;
1211 struct list_head sw_filtering_rules;
1214 u_int16_t num_hw_filtering_rules;
1215 struct list_head hw_filtering_rules;
1218 atomic_t num_ring_users;
1219 wait_queue_head_t ring_slots_waitqueue;
1220 rwlock_t ring_index_lock, ring_rules_lock;
1223 u_int32_t insert_page_id, insert_slot_id;
1226 do_add_packet_to_ring add_packet_to_ring;
1227 do_add_raw_packet_to_ring add_raw_packet_to_ring;
1230 char *kernel_consumer_options, *kernel_consumer_private;
1233 struct cluster_referee *cluster_referee;
1234 cluster_client_type cluster_role;
1243 struct proc_dir_entry *proc;
1244 struct proc_dir_entry *proc_dir;
1245 struct proc_dir_entry *proc_dev_dir;
1246 struct proc_dir_entry *proc_stats_dir;
1248 struct list_head list;
1253 #define MAX_NUM_PATTERN 32 1256 filtering_rule rule;
1258 #ifdef CONFIG_TEXTSEARCH 1259 struct ts_config *pattern[MAX_NUM_PATTERN];
1261 struct list_head list;
1262 } sw_filtering_rule_element;
1265 hw_filtering_rule rule;
1266 struct list_head list;
1267 } hw_filtering_rule_element;
1271 typedef void (*handle_pfring_zc_dev)(zc_dev_operation operation,
1272 mem_ring_info *rx_info,
1273 mem_ring_info *tx_info,
1274 void *rx_descr_packet_memory,
1275 void *tx_descr_packet_memory,
1276 void *phys_card_memory,
1277 u_int phys_card_memory_len,
1279 struct net_device *dev,
1280 struct device *hwdev,
1281 zc_dev_model device_model,
1282 u_char *device_address,
1283 wait_queue_head_t *packet_waitqueue,
1284 u_int8_t *interrupt_received,
1285 void *rx_adapter_ptr,
void *tx_adapter_ptr,
1286 zc_dev_wait_packet wait_packet_function_ptr,
1287 zc_dev_notify dev_notify_function_ptr);
1289 extern handle_pfring_zc_dev get_ring_zc_dev_handler(
void);
1290 extern void set_ring_zc_dev_handler(handle_pfring_zc_dev the_zc_device_handler);
1291 extern void do_ring_zc_dev_handler(zc_dev_operation operation,
1292 mem_ring_info *rx_info,
1293 mem_ring_info *tx_info,
1294 unsigned long *rx_packet_memory,
1295 void *rx_descr_packet_memory,
1296 unsigned long *tx_packet_memory,
1297 void *tx_descr_packet_memory,
1298 void *phys_card_memory,
1299 u_int phys_card_memory_len,
1301 struct net_device *dev,
1302 struct device *hwdev,
1303 zc_dev_model device_model,
1304 u_char *device_address,
1305 wait_queue_head_t * packet_waitqueue,
1306 u_int8_t * interrupt_received,
1307 void *rx_adapter_ptr,
void *tx_adapter_ptr,
1308 zc_dev_wait_packet wait_packet_function_ptr,
1309 zc_dev_notify dev_notify_function_ptr);
1311 typedef int (*handle_ring_skb)(
struct sk_buff *skb, u_char recv_packet,
1314 u_int32_t num_rx_channels);
1315 typedef int (*handle_ring_buffer)(
struct net_device *dev,
1316 char *data,
int len);
1319 struct pfring_hooks {
1324 handle_ring_skb ring_handler;
1325 handle_ring_buffer buffer_ring_handler;
1326 handle_pfring_zc_dev zc_dev_handler;
1331 #ifdef REDBORDER_PATCH 1342 } BPCTL_COMPACT_CMND_TYPE_SD;
1351 #define BPCTL_MAGIC_NUM 'J' 1352 #define BPCTL_IOCTL_TX_MSG(cmd) _IOWR(BPCTL_MAGIC_NUM, cmd, struct bpctl_cmd) 1354 extern int bpctl_kernel_ioctl(
unsigned int ioctl_num,
void *ioctl_param);
1359 extern void pf_ring_add_module_dependency(
void);
1360 extern int pf_ring_inject_packet_to_ring(
int if_index,
int channel_id, u_char *data,
int data_len,
struct pfring_pkthdr *hdr);
1365 struct pcaplike_file_header {
1367 u_int16_t version_major, version_minor;
1374 struct pcaplike_timeval {
1375 u_int32_t tv_sec, tv_usec;
1378 struct pcaplike_pkthdr {
1379 struct pcaplike_timeval ts;
Definition: pf_ring.h:937
Definition: pf_ring.h:338
Definition: pf_ring.h:280
Definition: pf_ring.h:911
Definition: pf_ring.h:259
Definition: pf_ring.h:932
Definition: pf_ring.h:751
Definition: pf_ring.h:225
Definition: pf_ring.h:728
Definition: pf_ring.h:240
Definition: pf_ring.h:638
Definition: pf_ring.h:189
Definition: pf_ring.h:270
Definition: pf_ring.h:137
Definition: pf_ring.h:943
Definition: pf_ring.h:154
Definition: pf_ring.h:200
Definition: pf_ring.h:174
Definition: pf_ring.h:306
Definition: pf_ring.h:247