#include <linux/jhash.h>
#include <linux/module.h>
#include <linux/ip.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/random.h>
#include <net/ip.h>
#include <net/ipv6.h>
#include <net/netlink.h>
#include <linux/netfilter.h>
#include <linux/netfilter/ipset/pfxlen.h>
#include <linux/netfilter/ipset/ip_set.h>
#include <linux/netfilter/ipset/ip_set_hash.h>
#define IPSET_TYPE_REV_MIN …
#define IPSET_TYPE_REV_MAX …
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
IP_SET_MODULE_DESC(…) …;
MODULE_ALIAS(…) …;
#define HTYPE …
#define IP_SET_HASH_WITH_NETS
struct hash_net4_elem { … };
static bool
hash_net4_data_equal(const struct hash_net4_elem *ip1,
const struct hash_net4_elem *ip2,
u32 *multi)
{ … }
static int
hash_net4_do_data_match(const struct hash_net4_elem *elem)
{ … }
static void
hash_net4_data_set_flags(struct hash_net4_elem *elem, u32 flags)
{ … }
static void
hash_net4_data_reset_flags(struct hash_net4_elem *elem, u8 *flags)
{ … }
static void
hash_net4_data_netmask(struct hash_net4_elem *elem, u8 cidr)
{ … }
static bool
hash_net4_data_list(struct sk_buff *skb, const struct hash_net4_elem *data)
{ … }
static void
hash_net4_data_next(struct hash_net4_elem *next,
const struct hash_net4_elem *d)
{ … }
#define MTYPE …
#define HOST_MASK …
#include "ip_set_hash_gen.h"
static int
hash_net4_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
hash_net4_uadt(struct ip_set *set, struct nlattr *tb[],
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried)
{ … }
struct hash_net6_elem { … };
static bool
hash_net6_data_equal(const struct hash_net6_elem *ip1,
const struct hash_net6_elem *ip2,
u32 *multi)
{ … }
static int
hash_net6_do_data_match(const struct hash_net6_elem *elem)
{ … }
static void
hash_net6_data_set_flags(struct hash_net6_elem *elem, u32 flags)
{ … }
static void
hash_net6_data_reset_flags(struct hash_net6_elem *elem, u8 *flags)
{ … }
static void
hash_net6_data_netmask(struct hash_net6_elem *elem, u8 cidr)
{ … }
static bool
hash_net6_data_list(struct sk_buff *skb, const struct hash_net6_elem *data)
{ … }
static void
hash_net6_data_next(struct hash_net6_elem *next,
const struct hash_net6_elem *d)
{ … }
#undef MTYPE
#undef HOST_MASK
#define MTYPE …
#define HOST_MASK …
#define IP_SET_EMIT_CREATE
#include "ip_set_hash_gen.h"
static int
hash_net6_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
hash_net6_uadt(struct ip_set *set, struct nlattr *tb[],
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried)
{ … }
static struct ip_set_type hash_net_type __read_mostly = …;
static int __init
hash_net_init(void)
{ … }
static void __exit
hash_net_fini(void)
{ … }
module_init(…) …;
module_exit(hash_net_fini);