summaryrefslogtreecommitdiff
path: root/drivers/net/wireguard/device.c
diff options
context:
space:
mode:
authorBruno Martins <bgcngm@gmail.com>2020-12-06 18:31:14 +0000
committerMichael Bestas <mkbestas@lineageos.org>2020-12-31 19:40:46 +0200
commit141849eac5defb4bb6cf6e6f1381cb24ffcfdba5 (patch)
tree991068d0b0e30be8ca5879ba6e2914b82eefd25b /drivers/net/wireguard/device.c
parent7d982ef6fe996f837d5c0c71feb2a3f3989deee7 (diff)
drivers: net: Modify WireGuard for backward compat
Change-Id: I1c8e130a514a7b0329f8df8099cc84f4cc8d5822
Diffstat (limited to 'drivers/net/wireguard/device.c')
-rw-r--r--drivers/net/wireguard/device.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c
index de8a4fad4d3f..1155783a8f10 100644
--- a/drivers/net/wireguard/device.c
+++ b/drivers/net/wireguard/device.c
@@ -29,7 +29,9 @@ static LIST_HEAD(device_list);
static int wg_open(struct net_device *dev)
{
struct in_device *dev_v4 = __in_dev_get_rtnl(dev);
+#ifndef COMPAT_CANNOT_USE_IN6_DEV_GET
struct inet6_dev *dev_v6 = __in6_dev_get(dev);
+#endif
struct wg_device *wg = netdev_priv(dev);
struct wg_peer *peer;
int ret;
@@ -42,8 +44,14 @@ static int wg_open(struct net_device *dev)
IN_DEV_CONF_SET(dev_v4, SEND_REDIRECTS, false);
IPV4_DEVCONF_ALL(dev_net(dev), SEND_REDIRECTS) = false;
}
+#ifndef COMPAT_CANNOT_USE_IN6_DEV_GET
if (dev_v6)
+#ifndef COMPAT_CANNOT_USE_DEV_CNF
dev_v6->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_NONE;
+#else
+ dev_v6->addr_gen_mode = IN6_ADDR_GEN_MODE_NONE;
+#endif
+#endif
mutex_lock(&wg->device_update_lock);
ret = wg_socket_init(wg, wg->incoming_port);
@@ -262,19 +270,26 @@ static void wg_setup(struct net_device *dev)
max(sizeof(struct ipv6hdr), sizeof(struct iphdr));
dev->netdev_ops = &netdev_ops;
+ dev->header_ops = &ip_tunnel_header_ops;
dev->hard_header_len = 0;
dev->addr_len = 0;
dev->needed_headroom = DATA_PACKET_HEAD_ROOM;
dev->needed_tailroom = noise_encrypted_len(MESSAGE_PADDING_MULTIPLE);
dev->type = ARPHRD_NONE;
dev->flags = IFF_POINTOPOINT | IFF_NOARP;
+#ifndef COMPAT_CANNOT_USE_IFF_NO_QUEUE
dev->priv_flags |= IFF_NO_QUEUE;
+#else
+ dev->tx_queue_len = 0;
+#endif
dev->features |= NETIF_F_LLTX;
dev->features |= WG_NETDEV_FEATURES;
dev->hw_features |= WG_NETDEV_FEATURES;
dev->hw_enc_features |= WG_NETDEV_FEATURES;
dev->mtu = ETH_DATA_LEN - overhead;
+#ifndef COMPAT_CANNOT_USE_MAX_MTU
dev->max_mtu = round_down(INT_MAX, MESSAGE_PADDING_MULTIPLE) - overhead;
+#endif
SET_NETDEV_DEVTYPE(dev, &device_type);
@@ -393,7 +408,7 @@ static struct rtnl_link_ops link_ops __read_mostly = {
.newlink = wg_newlink,
};
-static void wg_netns_exit(struct net *net)
+static void wg_netns_pre_exit(struct net *net)
{
struct wg_device *wg;
@@ -412,7 +427,7 @@ static void wg_netns_exit(struct net *net)
}
static struct pernet_operations pernet_ops = {
- .exit = wg_netns_exit
+ .pre_exit = wg_netns_pre_exit
};
int __init wg_device_init(void)