PF_RING API
API documentation for PF_RING: high-speed packet capture, filtering and analysis framework.
pf_ring.h File Reference

PF_RING kernel module header file. More...

#include <netinet/in.h>

Go to the source code of this file.

Classes

struct  pkt_offset
 
union  ip_addr
 
struct  eth_vlan_hdr
 
struct  kcompact_ipv6_hdr
 
struct  kcompact_ipv6_opt_hdr
 
struct  gre_header
 
struct  gtp_v1_hdr
 
struct  gtp_v1_opt_hdr
 
struct  gtp_v1_ext_hdr
 
struct  __attribute__
 
struct  mobile_ip_hdr
 
struct  pkt_parsing_info
 
struct  pfring_extended_pkthdr
 
struct  pfring_pkthdr
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  pfring_timespec
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  _sw_filtering_hash_bucket
 
struct  flowSlotInfo
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  __attribute__
 
struct  add_to_cluster
 
struct  __attribute__
 
struct  create_cluster_referee_info
 
struct  public_cluster_object_info
 
struct  lock_cluster_object_info
 

Macros

#define RING_MAGIC
 
#define RING_MAGIC_VALUE   0x88
 
#define RING_FLOWSLOT_VERSION   17
 
#define DEFAULT_BUCKET_LEN   128
 
#define MAX_NUM_DEVICES   256
 
#define MAX_NUM_RING_SOCKETS   256
 
#define DEFAULT_MIN_PKT_QUEUED   128
 
#define DEFAULT_POLL_WATERMARK_TIMEOUT   0
 
#define pfring_ptr   ax25_ptr
 
#define RING_VERSION   "7.1.0"
 
#define RING_VERSION_NUM   0x070100
 
#define SO_ADD_TO_CLUSTER   99
 
#define SO_REMOVE_FROM_CLUSTER   100
 
#define SO_SET_STRING   101
 
#define SO_ADD_FILTERING_RULE   102
 
#define SO_REMOVE_FILTERING_RULE   103
 
#define SO_TOGGLE_FILTER_POLICY   104
 
#define SO_SET_SAMPLING_RATE   105
 
#define SO_ACTIVATE_RING   106
 
#define SO_RING_BUCKET_LEN   107
 
#define SO_SET_CHANNEL_ID   108
 
#define SO_PURGE_IDLE_HASH_RULES   109 /* inactivity (sec) */
 
#define SO_SET_APPL_NAME   110
 
#define SO_SET_PACKET_DIRECTION   111
 
#define SO_SET_MASTER_RING   112
 
#define SO_ADD_HW_FILTERING_RULE   113
 
#define SO_DEL_HW_FILTERING_RULE   114
 
#define SO_DEACTIVATE_RING   116
 
#define SO_SET_POLL_WATERMARK   117
 
#define SO_SET_VIRTUAL_FILTERING_DEVICE   118
 
#define SO_REHASH_RSS_PACKET   119
 
#define SO_SET_POLL_WATERMARK_TIMEOUT   121
 
#define SO_SHUTDOWN_RING   124
 
#define SO_PURGE_IDLE_RULES   125 /* inactivity (sec) */
 
#define SO_SET_SOCKET_MODE   126
 
#define SO_USE_SHORT_PKT_HEADER   127
 
#define SO_ENABLE_RX_PACKET_BOUNCE   131
 
#define SO_SET_APPL_STATS   133
 
#define SO_SET_STACK_INJECTION_MODE   134 /* stack injection/interception from userspace */
 
#define SO_CREATE_CLUSTER_REFEREE   135
 
#define SO_PUBLISH_CLUSTER_OBJECT   136
 
#define SO_LOCK_CLUSTER_OBJECT   137
 
#define SO_UNLOCK_CLUSTER_OBJECT   138
 
#define SO_SET_CUSTOM_BOUND_DEV_NAME   139
 
#define SO_SET_IFF_PROMISC   140
 
#define SO_SET_VLAN_ID   141
 
#define SO_GET_RING_VERSION   170
 
#define SO_GET_FILTERING_RULE_STATS   171
 
#define SO_GET_HASH_FILTERING_RULE_STATS   172
 
#define SO_GET_ZC_DEVICE_INFO   173
 
#define SO_GET_NUM_RX_CHANNELS   174
 
#define SO_GET_RING_ID   175
 
#define SO_GET_BPF_EXTENSIONS   176
 
#define SO_GET_BOUND_DEVICE_ADDRESS   177
 
#define SO_GET_NUM_QUEUED_PKTS   178
 
#define SO_GET_PKT_HEADER_LEN   179
 
