#include <linux/module.h>
#include <linux/ip.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/if_ether.h>
#include <linux/netlink.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
#include <net/netlink.h>
#include <linux/netfilter/ipset/pfxlen.h>
#include <linux/netfilter/ipset/ip_set.h>
#include <linux/netfilter/ipset/ip_set_bitmap.h>
#define IPSET_TYPE_REV_MIN …
#define IPSET_TYPE_REV_MAX …
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
IP_SET_MODULE_DESC(…) …;
MODULE_ALIAS(…) …;
#define MTYPE …
#define HOST_MASK …
#define IP_SET_BITMAP_STORED_TIMEOUT
enum { … };
struct bitmap_ipmac { … };
struct bitmap_ipmac_adt_elem { … };
struct bitmap_ipmac_elem { … } __aligned(…);
static u32
ip_to_id(const struct bitmap_ipmac *m, u32 ip)
{ … }
#define get_elem(extensions, id, dsize) …
#define get_const_elem(extensions, id, dsize) …
static int
bitmap_ipmac_do_test(const struct bitmap_ipmac_adt_elem *e,
const struct bitmap_ipmac *map, size_t dsize)
{ … }
static int
bitmap_ipmac_gc_test(u16 id, const struct bitmap_ipmac *map, size_t dsize)
{ … }
static int
bitmap_ipmac_is_filled(const struct bitmap_ipmac_elem *elem)
{ … }
static int
bitmap_ipmac_add_timeout(unsigned long *timeout,
const struct bitmap_ipmac_adt_elem *e,
const struct ip_set_ext *ext, struct ip_set *set,
struct bitmap_ipmac *map, int mode)
{ … }
static int
bitmap_ipmac_do_add(const struct bitmap_ipmac_adt_elem *e,
struct bitmap_ipmac *map, u32 flags, size_t dsize)
{ … }
static int
bitmap_ipmac_do_del(const struct bitmap_ipmac_adt_elem *e,
struct bitmap_ipmac *map)
{ … }
static int
bitmap_ipmac_do_list(struct sk_buff *skb, const struct bitmap_ipmac *map,
u32 id, size_t dsize)
{ … }
static int
bitmap_ipmac_do_head(struct sk_buff *skb, const struct bitmap_ipmac *map)
{ … }
static int
bitmap_ipmac_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 int
bitmap_ipmac_uadt(struct ip_set *set, struct nlattr *tb[],
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried)
{ … }
static bool
bitmap_ipmac_same_set(const struct ip_set *a, const struct ip_set *b)
{ … }
#include "ip_set_bitmap_gen.h"
static bool
init_map_ipmac(struct ip_set *set, struct bitmap_ipmac *map,
u32 first_ip, u32 last_ip, u32 elements)
{ … }
static int
bitmap_ipmac_create(struct net *net, struct ip_set *set, struct nlattr *tb[],
u32 flags)
{ … }
static struct ip_set_type bitmap_ipmac_type = …;
static int __init
bitmap_ipmac_init(void)
{ … }
static void __exit
bitmap_ipmac_fini(void)
{ … }
module_init(…) …;
module_exit(bitmap_ipmac_fini);