#define pr_fmt(fmt) …
#include <linux/types.h>
#include <linux/module.h>
#include <net/ip.h>
#include <linux/ipv6.h>
#include <linux/icmp.h>
#include <net/ipv6.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_tcpudp.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv6/ip6_tables.h>
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
static inline bool
port_match(u_int16_t min, u_int16_t max, u_int16_t port, bool invert)
{ … }
static bool
tcp_find_option(u_int8_t option,
const struct sk_buff *skb,
unsigned int protoff,
unsigned int optlen,
bool invert,
bool *hotdrop)
{ … }
static bool tcp_mt(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static int tcp_mt_check(const struct xt_mtchk_param *par)
{ … }
static bool udp_mt(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static int udp_mt_check(const struct xt_mtchk_param *par)
{ … }
static bool type_code_in_range(u8 test_type, u8 min_code, u8 max_code,
u8 type, u8 code)
{ … }
static bool icmp_type_code_match(u8 test_type, u8 min_code, u8 max_code,
u8 type, u8 code, bool invert)
{ … }
static bool icmp6_type_code_match(u8 test_type, u8 min_code, u8 max_code,
u8 type, u8 code, bool invert)
{ … }
static bool
icmp_match(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static bool
icmp6_match(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static int icmp_checkentry(const struct xt_mtchk_param *par)
{ … }
static int icmp6_checkentry(const struct xt_mtchk_param *par)
{ … }
static struct xt_match tcpudp_mt_reg[] __read_mostly = …;
static int __init tcpudp_mt_init(void)
{ … }
static void __exit tcpudp_mt_exit(void)
{ … }
module_init(…) …;
module_exit(tcpudp_mt_exit);