#include <linux/gfp.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/skbuff.h>
#include <linux/tc_ematch/tc_em_ipt.h>
#include <linux/netfilter.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv6/ip6_tables.h>
#include <net/pkt_cls.h>
struct em_ipt_match { … };
struct em_ipt_xt_match { … };
static const struct nla_policy em_ipt_policy[TCA_EM_IPT_MAX + 1] = …;
static int check_match(struct net *net, struct em_ipt_match *im, int mdata_len)
{ … }
static int policy_validate_match_data(struct nlattr **tb, u8 mrev)
{ … }
static int addrtype_validate_match_data(struct nlattr **tb, u8 mrev)
{ … }
static const struct em_ipt_xt_match em_ipt_xt_matches[] = …;
static struct xt_match *get_xt_match(struct nlattr **tb)
{ … }
static int em_ipt_change(struct net *net, void *data, int data_len,
struct tcf_ematch *em)
{ … }
static void em_ipt_destroy(struct tcf_ematch *em)
{ … }
static int em_ipt_match(struct sk_buff *skb, struct tcf_ematch *em,
struct tcf_pkt_info *info)
{ … }
static int em_ipt_dump(struct sk_buff *skb, struct tcf_ematch *em)
{ … }
static struct tcf_ematch_ops em_ipt_ops = …;
static int __init init_em_ipt(void)
{ … }
static void __exit exit_em_ipt(void)
{ … }
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
module_init(…) …;
module_exit(exit_em_ipt);
MODULE_ALIAS_TCF_EMATCH(…);