#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/socket.h>
#include <linux/hash.h>
#include <linux/l2tp.h>
#include <linux/in.h>
#include <linux/etherdevice.h>
#include <linux/spinlock.h>
#include <net/sock.h>
#include <net/ip.h>
#include <net/icmp.h>
#include <net/udp.h>
#include <net/inet_common.h>
#include <net/inet_hashtables.h>
#include <net/tcp_states.h>
#include <net/protocol.h>
#include <net/xfrm.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/udp.h>
#include "l2tp_core.h"
#define L2TP_ETH_DEV_NAME …
struct l2tp_eth { … };
struct l2tp_eth_sess { … };
static int l2tp_eth_dev_init(struct net_device *dev)
{ … }
static void l2tp_eth_dev_uninit(struct net_device *dev)
{ … }
static netdev_tx_t l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static void l2tp_eth_get_stats64(struct net_device *dev,
struct rtnl_link_stats64 *stats)
{ … }
static const struct net_device_ops l2tp_eth_netdev_ops = …;
static const struct device_type l2tpeth_type = …;
static void l2tp_eth_dev_setup(struct net_device *dev)
{ … }
static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
{ … }
static void l2tp_eth_delete(struct l2tp_session *session)
{ … }
static void l2tp_eth_show(struct seq_file *m, void *arg)
{ … }
static void l2tp_eth_adjust_mtu(struct l2tp_tunnel *tunnel,
struct l2tp_session *session,
struct net_device *dev)
{ … }
static int l2tp_eth_create(struct net *net, struct l2tp_tunnel *tunnel,
u32 session_id, u32 peer_session_id,
struct l2tp_session_cfg *cfg)
{ … }
static const struct l2tp_nl_cmd_ops l2tp_eth_nl_cmd_ops = …;
static int __init l2tp_eth_init(void)
{ … }
static void __exit l2tp_eth_exit(void)
{ … }
module_init(…) …;
module_exit(l2tp_eth_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…) …;
MODULE_ALIAS_L2TP_PWTYPE(…);