netfilter: add xt_qtaguid matching module
authorJP Abgrall <jpa@google.com>
Mon, 20 Jun 2011 19:41:46 +0000 (12:41 -0700)
committermgross <mark.gross@intel.com>
Wed, 9 Nov 2011 20:09:06 +0000 (12:09 -0800)
commit43826c197491ecc44cc0ea200a1cd4ffa7c8f80e
tree2d3b5eb76ffa0e1a551a05e1da1bc4b8769d2e7b
parentfe21c35ff9c140003c9f092e14717e097280af5e
netfilter: add xt_qtaguid matching module

This module allows tracking stats at the socket level for given UIDs.
It replaces xt_owner.
If the --uid-owner is not specified, it will just count stats based on
who the skb belongs to. This will even happen on incoming skbs as it
looks into the skb via xt_socket magic to see who owns it.
If an skb is lost, it will be assigned to uid=0.

To control what sockets of what UIDs are tagged by what, one uses:
  echo t $sock_fd $accounting_tag $the_billed_uid \
     > /proc/net/xt_qtaguid/ctrl
 So whenever an skb belongs to a sock_fd, it will be accounted against
   $the_billed_uid
  and matching stats will show up under the uid with the given
   $accounting_tag.

Because the number of allocations for the stats structs is not that big:
  ~500 apps * 32 per app
we'll just do it atomic. This avoids walking lists many times, and
the fancy worker thread handling. Slabs will grow when needed later.

It use netdevice and inetaddr notifications instead of hooks in the core dev
code to track when a device comes and goes. This removes the need for
exposed iface_stat.h.

Put procfs dirs in /proc/net/xt_qtaguid/
  ctrl
  stats
  iface_stat/<iface>/...
The uid stats are obtainable in ./stats.

Change-Id: I01af4fd91c8de651668d3decb76d9bdc1e343919
Signed-off-by: JP Abgrall <jpa@google.com>
include/linux/netfilter/xt_qtaguid.h [new file with mode: 0644]
net/netfilter/Kconfig
net/netfilter/Makefile
net/netfilter/xt_qtaguid.c [new file with mode: 0644]