#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <net/ip.h>
#include <linux/dccp.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_dccp.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv6/ip6_tables.h>
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
#define DCCHECK(cond, option, flag, invflag) …
static unsigned char *dccp_optbuf;
static DEFINE_SPINLOCK(dccp_buflock);
static inline bool
dccp_find_option(u_int8_t option,
const struct sk_buff *skb,
unsigned int protoff,
const struct dccp_hdr *dh,
bool *hotdrop)
{ … }
static inline bool
match_types(const struct dccp_hdr *dh, u_int16_t typemask)
{ … }
static inline bool
match_option(u_int8_t option, const struct sk_buff *skb, unsigned int protoff,
const struct dccp_hdr *dh, bool *hotdrop)
{ … }
static bool
dccp_mt(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static int dccp_mt_check(const struct xt_mtchk_param *par)
{ … }
static struct xt_match dccp_mt_reg[] __read_mostly = …;
static int __init dccp_mt_init(void)
{ … }
static void __exit dccp_mt_exit(void)
{ … }
module_init(…) …;
module_exit(dccp_mt_exit);