#include <linux/module.h>
#include <linux/ip.h>
#include <linux/rculist.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/netfilter/ipset/ip_set.h>
#include <linux/netfilter/ipset/ip_set_list.h>
#define IPSET_TYPE_REV_MIN …
#define IPSET_TYPE_REV_MAX …
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
IP_SET_MODULE_DESC(…) …;
MODULE_ALIAS(…) …;
struct set_elem { … } __aligned(…);
struct set_adt_elem { … };
struct list_set { … };
static int
list_set_ktest(struct ip_set *set, const struct sk_buff *skb,
const struct xt_action_param *par,
struct ip_set_adt_opt *opt, const struct ip_set_ext *ext)
{ … }
static int
list_set_kadd(struct ip_set *set, const struct sk_buff *skb,
const struct xt_action_param *par,
struct ip_set_adt_opt *opt, const struct ip_set_ext *ext)
{ … }
static int
list_set_kdel(struct ip_set *set, const struct sk_buff *skb,
const struct xt_action_param *par,
struct ip_set_adt_opt *opt, const struct ip_set_ext *ext)
{ … }
static int
list_set_kadt(struct ip_set *set, const struct sk_buff *skb,
const struct xt_action_param *par,
enum ipset_adt adt, struct ip_set_adt_opt *opt)
{ … }
static void
__list_set_del_rcu(struct rcu_head * rcu)
{ … }
static void
list_set_del(struct ip_set *set, struct set_elem *e)
{ … }
static void
list_set_replace(struct ip_set *set, struct set_elem *e, struct set_elem *old)
{ … }
static void
set_cleanup_entries(struct ip_set *set)
{ … }
static int
list_set_utest(struct ip_set *set, void *value, const struct ip_set_ext *ext,
struct ip_set_ext *mext, u32 flags)
{ … }
static void
list_set_init_extensions(struct ip_set *set, const struct ip_set_ext *ext,
struct set_elem *e)
{ … }
static int
list_set_uadd(struct ip_set *set, void *value, const struct ip_set_ext *ext,
struct ip_set_ext *mext, u32 flags)
{ … }
static int
list_set_udel(struct ip_set *set, void *value, const struct ip_set_ext *ext,
struct ip_set_ext *mext, u32 flags)
{ … }
static int
list_set_uadt(struct ip_set *set, struct nlattr *tb[],
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried)
{ … }
static void
list_set_flush(struct ip_set *set)
{ … }
static void
list_set_destroy(struct ip_set *set)
{ … }
static size_t
list_set_memsize(const struct list_set *map, size_t dsize)
{ … }
static int
list_set_head(struct ip_set *set, struct sk_buff *skb)
{ … }
static int
list_set_list(const struct ip_set *set,
struct sk_buff *skb, struct netlink_callback *cb)
{ … }
static bool
list_set_same_set(const struct ip_set *a, const struct ip_set *b)
{ … }
static void
list_set_cancel_gc(struct ip_set *set)
{ … }
static const struct ip_set_type_variant set_variant = …;
static void
list_set_gc(struct timer_list *t)
{ … }
static void
list_set_gc_init(struct ip_set *set, void (*gc)(struct timer_list *t))
{ … }
static bool
init_list_set(struct net *net, struct ip_set *set, u32 size)
{ … }
static int
list_set_create(struct net *net, struct ip_set *set, struct nlattr *tb[],
u32 flags)
{ … }
static struct ip_set_type list_set_type __read_mostly = …;
static int __init
list_set_init(void)
{ … }
static void __exit
list_set_fini(void)
{ … }
module_init(…) …;
module_exit(list_set_fini);