Skip to content
  • Jozsef Kadlecsik's avatar
    netfilter: ipset: IP set core support · a7b4f989
    Jozsef Kadlecsik authored
    
    
    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: default avatarJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
    Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
    a7b4f989