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

PF_RING kernel module header file. More...

#include <netinet/in.h>
#include <endian.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  vxlan_hdr
 
struct  pkt_parsing_info
 
struct  pfring_extended_pkthdr
 
struct  pfring_pkthdr
 
struct  pfring_timespec
 
struct  _sw_filtering_hash_bucket
 
struct  flowSlotInfo
 
struct  add_to_cluster
 
struct  create_cluster_referee_info
 
struct  public_cluster_object_info
 
struct  lock_cluster_object_info
 

Macros

#define __LITTLE_ENDIAN_BITFIELD
 
#define RING_VERSION   "9.2.0"
 
#define RING_VERSION_NUM   0x090200
 
#define RING_FLOWSLOT_VERSION   21
 
#define RING_MAGIC
 
#define RING_MAGIC_VALUE   0x88
 
#define RING_USE_SOCKADDR_LL   /* use sockaddr_ll instead of sockaddr */
 
#define MIN_NUM_SLOTS   512
 
#define DEFAULT_NUM_SLOTS   4096
 
#define DEFAULT_BUCKET_LEN   128
 
#define MAX_NUM_DEVICES   256
 
#define MAX_NUM_RING_SOCKETS   512
 
#define MAX_CLUSTER_QUEUES   64
 
#define DEFAULT_MIN_PKT_QUEUED   128
 
#define DEFAULT_POLL_WATERMARK_TIMEOUT   0
 
#define FILTERING_SAMPLING_RATIO   10
 
#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_DISCARD_INJECTED_PKTS   115 /* discard stack injected packets */
 
#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_FILTERING_SAMPLING_RATE   120
 
#define SO_SET_POLL_WATERMARK_TIMEOUT   121
 
#define SO_SET_DEV_TIME   122
 
#define SO_ADJ_DEV_TIME   123
 
#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_CONTROL_DEV_QUEUE   128
 
#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_GET_DEV_TX_TIME   188
 
#define SO_GET_DEV_STATS   189
 
#define SO_SELECT_ZC_DEVICE   190
 
#define SO_GET_CLUSTER_OBJECT_INFO   191
 
#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 PF_RING_ERROR_BAD_IFNAME   -13
 
#define PF_RING_ERROR_MOD_NOT_LOADED   -14
 
#define PF_RING_ERROR_UNABLE_TO_MAP   -15
 
#define PF_RING_ERROR_UNABLE_TO_GET_INFO   -16
 
#define PF_RING_ERROR_MMAP_FAILURE   -17
 
#define PF_RING_ERROR_INIT_FAILURE   -18
 
#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 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 VXLAN_IP_PORT   4789
 
#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_HIT   1 << 5 /* PF_RING_FLOW_OFFLOAD: flow hit */
 
#define PKT_FLAGS_FLOW_MISS   1 << 6 /* PF_RING_FLOW_OFFLOAD: flow miss */
 
#define PKT_FLAGS_FLOW_UNHANDLED   1 << 7 /* PF_RING_FLOW_OFFLOAD: flow unhandled */
 
#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 PF_RING_FLOW_UPDATE_CAUSE_SW   0
 
#define PF_RING_FLOW_UPDATE_CAUSE_TIMEOUT   1
 
#define PF_RING_FLOW_UPDATE_CAUSE_TCP_TERM   2
 
#define PF_RING_FLOW_UPDATE_CAUSE_PERIODIC   3
 
#define PF_RING_FLOW_UPDATE_CAUSE_PROBE   4
 
#define PF_RING_FLOW_UPDATE_CAUSE_UNKNOWN   5
 
#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)
 
#define MAX_CLUSTER_TYPE_ID   cluster_per_flow_ip_with_dup_tuple_ext
 
#define CLUSTER_OPTION_RELAXED_DISTRIBUTION   (1<<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 *rx_adapter, int mode)
 
typedef int(* zc_dev_notify) (void *rx_adapter, void *tx_adapter, u_int8_t device_in_use)
 
typedef int(* zc_dev_set_time) (void *rx_adapter, u_int64_t time_ns)
 
typedef int(* zc_dev_adjust_time) (void *rx_adapter, int64_t offset_ns)
 
typedef int(* zc_dev_get_tx_time) (void *tx_adapter, u_int64_t *time_ns)
 
typedef int(* zc_dev_control_queue) (void *rx_adapter, u_int8_t enable)
 
typedef int(* zc_dev_get_stats) (void *rx_adapter, u_int64_t *rx_missed)
 

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 , management_only_mode }
 
enum  silicom_redirector_rule_type { drop_rule , redirect_rule , mirror_rule }
 
enum  generic_default_action_type { default_pass , default_drop }
 
enum  generic_flow_rule_action_type {
  flow_drop_rule , flow_mark_rule , flow_pass_rule , flow_steer_rule ,
  flow_unlearn_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
}
 
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_ts , intel_e1000 , intel_ixgbe_82599_ts ,
  intel_i40e , intel_ixgbe_vf , intel_ixgbe_x550 , intel_ice ,
  intel_i40e_ice_vf
}
 
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 , cluster_per_flow_ip_with_dup_tuple , cluster_per_flow_ip_with_dup_tuple_ext
}
 
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_int8_t priority
 
u_int8_t version
 
u_int8_t flow_lbl [3]
 
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_int16_t gdp
 
u_int8_t vni [3]
 
u_int8_t res
 
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
 
u_int8_t port_id
 
u_int16_t device_id
 
int32_t if_index
 
u_int32_t pkt_hash
 
struct { 
 
   int32_t   bounce_interface 
 
   struct sk_buff *   reserved 
 
tx 
 
struct { 
 
   u_int32_t   pid 
 
process 
 
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
 
u_int64_t filtered
 
u_int64_t match_forward
 
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_int16_t cluster_id
 
u_int16_t queue_id
 
u_int32_t options
 
cluster_type the_type
 
u_int32_t recovered
 
u_int32_t object_type
 
u_int32_t object_id
 
u_int32_t lock_mask
 
u_int32_t locked_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
*/