.TH "Packet sample action in tc" 8 "31 Jan 2017" "iproute2" "Linux"

.SH NAME
sample - packet sampling tc action
.SH SYNOPSIS
.in +8
.ti -8

.BR tc " ... " "action sample rate"
.I RATE
.BR "group"
.I GROUP
.RB "[ " trunc
.IR SIZE " ] "
.RB "[ " index
.IR INDEX " ] "
.ti -8

.BR tc " ... " "action sample index "
.I INDEX
.ti -8

.SH DESCRIPTION
The
.B sample
action allows sampling packets matching classifier.

The packets are chosen randomly according to the
.B rate
parameter, and are sampled using the
.B psample
generic netlink channel. The user can also specify packet truncation to save
user-kernel traffic. Each sample includes some informative metadata about the
original packet, which is sent using netlink attributes, alongside the original
packet data.

The user can either specify the sample action parameters as presented in the
first form above, or use an existing sample action using its index, as presented
in the second form.

.SH SAMPLED PACKETS METADATA FIELDS
The metadata are delivered to userspace applications using the
.B psample
generic netlink channel, where each sample includes the following netlink
attributes:
.TP
.BI PSAMPLE_ATTR_IIFINDEX
The input interface index of the packet, if there is one.
.TP
.BI PSAMPLE_ATTR_OIFINDEX
The output interface index of the packet. This field is not relevant on ingress
sampling
.TP
.BI PSAMPLE_ATTR_ORIGSIZE
The size of the original packet (before truncation)
.TP
.BI PSAMPLE_ATTR_SAMPLE_GROUP
The
.B psample
group the packet was sent to
.TP
.BI PSAMPLE_ATTR_GROUP_SEQ
A sequence number of the sampled packet. This number is incremented with each
sampled packet of the current
.B psample
group
.TP
.BI PSAMPLE_ATTR_SAMPLE_RATE
The rate the packet was sampled with
.RE

.SH OPTIONS
.TP
.BI rate " RATE"
The packet sample rate.
.I "RATE"
is the expected ratio between observed packets and sampled packets. For example,
.I "RATE"
of 100 will lead to an average of one sampled packet out of every 100 observed.
.TP
.BI trunc " SIZE"
Upon set, defines the maximum size of the sampled packets, and causes truncation
if needed
.TP
.BI group " GROUP"
The
.B psample
group the packet will be sent to. The
.B psample
module defines the concept of groups, which allows the user to match specific
sampled packets in the case of multiple sampling rules, thus identify only the
packets that came from a specific rule.
.TP
.BI index " INDEX"
Is a unique ID for an action. When creating new action instance, this parameter
allows to set the new action index. When using existing action, this parameter
allows to specify the existing action index.  The index must 32bit unsigned
integer greater than zero.
.SH EXAMPLES
Sample one of every 100 packets flowing into interface eth0 to psample group 12:

.RS
.EX
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: matchall \\
     action sample rate 100 group 12 index 19
.EE
.RE

Use the same action instance to sample eth1 too:

.RS
.EX
tc qdisc add dev eth1 handle ffff: ingress
tc filter add dev eth1 parent ffff: matchall \\
     action sample index 19
.EE
.RE

.EE
.RE
.SH SEE ALSO
.BR tc (8),
.BR tc-matchall (8)
.BR psample (1)
