net: Introduce psample, a new genetlink channel for packet sampling
authorYotam Gigi <yotamg@mellanox.com>
Mon, 23 Jan 2017 10:07:08 +0000 (11:07 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Jan 2017 18:44:28 +0000 (13:44 -0500)
commit6ae0a6286171154661b74f7f550f9441c6008424
treeafce8750cb4e2ec1e1162d30b986cb88724c8ba7
parentd36db83bac41e46cb89bd1ef57e049ce80a7433a
net: Introduce psample, a new genetlink channel for packet sampling

Add a general way for kernel modules to sample packets, without being tied
to any specific subsystem. This netlink channel can be used by tc,
iptables, etc. and allow to standardize packet sampling in the kernel.

For every sampled packet, the psample module adds the following metadata
fields:

PSAMPLE_ATTR_IIFINDEX - the packets input ifindex, if applicable

PSAMPLE_ATTR_OIFINDEX - the packet output ifindex, if applicable

PSAMPLE_ATTR_ORIGSIZE - the packet's original size, in case it has been
   truncated during sampling

PSAMPLE_ATTR_SAMPLE_GROUP - the packet's sample group, which is set by the
   user who initiated the sampling. This field allows the user to
   differentiate between several samplers working simultaneously and
   filter packets relevant to him

PSAMPLE_ATTR_GROUP_SEQ - sequence counter of last sent packet. The
   sequence is kept for each group

PSAMPLE_ATTR_SAMPLE_RATE - the sampling rate used for sampling the packets

PSAMPLE_ATTR_DATA - the actual packet bits

The sampled packets are sent to the PSAMPLE_NL_MCGRP_SAMPLE multicast
group. In addition, add the GET_GROUPS netlink command which allows the
user to see the current sample groups, their refcount and sequence number.
This command currently supports only netlink dump mode.

Signed-off-by: Yotam Gigi <yotamg@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
MAINTAINERS
include/net/psample.h [new file with mode: 0644]
include/uapi/linux/Kbuild
include/uapi/linux/psample.h [new file with mode: 0644]
net/Kconfig
net/Makefile
net/psample/Kconfig [new file with mode: 0644]
net/psample/Makefile [new file with mode: 0644]
net/psample/psample.c [new file with mode: 0644]