#define SO_GET_LOOPBACK_TEST   180
 
#define SO_GET_BUCKET_LEN   181
 
#define SO_GET_DEVICE_TYPE   182
 
#define SO_GET_EXTRA_DMA_MEMORY   183
 
#define SO_GET_BOUND_DEVICE_IFINDEX   184
 
#define SO_GET_DEVICE_IFINDEX   185
 
#define SO_GET_APPL_STATS_FILE_NAME   186
 
#define SO_GET_LINK_STATUS   187
 
#define SO_SELECT_ZC_DEVICE   190
 
#define PF_RING_ERROR_GENERIC   -1
 
#define PF_RING_ERROR_INVALID_ARGUMENT   -2
 
#define PF_RING_ERROR_NO_PKT_AVAILABLE   -3
 
#define PF_RING_ERROR_NO_TX_SLOT_AVAILABLE   -4
 
#define PF_RING_ERROR_WRONG_CONFIGURATION   -5
 
#define PF_RING_ERROR_END_OF_DEMO_MODE   -6
 
#define PF_RING_ERROR_NOT_SUPPORTED   -7
 
#define PF_RING_ERROR_INVALID_LIB_VERSION   -8
 
#define PF_RING_ERROR_UNKNOWN_ADAPTER   -9
 
#define PF_RING_ERROR_NOT_ENOUGH_MEMORY   -10
 
#define PF_RING_ERROR_INVALID_STATUS   -11
 
#define PF_RING_ERROR_RING_NOT_ENABLED   -12
 
#define REFLECTOR_NAME_LEN   8
 
#define IN6ADDR_ANY_INIT   { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
 
#define NETDEV_PRE_UP   0x000D
 
#define ETH_ALEN   6
 
#define REFLECT_PACKET_DEVICE_NONE   0
 
#define ipv4_tos   ip_tos
 
#define ipv6_tos   ip_tos
 
#define ipv4_src   ip_src.v4
 
#define ipv4_dst   ip_dst.v4
 
#define ipv6_src   ip_src.v6
 
#define ipv6_dst   ip_dst.v6
 
#define host4_low   host_low.v4
 
#define host4_high   host_high.v4
 
#define host6_low   host_low.v6
 
#define host6_high   host_high.v6
 
#define host4_peer_a   host_peer_a.v4
 
#define host4_peer_b   host_peer_b.v4
 
#define host6_peer_a   host_peer_a.v6
 
#define host6_peer_b   host_peer_b.v6
 
#define NEXTHDR_HOP   0
 
#define NEXTHDR_IPV6   41
 
#define NEXTHDR_ROUTING   43
 
#define NEXTHDR_FRAGMENT   44
 
#define NEXTHDR_ESP   50
 
#define NEXTHDR_AUTH   51
 
#define NEXTHDR_NONE   59
 
#define NEXTHDR_DEST   60
 
#define NEXTHDR_MOBILITY   135
 
#define GRE_HEADER_CHECKSUM   0x8000
 
#define GRE_HEADER_ROUTING   0x4000
 
#define GRE_HEADER_KEY   0x2000
 
#define GRE_HEADER_SEQ_NUM   0x1000
 
#define GRE_HEADER_VERSION   0x0007
 
#define GTP_SIGNALING_PORT   2123
 
#define GTP_U_DATA_PORT   2152
 
#define GTP_VERSION_1   0x1
 
#define GTP_VERSION_2   0x2
 
#define GTP_PROTOCOL_TYPE   0x1
 
#define GTP_FLAGS_VERSION   0xE0
 
#define GTP_FLAGS_VERSION_SHIFT   5
 
#define GTP_FLAGS_PROTOCOL_TYPE   0x10
 
#define GTP_FLAGS_RESERVED   0x08
 
#define GTP_FLAGS_EXTENSION   0x04
 
#define GTP_FLAGS_SEQ_NUM   0x02
 
#define GTP_FLAGS_NPDU_NUM   0x01
 
#define GTP_EXT_HDR_LEN_UNIT_BYTES   4
 
#define NO_TUNNEL_ID   0xFFFFFFFF
 
#define MOBILE_IP_PORT   434
 
#define UNKNOWN_INTERFACE   -1
 
#define FAKE_PACKET
 
#define PKT_FLAGS_CHECKSUM_OFFLOAD   1 << 0 /* IP/TCP checksum offload enabled */
 
#define PKT_FLAGS_CHECKSUM_OK   1 << 1 /* Valid checksum (with IP/TCP checksum offload enabled) */
 
#define PKT_FLAGS_IP_MORE_FRAG   1 << 2 /* IP More fragments flag set */
 
