#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/if_ether.h>
#include <net/ip.h>
#include <linux/ipv6.h>
#include <net/ipv6.h>
#include <net/udp.h>
#include <linux/l2tp.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_ipv6.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv6/ip6_tables.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_tcpudp.h>
#include <linux/netfilter/xt_l2tp.h>
#define L2TP_HDR_T_BIT …
#define L2TP_HDR_L_BIT …
#define L2TP_HDR_VER …
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;
MODULE_ALIAS(…) …;
struct l2tp_data { … };
l2tp_val;
static bool l2tp_match(const struct xt_l2tp_info *info, struct l2tp_data *data)
{ … }
static bool l2tp_udp_mt(const struct sk_buff *skb, struct xt_action_param *par, u16 thoff)
{ … }
static bool l2tp_ip_mt(const struct sk_buff *skb, struct xt_action_param *par, u16 thoff)
{ … }
static bool l2tp_mt4(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
static bool l2tp_mt6(const struct sk_buff *skb, struct xt_action_param *par)
{ … }
#endif
static int l2tp_mt_check(const struct xt_mtchk_param *par)
{ … }
static int l2tp_mt_check4(const struct xt_mtchk_param *par)
{ … }
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
static int l2tp_mt_check6(const struct xt_mtchk_param *par)
{ … }
#endif
static struct xt_match l2tp_mt_reg[] __read_mostly = …;
static int __init l2tp_mt_init(void)
{ … }
static void __exit l2tp_mt_exit(void)
{ … }
module_init(…) …;
module_exit(l2tp_mt_exit);