netfilter: ipset: IP set core support
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Tue, 1 Feb 2011 14:28:35 +0000 (15:28 +0100)
committerPatrick McHardy <kaber@trash.net>
Tue, 1 Feb 2011 14:28:35 +0000 (15:28 +0100)
commita7b4f989a629493bb4ec4a354def784d440b32c4
tree47f5f6a19cd8fb4cbd44a064edbf03a5b102ea1b
parentf703651ef870bd6b94ddc98ae07488b7d3fd9335
netfilter: ipset: IP set core support

The patch adds the IP set core support to the kernel.

The IP set core implements a netlink (nfnetlink) based protocol by which
one can create, destroy, flush, rename, swap, list, save, restore sets,
and add, delete, test elements from userspace. For simplicity (and backward
compatibilty and for not to force ip(6)tables to be linked with a netlink
library) reasons a small getsockopt-based protocol is also kept in order
to communicate with the ip(6)tables match and target.

The netlink protocol passes all u16, etc values in network order with
NLA_F_NET_BYTEORDER flag. The protocol enforces the proper use of the
NLA_F_NESTED and NLA_F_NET_BYTEORDER flags.

For other kernel subsystems (netfilter match and target) the API contains
the functions to add, delete and test elements in sets and the required calls
to get/put refereces to the sets before those operations can be performed.

The set types (which are implemented in independent modules) are stored
in a simple RCU protected list. A set type may have variants: for example
without timeout or with timeout support, for IPv4 or for IPv6. The sets
(i.e. the pointers to the sets) are stored in an array. The sets are
identified by their index in the array, which makes possible easy and
fast swapping of sets. The array is protected indirectly by the nfnl
mutex from nfnetlink. The content of the sets are protected by the rwlock
of the set.

There are functional differences between the add/del/test functions
for the kernel and userspace:

- kernel add/del/test: works on the current packet (i.e. one element)
- kernel test: may trigger an "add" operation  in order to fill
  out unspecified parts of the element from the packet (like MAC address)
- userspace add/del: works on the netlink message and thus possibly
  on multiple elements from the IPSET_ATTR_ADT container attribute.
- userspace add: may trigger resizing of a set

Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: Patrick McHardy <kaber@trash.net>
include/linux/netfilter/ipset/ip_set.h [new file with mode: 0644]
include/linux/netfilter/ipset/ip_set_getport.h [new file with mode: 0644]
include/linux/netfilter/ipset/pfxlen.h [new file with mode: 0644]
net/netfilter/Kconfig
net/netfilter/Makefile
net/netfilter/ipset/Kconfig [new file with mode: 0644]
net/netfilter/ipset/Makefile [new file with mode: 0644]
net/netfilter/ipset/ip_set_core.c [new file with mode: 0644]
net/netfilter/ipset/ip_set_getport.c [new file with mode: 0644]
net/netfilter/ipset/pfxlen.c [new file with mode: 0644]