#define PKT_FLAGS_IP_FRAG_OFFSET   1 << 3 /* IP fragment offset set (not 0) */
 
#define PKT_FLAGS_VLAN_HWACCEL   1 << 4 /* VLAN stripped by hw */
 
#define PKT_FLAGS_FLOW_OFFLOAD_UPDATE   1 << 6 /* Flow update metadata, see generic_flow_update struct (keep flag compatible with ZC) */
 
#define PKT_FLAGS_FLOW_OFFLOAD_PACKET   1 << 7 /* Flow raw packet, pkt_hash contains the flow_id (keep flag compatible with ZC) */
 
#define PKT_FLAGS_FLOW_OFFLOAD_MARKER   1 << 8 /* Flow raw packet belongs to a flow that has been marked (keep flag compatible with ZC) */
 
#define MAX_NUM_LIST_ELEMENTS   MAX_NUM_RING_SOCKETS /* sizeof(bits_set) [see below] */
 
#define FILTER_TUNNEL_ID_FLAG   1 << 0
 
#define FILTERING_RULE_AUTO_RULE_ID   0xFFFF
 
#define MAGIC_HW_FILTERING_RULE_REQUEST   0x29010020 /* deprecated? */
 
#define DEFAULT_RING_HASH_SIZE   4096
 
#define RING_MIN_SLOT_SIZE   (60+sizeof(struct pfring_pkthdr))
 
#define RING_MAX_SLOT_SIZE   (1514+sizeof(struct pfring_pkthdr))
 
#define min_val(a, b)   ((a < b) ? a : b)
 
#define max_val(a, b)   ((a > b) ? a : b)
 
#define PF_RING   27 /* (0x1b) Packet Ring */
 
#define SOCK_RING   PF_RING
 
#define SIORINGPOLL   0x8888
 
#define IFNAMSIZ   16
 
#define RING_ANY_CHANNEL   ((u_int64_t)-1)
 
#define MAX_NUM_RX_CHANNELS   64 /* channel_id_mask is a 64 bit mask */
 
#define UNKNOWN_NUM_RX_CHANNELS   1
 
#define RING_ANY_VLAN   ((u_int16_t)0xFFFF)
 
#define RING_NO_VLAN   ((u_int16_t)0)
 

Typedefs

typedef int(* five_tuple_rule_handler) (struct pf_ring_socket *pfr, hw_filtering_rule *rule, hw_filtering_rule_command request)
 
typedef int(* perfect_filter_hw_rule_handler) (struct pf_ring_socket *pfr, hw_filtering_rule *rule, hw_filtering_rule_command request)
 
typedef int(* zc_dev_wait_packet) (void *adapter, int mode)
 
typedef void(* zc_dev_notify) (void *rx_adapter_ptr, void *tx_adapter_ptr, u_int8_t device_in_use)
 

Enumerations

enum  pkt_header_len { long_pkt_header = 0, short_pkt_header }
 
enum  rule_action_behaviour {
  forward_packet_and_stop_rule_evaluation = 0, dont_forward_packet_and_stop_rule_evaluation, execute_action_and_continue_rule_evaluation, execute_action_and_stop_rule_evaluation,
  forward_packet_add_rule_and_stop_rule_evaluation, reflect_packet_and_stop_rule_evaluation, reflect_packet_and_continue_rule_evaluation, bounce_packet_and_stop_rule_evaluation,
  bounce_packet_and_continue_rule_evaluation
}
 
enum  pkt_detail_mode { pkt_detail_flow, pkt_detail_aggregation }
 
enum  packet_direction { rx_and_tx_direction = 0, rx_only_direction, tx_only_direction }
 
enum  socket_mode { send_and_recv_mode = 0, send_only_mode, recv_only_mode }
 
enum  silicom_redirector_rule_type { drop_rule, redirect_rule, mirror_rule }
 
enum  accolade_rule_action_type { accolade_drop, accolade_pass }
 
enum  generic_flow_rule_action_type { flow_drop_rule, flow_mark_rule }
 
enum  hw_filtering_rule_type {
  intel_82599_five_tuple_rule, intel_82599_perfect_filter_rule, silicom_redirector_rule, generic_flow_id_rule,
  generic_flow_tuple_rule, accolade_rule, accolade_default
}
 
enum  hw_filtering_rule_command { add_hw_rule, remove_hw_rule }
 
enum  zc_dev_operation { add_device_mapping = 0, remove_device_mapping }
 
enum  zc_dev_model {
  intel_e1000e = 0, intel_igb, intel_ixgbe, intel_ixgbe_82598,
  intel_ixgbe_82599, intel_igb_82580, intel_e1000, intel_ixgbe_82599_ts,
  intel_i40e, intel_fm10k
}
 
