#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <net/icmp.h>
#include <net/sock.h>
#include <net/inet_sock.h>
#include <net/netfilter/ipv4/nf_defrag_ipv4.h>
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
#include <linux/netfilter_ipv6/ip6_tables.h>
#include <net/inet6_hashtables.h>
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
#endif
#include <net/netfilter/nf_socket.h>
#include <linux/netfilter/xt_socket.h>
static bool
socket_match(const struct sk_buff *skb, struct xt_action_param *par,
const struct xt_socket_mtinfo1 *info)
{ … }
static bool
socket_mt4_v0(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
static bool
socket_mt4_v1_v2_v3(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
static bool
socket_mt6_v1_v2_v3(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
#endif
static int socket_mt_enable_defrag(struct net *net, int family)
{ … }
static int socket_mt_v1_check(const struct xt_mtchk_param *par)
{ … }
static int socket_mt_v2_check(const struct xt_mtchk_param *par)
{ … }
static int socket_mt_v3_check(const struct xt_mtchk_param *par)
{ … }
static void socket_mt_destroy(const struct xt_mtdtor_param *par)
{ … }
static struct xt_match socket_mt_reg[] __read_mostly = …;
static int __init socket_mt_init(void)
{ … }
static void __exit socket_mt_exit(void)
{ … }
module_init(…) …;
module_exit(socket_mt_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;