#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/gen_stats.h>
#include <linux/jhash.h>
#include <linux/rtnetlink.h>
#include <linux/random.h>
#include <linux/slab.h>
#include <net/gen_stats.h>
#include <net/netlink.h>
#include <net/netns/generic.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_RATEEST.h>
#include <net/netfilter/xt_rateest.h>
#define RATEEST_HSIZE …
struct xt_rateest_net { … };
static unsigned int xt_rateest_id;
static unsigned int jhash_rnd __read_mostly;
static unsigned int xt_rateest_hash(const char *name)
{ … }
static void xt_rateest_hash_insert(struct xt_rateest_net *xn,
struct xt_rateest *est)
{ … }
static struct xt_rateest *__xt_rateest_lookup(struct xt_rateest_net *xn,
const char *name)
{ … }
struct xt_rateest *xt_rateest_lookup(struct net *net, const char *name)
{ … }
EXPORT_SYMBOL_GPL(…);
void xt_rateest_put(struct net *net, struct xt_rateest *est)
{ … }
EXPORT_SYMBOL_GPL(…);
static unsigned int
xt_rateest_tg(struct sk_buff *skb, const struct xt_action_param *par)
{ … }
static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
{ … }
static void xt_rateest_tg_destroy(const struct xt_tgdtor_param *par)
{ … }
static struct xt_target xt_rateest_tg_reg __read_mostly = …;
static __net_init int xt_rateest_net_init(struct net *net)
{ … }
static struct pernet_operations xt_rateest_net_ops = …;
static int __init xt_rateest_tg_init(void)
{ … }
static void __exit xt_rateest_tg_fini(void)
{ … }
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
module_init(…) …;
module_exit(xt_rateest_tg_fini);