enum  cluster_type {
  cluster_per_flow = 0, cluster_round_robin, cluster_per_flow_2_tuple, cluster_per_flow_4_tuple,
  cluster_per_flow_5_tuple, cluster_per_flow_tcp_5_tuple, cluster_per_inner_flow, cluster_per_inner_flow_2_tuple,
  cluster_per_inner_flow_4_tuple, cluster_per_inner_flow_5_tuple, cluster_per_inner_flow_tcp_5_tuple, cluster_per_flow_ip_5_tuple,
  cluster_per_inner_flow_ip_5_tuple
}
 
enum  pfring_device_type { standard_nic_family = 0, intel_82599_family }
 
enum  cluster_client_type { cluster_slave = 0, cluster_master = 1 }
 

Functions

struct pkt_offset __attribute__ ((packed))
 
struct gtp_v1_hdr __attribute__ ((__packed__))
 

Variables

typedef __attribute__
 
int16_t eth_offset
 
int16_t vlan_offset
 
int16_t l3_offset
 
int16_t l4_offset
 
int16_t payload_offset
 
u_int16_t h_vlan_id
 
u_int16_t h_proto
 
u_int32_t flow_lbl
 
u_int32_t priority
 
u_int32_t version
 
u_int16_t payload_len
 
u_int8_t nexthdr
 
u_int8_t hop_limit
 
struct in6_addr saddr
 
struct in6_addr daddr
 
u_int8_t hdrlen
 
u_int8_t padding [6]
 
u_int16_t flags_and_version
 
u_int16_t proto
 
u_int8_t flags
 
u_int8_t message_type
 
u_int32_t teid
 
u_int16_t seq_num
 
u_int8_t npdu_num
 
u_int8_t next_ext_hdr
 
u_int8_t len
 
u_int8_t next_header
 
u_int16_t reserved
 
u_int8_t dmac [ETH_ALEN]
 
u_int8_t smac [ETH_ALEN]
 
u_int16_t eth_type
 
u_int16_t vlan_id
 
u_int16_t qinq_vlan_id
 
u_int8_t ip_version
 
u_int8_t l3_proto
 
u_int8_t ip_tos
 
ip_addr ip_src
 
ip_addr ip_dst
 
u_int16_t l4_src_port
 
u_int16_t l4_dst_port
 
u_int8_t icmp_type
 
u_int8_t icmp_code
 
struct {
   u_int8_t   flags
 
   u_int32_t   seq_num
 
   u_int32_t   ack_num
 
tcp
 
tunnel_info tunnel
 
int32_t last_matched_rule_id
 
struct pkt_offset offset
 
u_int64_t timestamp_ns
 
u_int8_t rx_direction
 
int32_t if_index
 
u_int32_t pkt_hash
 
struct {
   int32_t   bounce_interface
 
   struct sk_buff *   reserved
 
tx
 
struct pkt_parsing_info parsed_pkt
 
struct timeval ts
 
u_int32_t caplen
 
struct pfring_extended_pkthdr extended_hdr
 
u_int32_t tv_sec
 
u_int32_t tv_nsec
 
struct pf_ring_socket * pfr
 
hash_filtering_rule rule
 
u_int64_t match
 
struct _sw_filtering_hash_bucketnext
 
u_int16_t sample_rate
 
u_int32_t min_num_slots
 
u_int32_t slot_len
 
u_int32_t data_len
 
u_int64_t tot_mem
 
volatile u_int64_t insert_off
 
u_int64_t kernel_remove_off
 
u_int64_t tot_pkts
 
u_int64_t tot_lost
 
volatile u_int64_t tot_insert
 
u_int64_t kernel_tot_read
 
u_int64_t tot_fwd_ok
 
u_int64_t tot_fwd_notok
 
u_int64_t good_pkt_sent
 
u_int64_t pkt_send_error
 
char k_padding [4096-128]
 
volatile u_int64_t tot_read
 
volatile u_int64_t remove_off
 
char u_padding [4096-16]
 
u_int clusterId
 
cluster_type the_type
 
u_int32_t cluster_id
 
u_int32_t recovered
 
u_int32_t object_type
 
u_int32_t object_id
 
u_int32_t lock_mask
 

Detailed Description

PF_RING kernel module header file.

This header file should NOT be included in PF_RING-based applications directly.

Macro Definition Documentation

◆ FAKE_PACKET

#define FAKE_PACKET
Value:
-2 /* It indicates that the returned packet
is faked, and that the info is basically
a message from PF_RING
*/